はじめに
このドキュメントでは、単方向リンク検出(UDLD)プロトコルを使用して、スイッチドネットワークでのループやトラフィックの異常を防止する方法について説明します。
前提条件
要件
このドキュメントに関する固有の要件はありません。
使用するコンポーネント
このドキュメントの内容は、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
表記法
ドキュメント表記の詳細については、『シスコテクニカルティップスの表記法』を参照してください。
問題の定義
スパニングツリープロトコル(STP)は、冗長な物理トポロジをループのないツリー状の転送トポロジに解決します。
これを行うには、1つ以上のポートをブロックします。1つ以上のポートがブロックされた状態では、転送トポロジにループは存在しません。STP の動作は、Bridge Protocol Data Unit(BPDU; ブリッジ プロトコル データ ユニット)の受信と送信に依存しています。
ポートがblocking 状態になっているスイッチ上で稼働しているSTPプロセスが、そのアップストリーム(指定)スイッチからBPDUを受信していない場合、STPは最終的にそのポートのSTP情報をエージングアウトし、forwarding 状態に移行します。
これによりSTPループが発生し、パケットがループしたパスを無限に循環し始め、より多くの帯域幅とリソースを消費するようになります。その結果、ネットワークが停止する可能性があります。
ポートがup(スプーフィング)の間、スイッチがBPDUを受信しないようにするには、どうすればよいですか。その理由は単方向リンクです。
次の状況が発生すると、リンクは単方向とみなされます。
次のシナリオについて考えます。矢印は STP BPDU の流れを示しています。

通常の動作中、ブリッジBはリンクB-Cの指定ポートです。ブリッジBは、ポートをブロックしているCにBPDUを送信します。B からの BPDU がそのリンク上に正しく送信されていることが C で認識されている間は、ポートがブロックされます。
ここで、リンクB-CがCの方向で失敗した場合に何が起こるかを考えます。CはBからのトラフィックを受信しなくなりますが、Bは引き続きCからのトラフィックを受信します。
up
CはリンクB-CでBPDUを受信せず、最後のBPDUで受信した情報をエージングします。maxAge STPタイマーによって異なりますが、これには最大20秒かかります。
ポートの STP 情報がエージング アウトされると、そのポートの状態は blocking から listening、learning に移行し、最終的には forwarding STP 状態に移行します。
三角形A-B-Cにはブロックされたポートがないため、これによりループが作成されます。パケットはパスに沿って循環します(BはCからパケットを受信します)。これにより、リンクが完全にいっぱいになるまで、追加の帯域幅が消費されます。
このシナリオでは、ネットワークがダウンする可能性があります。単方向リンクによって発生する可能性があるもう1つの問題は、トラフィックのブラックホールです。

単方向リンク検出プロトコルの動作のしくみ
UDLD は、レイヤ 1(L1)メカニズムと連携し、リンクの物理的な状態を判別するレイヤ 2(L2)プロトコルです。
レイヤ 1 では、オートネゴシエーションによって、物理的シグナリングと障害検出が行われます。UDLDでは、ネイバーのIDの検出や誤って接続されたポートのシャットダウンなど、オートネゴシエーションでは実行できないタスクが実行されます。
オートネゴシエーションと UDLD の両方を有効にすると、レイヤ 1 とレイヤ 2 の検出機能がともに動作して、物理的および論理的な単方向接続と他のプロトコルの動作不良が防止されます。
UDLDは、隣接デバイス間のプロトコルパケットの交換を介して動作します。UDLDを機能させるには、リンク上の両方のデバイスでUDLDがサポートされており、それぞれのポートで有効になっている必要があります。
UDLD用に設定された各スイッチポートは、UDLDプロトコルパケットを送信します。このパケットには、ポートのデバイス/ポートIDと、そのポート上でUDLDによって検出されたネイバーデバイス/ポートIDが含まれています。
隣接ポートは、相手側から受信したパケットで自身のデバイス/ポートID(エコー)を確認します。着信 UDLD パケットで、自分のデバイス ID またはポート ID を特定の期間認識できないと、リンクは単方向とみなされます。
エコーアルゴリズムを使用すれば、次の問題を検出できます。
UDLD により単方向リンクが検出されると、対応するポートが無効にされて、次のメッセージがコンソールに表示されます。
UDLD-3-DISABLE: Unidirectional link detected on port 1/2. Port disabled
UDLDによってシャットダウンされたポートは、手動で有効にするか、untilerrdisabletimeoutの有効期限が切れる(設定されている場合)まで、無効のままになります。
UDLD の動作モード
UDLDは、normalとaggressiveの2つのモードで動作できます。
- normal モードでは、ポートのリンク状態が双方向と判別されている場合に UDLD 情報がタイムアウトした場合、UDLD では何のアクションも取られません。UDLD のポート状態は undetermined となります。ポートはSTPステートに従って動作します。
- aggressive モードでは、ポートのリンク状態が双方向と判別されている場合に、ポート上のリンクが引き続き up 状態の間に UDLD 情報がタイムアウトすると、UDLD ではポートの状態の再確立が試みられます。再確立に失敗したら、ポートは errdisable 状態になります。
UDLDを実行しているポートが、ホールドタイムの間に隣接ポートからUDLDパケットを受信しないと、UDLD情報のエージングアウトが発生します。
ポートの保留時間はリモート ポートによって規定され、リモート側のメッセージ間隔に依存します。メッセージ間隔が短いほど、保留時間は短くなり、検出が速くなります。
最近実装された UDLD では、メッセージ間隔を設定できます。一部の物理的な問題や全二重/半二重のミスマッチが原因でポートでのエラー率が高くなると、UDLD 情報がエージング アウトする場合があります。
このようなパケットの廃棄はリンクが単方向になったことを意味するものではなく、normalモードのUDLDでは、そのようなリンクが無効にされることはありません。
適正な検出時間を確保するためには、正しいメッセージ間隔を選択できることが重要です。メッセージ間隔は、転送ループが作成される前に単方向リンクを検出できるほど高速である必要がありますが、スイッチのCPUを過負荷にしないでください。デフォルトのメッセージ間隔は15秒で、デフォルトのSTPタイマーを使用して転送ループが作成される前に単方向リンクを検出するのに十分な速さです。検出時間は、メッセージ間隔のおよそ 3 倍です。
例:Tdetection~ message_interval x3
これは、デフォルトのメッセージ間隔 15 秒に対し、45 秒になります。
単方向リンクに障害がある場合、STP の再コンバージェンスにかかる時間は、Treconvergence=max_age + 2x forward_delay になります。デフォルト タイマーの設定では、20+2x15=50 秒かかります。
Tdetection< Treconvergenceの関係を維持したまま、適切なメッセージ間隔を選択することを推奨いたします。
aggressiveモードでは、情報がエージングされると、UDLDによってリンクステートの再確立が試行され、パケットが8秒間、毎秒送信されます。リンク状態を引き続き判別できない場合は、リンクが無効になります。
Aggressivemodeでは、さらに次の状況が検出されます。
最近では、これらの場合に両側のリンクを down 状態にするために、ファイバの FastEthernet のハードウェアに Far End Fault Indication(FEFI)機能が実装されています。
ギガビットイーサネットでは、リンクネゴシエーションによって同様の機能が提供されます。銅線ポートでは、イーサネット リンクのパルスを使用してリンクが監視されているので、このタイプの問題は通常発生しません。
どちらの場合も、ポート間に接続がないため、フォワードループは発生しません。ただし、リンクが一方でアップ状態になり、他方でダウン状態になると、ブラックホールが発生する可能性があります。
アグレッシブ UDLD は、これを回避する設計になっています。
アベイラビリティ
UDLDは、Cisco IOS®ソフトウェアリリース12以降では、通常モードとアグレッシブモードで使用できます。
設定とモニタリング
UDLDがインターフェイスで有効かどうかを確認するには、show udldコマンドを実行します。
Switch#show udld
Interface Gi1/0/1
---
Port enable administrative configuration setting: Disabled
Port enable operational state: Disabled
Current bidirectional state: Unknown
Interface Gi1/0/2
---
Port enable administrative configuration setting: Disabled
Port enable operational state: Disabled
Current bidirectional state: Unknown
Interface Gi1/0/3
---
Port enable administrative configuration setting: Disabled
Port enable operational state: Disabled
Current bidirectional state: Unknown
インターフェイスにアグレッシブUDLDを設定するには、udld port aggressive
コマンドを使用します。
Switch#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Switch(config)#interface gigabitEthernet1/0/1
Switch(config-if)#udld port aggressive
Switch(config-if)#end
Switch#
UDLDがポートで有効なのか無効なのか、およびリンクとネイバーの状態を確認するには、show udld <interface>
およびshow udld neighbors
コマンドを発行します。
Switch#show udld GigabitEthernet1/0/1
Interface Gi1/0/1
---
Port enable administrative configuration setting: Enabled / in aggressive mode
Port enable operational state: Enabled / in aggressive mode
Current bidirectional state: Bidirectional
Current operational state: Advertisement - Single neighbor detected
Message interval: 15000 ms
Time out interval: 5000 ms
Port fast-hello configuration setting: Disabled
Port fast-hello interval: 0 ms
Port fast-hello operational state: Disabled
Neighbor fast-hello configuration setting: Disabled
Neighbor fast-hello interval: Unknown
Entry 1
---
Expiration time: 31600 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: 346288238580
Port ID: Gi4/0/1
Neighbor echo 1 device: 70B4F35F080
Neighbor echo 1 port: Gi1/0/1
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: MXC.TAC.M.02-3850-01
Switch#show udld neighbors
Port Device Name Device ID Port ID Neighbor State
---- ----------- --------- ------- --------------
Gi1/0/1 346288238580 1 Gi4/0/1 Bidirectional
Total number of bidirectional entries displayed: 1
メッセージ間隔を変更するには、udld message time
コマンドを使用します。
Switch(config)#udld message time 10
UDLD message interval set to 10 seconds
間隔は1 ~ 90秒の範囲で設定できます。デフォルトは15秒です。
関連情報