概要
このドキュメントでは、単方向リンク検出(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はBPDUをCに送信しますが、Cはブロッキングポートです。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を含むUDLDプロトコルパケットを送信します。隣接ポートは、相手側から受信したパケットで自身のデバイス/ポート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)機能が実装されています。GigabitEthernetでは、同様の機能がリンクネゴシエーションによって提供されます。銅線ポートでは、イーサネット リンクのパルスを使用してリンクが監視されているので、このタイプの問題は通常発生しません。どちらの場合も、ポート間に接続がないため、フォワードループは発生しないことに注意してください。ただし、リンクが一方の側でアップ状態になり、もう一方のトラフィックでダウン状態になると、ブラックホールが発生する可能性があります。アグレッシブ 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
コマンドにより、WLC CLI で明確に示されます。
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#
show udld
と show udld neighbors
UDLDがポートで有効か無効か、およびリンクとネイバーの状態を確認するコマンド:
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秒です。
関連情報