UDLDを究める:(9) UDLD のアルゴリズム (1) ネイバー関係の確立

Catalyst のポートがリンク・アップしてから、UDLD のステートがBi-directional となるまでの流れを見ていきます。

a
UDLD ネイバー関係の確立

Link Up フェイズ

ポートがリンク・アップすると、1秒間隔でProbe(Hello、Advertisement とも呼ぶ)を送信し始めます。

udld-9-1.png
このときのUDLD PDU に含まれる内容は、以下のとおりです。

Catalyst-A、B ともに

    Opcode = 00001(Probe)
    RT bit = 1
    RSY bit = 1
    Device ID TLV = 自身のDevice ID
    Port ID TLV = このUDLD PDU を送信しているポートの番号
    Echo TLV = 空
    Message Interval = 7
    Timeout Interval = 5
    Device Name TLV = 自身に設定されたhostname

Probe を8 回送信するまでの間に(つまり8 秒間)対向機器からのUDLD PDU を受信できない場合、以後は7 秒間隔でProbe を送信し続けます。
その際のProbe のフォーマットは、RSY ビットが0 となる以外は、1 秒間隔の時と同じです。

対向機器からUDLD PDU を受信すると、Detection フェイズへ移行します。



Detection フェイズ

Detection フェイズに移行すると、Echo を1 秒間隔で5 秒間送信します。この5 秒はTimeout Interval で定められた秒数です。

この5 秒間をディテクション・ウィンドウと呼び、この間に自身の情報が格納されているEcho を対向機器から受信することが期待されます(つまり、自身の送信したProbe が対向機器に届いていることを意味する)。


udld-9-2.png

このときのUDLD PDU に含まれる内容は以下のとおりです。

Catalyst-A、B ともに

    Opcode = 00010(Echo)
    RT bit = 1
    RSY bit = 0
    Device ID TLV = 自分のDevice ID
    Port ID TLV = このUDLD PDU を送信しているポートの番号
    Echo TLV = 受信したUDLD PDU から抽出したDevice ID/Port ID
    Message Interval = 7
    Timeout Interval = 5
    Device Name TLV = 自分に設定されたhostname

ディテクション・ウィンドウの間に自身の情報がEcho TLV に格納されているUDLD PDU を受信すると、UDLD ステートをBi-Directional とし、Advertisement フェイズへ移行します。

受信したEcho TLV に自身の情報が格納されているということは、送信したUDLD PDU が対向機器に到達できている事を意味し、フレームの送受信がどちらも正常であるとみなされます。

ディテクション・ウィンドウの間に自身の情報がEcho TLV に格納されているUDLD PDU を対向機器から受信できない場合、拡張ディテクション・ウィンドウ(Extended Detection Window)が開始され、以後はProbe をMessage Interval(= 7秒)の間隔で送信します。

拡張ディテクション・ウィンドウの間に空のEcho TLV を持つUDLD PDU を対向機器から受信すると、UniDirectional(片方向)であると判断してFlush を送信し、そのポートをErrDisable とします

通常はリンク・アップ直後に拡張ディテクション・ウィンドウが始まることはなく、通常のディテクション・ウィンドウ中にAdvertisement フェイズへ移行します。
拡張ディテクション・ウィンドウが必要になるのは、一旦Bi-directional となった後で不具合を検知するときです。



Advertisement フェイズ

UDLD State がBi-directional になると、Advertisement フェイズへ移行します。

以後は、自身に設定されたMessage Interval(デフォルトは15秒)の間隔でProbe を送信し続けます。


udld-9-3.png

このときのUDLD PDU に含まれる内容は以下のとおりです。

Catalyst-A、B ともに

    Opcode = 00001 (Probe)
    RT bit = 1
    RSY bit = 0
    Device ID TLV = 自分のDevice ID
    Port ID TLV = このUDLD PDU を送信しているポートの番号
    Echo TLV = 受信したUDLD PDU から抽出したDevice ID/Port ID
    Message Interval = 15
    Timeout Interval = 5
    Device Name TLV = 自分に設定されたhostname