UDLDを究める:(10) UDLD のアルゴリズム (2) Unidirectional を検知する

一旦Bi-directional(双方向)になった後、Unidirectional(片方向)を検知するまでを見ていきます。

a
Advertisement フェイズ

受信するUDPD PDU に自身の情報が無くなってから45秒(対向機器から通知されるMessage Interval の3倍)経過すると、それまで学習していた対向機器の情報を削除し、Link Up フェイズへ移行します。

udld-10-1.png
上図では、Catalyst-A はCatalyst-B からのProbe を受信できなくなり、Link Up フェイズへ移行します。



Link Up フェイズ(Catalyst-A)

Catalyst-A がLink Up フェイズへ移行すると、空のEcho TLV を持ったProbe を1 秒間隔で送信し始めます。

udld-10-2.png

Catalyst-B はまだAdvertisement フェイズです。

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

Catalyst-A

    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

Catalyst-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 (Catalyst-A)
    Message Interval = 15
    Timeout Interval = 5
    Device Name TLV = 自分に設定されたhostname


Catalyst-A から空のEcho TLV を持ったProbe を受信し始めると、Catalyst-B はDetection フェイズへ移行します。


Detection フェイズ(Catalyst-B)

Catalyst-B がDetection フェイズへ移行すると、Catalyst-A との間のフレーム到達性確認を始めます(ディテクション・ウィンドウ)。

Catalyst-A がUDLD PDU を受信できない今の状態で、Catalyst-A から送られてくるUDLD PDU のEcho TLV に自身の情報が格納されることはありえないので、5 秒後、ディテクション・ウィンドウが終了し、次いで拡張ディテクション・ウィンドウが開始されます。


udld-10-3.png

Catalyst-A からは空のEcho TLV を持ったUDLD PDU を受信し続けているので、拡張ディテクション・ウィンドウが始まるとCatalyst-B はUnidirectional と判断し、Flush を送信したのちポートをErrDisableにします。

Catalyst-B の側でErrDisable となると、Catalyst-A のポートはリンク・ダウンします。


udld-10-4.png

Catalyst-A 側が積極的にポートをErrDisable としないのは、UDLD PDU の不達が一時的な物である可能性を考慮し、復旧可能な場合を想定しているからです。

UniDirectional(片方向)と判断するための条件が、拡張ディテクションウィンドウ中に空のEcho TLV を持ったUDLD PDU を対向機器から受信することである点に注意してください。

Catalyst-B のポートが受信も送信もできなくなった場合は、両方のCatalyst がLink Up フェイズにとどまり続けることとなり、UniDirectional(片方向)を検知する事はできません。

この欠点を解消したのがUDLD アグレッシブモード です。