目錄

簡介

必要條件

需求

採用元件

慣例

問題定義

單向連結偵測通訊協定運作原理

UDLD運作模式

可用性

組態和監控

相關資訊

簡介

本文件說明單向連結偵測 (UDLD) 通訊協定在交換網路中，可如何協助防止流量的轉送迴圈和黑洞。

必要條件

需求

本文件沒有特定需求。

採用元件

本文件所述內容不限於特定軟體和硬體版本。

慣例

如需文件慣例的詳細資訊，請參閱思科技術提示慣例。

問題定義

生成樹協定(STP)將冗餘物理拓撲解析為無環樹狀轉發拓撲。

這是透過封鎖一個或多個連線埠來完成。通過阻塞一個或多個埠，轉發拓撲中沒有環路。STP的運行依賴於橋接協定資料單元(BPDU)的接收和傳輸。 如果在具有阻塞埠的交換機上運行的STP進程停止從埠上的上游（指定）交換機接收BPDU，則STP最終會使該埠的STP資訊老化，並將其移至轉發狀態。這會建立轉發環路或STP環路。

封包會沿回圈路徑無限循環，並消耗越來越多的頻寬。這可能會導致網路中斷。

交換機如何在埠處於開啟狀態時停止接收BPDU?原因是單向鏈路。發生此情況時，連結會視為單向的：

- 連線兩端的連線都為up。本地端沒有接收遠端端傳送的資料包，而遠端端接收本地端傳送的資料包。

請考慮以下情況。箭頭指示STP BPDU的流量。

在正常運行期間，網橋B指定在鏈路B-C上。網橋B將BPDU向下傳送到阻塞埠的C。當C看到來自該鏈路上B的BPDU時，該埠被阻塞。

現在，考慮如果鏈路B-C在C方向上發生故障會發生什麼情況。C停止接收來自B的流量，但是B仍然接收來自C的流量。

C停止在鏈路B-C上接收BPDU，並保留使用最後一個BPDU接收的資訊。這最多需要20秒，取決於maxAge STP計時器。一旦埠上的STP資訊過期，該埠將從blocking狀態轉換到listing、learning，並最終轉換到forwarding STP狀態。這會造成轉送回圈，因為三角形A-B-C中沒有阻塞埠。資料包沿路徑循環（B仍接收來自C的資料包），佔用額外的頻寬，直到鏈路完全被填滿。這會導致網路癱瘓。

單向連結可能造成的另一個問題是流量黑洞。

單向連結偵測通訊協定運作原理

為了在建立轉發環路之前檢測單向鏈路，Cisco設計並實現了UDLD協定。

UDLD是第2層(L2)通訊協定，與第1層(L1)機制合作以確定連結的物理狀態。在第1層，自動交涉負責物理訊號傳送和故障檢測。UDLD會執行自動交涉無法執行的任務，例如檢測鄰居的標識和關閉不正確的連線埠。啟用自動交涉和UDLD時，第1層和第2層檢測會協同工作，防止物理和邏輯單向連線以及其他協定的故障。

UDLD 是透過在相鄰裝置之間交換通訊協定封包來運作。若要使UDLD正常運作，連結上的兩台裝置都必須支援UDLD，並在各自的連線埠上啟用它。

針對UDLD設定的每個交換器連線埠都會傳送UDLD通訊協定封包，其中含有連線埠自己的裝置/連線埠ID，以及UDLD在該連線埠上看到的鄰居裝置/連線埠ID。鄰近連線埠應該在從另一端接收的封包中看到自己的裝置/連線埠ID（回應）。

如果連線埠在傳入UDLD封包中的特定持續時間內看不到其自己的裝置/連線埠ID，則連結會視為單向的。

此回應演演算法允許偵測到以下問題：

- 兩端的link is up，但只有一端接收資料包。

- 當接收和傳輸光纖未連線到遠端端的同一埠時，發生佈線錯誤。

UDLD偵測到單向連結後，相應的連線埠就會停用，且主控台上會顯示以下訊息：

UDLD-3-DISABLE:在連線埠1/2上偵測到單向連結。連線埠已停用

UDLD關閉的連線埠會一直停用，直到手動重新啟用該連線埠或errdisable timeout過期為止（如果已設定）。

UDLD運作模式

UDLD可以在兩種模式下運作：正常好鬥。

在normal模式下，如果埠鏈路狀態確定為雙向且UDLD資訊超時，則UDLD不會執行任何操作。UDLD的埠狀態標籤為undetermined。連線埠根據其STP狀態而運作。

在主動模式下，如果確定埠的鏈路狀態為雙向，並且當埠上的鏈路仍處於開啟時，UDLD資訊超時，則UDLD會嘗試重新建立埠的狀態。如果失敗，連線埠就會進入errdisable狀態。

如果執行UDLD的連線埠在保持時間的期間沒有從鄰近連線埠接收UDLD封包，就會發生UDLD資訊的老化。埠的保持時間由遠端埠決定，並取決於遠端端的消息間隔。消息間隔越短，保持時間越短，檢測速度越快。最近的UDLD實現允許配置消息間隔。

由於某些物理問題或雙工不相符導致連線埠上的高錯誤率，UDLD資訊可能會過期。此類封包捨棄並不意味著連結是單向的，且正常模式下的UDLD不會停用此類連結。

必須能夠選擇正確的消息間隔，以確保正確的檢測時間。建立轉送回圈之前，訊息間隔應足夠快以偵測單向連結，但不應使交換器CPU過載。預設消息間隔為15秒，並且速度足夠快，可以在使用預設STP計時器建立轉發環路之前檢測單向鏈路。檢測時間大約等於消息間隔的三倍。

例如：檢測~ message_interval x3

預設消息間隔15秒為45秒。

單向鏈路故障時，STP需要Treconvergence=max_age + 2x forward_delay才能重新收斂。使用預設計時器時，需要20+2x15=50秒。

建議通過選擇適當的消息間隔來保持檢測 < Treconvergence。

在主動模式下，一旦資訊老化，UDLD將嘗試通過每秒8秒傳送資料包來重新建立鏈路狀態。如果仍然無法確定鏈路狀態，則表示鏈路已禁用。

「積極模式」會增加對這些情況的額外檢測：

- 連線埠停滯(在一側連線埠既不傳輸也不接收，但兩端的連結處於開啟狀態)。

- 鏈路一端為up，另一端為down。在光纖連線埠上可能會遇到此問題。當在本地埠上拔下傳輸光纖時，本地端鏈路保持up。但是，它位於遠端。

最近，光纖快速乙太網硬體實施具有遠端故障指示(FEFI)功能，以便在這些情況下在兩端關閉鏈路。在Gigabit乙太網路上，連結交涉提供類似的功能。銅纜埠通常不易受此類問題的影響，因為它們使用乙太網鏈路脈衝來監控鏈路。必須指出的是，在這兩種情況下，由於埠之間沒有連線，因此不會發生轉發環路。但是，如果鏈路在一端為up，另一端為down，則可能會發生流量黑洞。積極的UDLD旨在防止這種情況。

可用性

UDLD可在正常模式下用於：

- 適用於Catalyst 4500/4000、5500/5000和6500/6000系列交換器的Catalyst OS版本5.1.1和更高版本

- 適用於Catalyst 2900XL和3500XL交換器的Cisco IOS®軟體版本12.0(5)XU及更新版本

- 適用於Catalyst 2940交換器的Cisco IOS軟體版本12.1(13)AY及更新版本

- 適用於Catalyst 2950交換器的Cisco IOS軟體版本12.0(5)WC(1)或更新版本

- 適用於Catalyst 2955交換器的Cisco IOS軟體版本12.1(12c)EA1或更新版本

- 適用於Catalyst 2970交換器的Cisco IOS軟體版本12.1(11)AX或更新版本

- 適用於Catalyst 3550交換器的Cisco IOS軟體版本12.1(4)EA1或更新版本

- 適用於Catalyst 3560交換器的Cisco IOS軟體版本12.1(19)EA1或更新版本

- 適用於Catalyst 3750交換器的Cisco IOS軟體版本12.1(11)AX或更新版本

- 適用於執行Cisco IOS系統軟體的Catalyst 6500/6000交換器的Cisco IOS軟體版本12.1(2)E及更新版本

- 適用於執行Cisco IOS的Catalyst 4500/4000交換器的Cisco IOS軟體版本12.1(8a)EW及更新版本

從以下軟體版本開始實施積極模式：

- 適用於Catalyst 4500/4000、5500/5000和6500/6000系列交換器的Catalyst OS版本5.4.3和更高版本

- 適用於執行Cisco IOS系統軟體的Catalyst 6500/6000交換器的Cisco IOS軟體版本12.1(3a)E3和更新版本

- 適用於Catalyst 2950交換器的Cisco IOS軟體版本12.1(6)EA2或更新版本

- 適用於Catalyst 2955交換器的Cisco IOS軟體版本12.1(12c)EA1或更新版本

- 適用於Catalyst 2970交換器的Cisco IOS軟體版本12.1(11)AX或更新版本

- 適用於Catalyst 3550交換器的Cisco IOS軟體版本12.1(4)EA1或更新版本

- 適用於Catalyst 3750交換器的Cisco IOS軟體版本12.1(11)AX或更新版本

組態和監控

這些命令詳細介紹執行CatOS的Catalyst交換器上的UDLD組態。需要使用以下命令首先全域啟用UDLD（預設為停用）：

Vega> (enable) set udld enable

UDLD enabled globally

發出以下命令：確認UDLD是否已啟用

Vega> (enable) show udld

UDLD:  enabled

Message Interval: 15 seconds

還需要使用以下命令在必要連線埠上啟用UDLD:

Vega> (enable) set udld enable 1/2

UDLD enabled on port 1/2

發出show udld port命令，以驗證連線埠上是否已啟用或停用UDLD，以及連結狀態是什麼：

Vega> (enable) show udld port

UDLD              : enabled

Message Interval  : 15 seconds

Port      Admin Status  Aggressive Mode  Link State

--------  ------------  ---------------  ----------------

1/1      enabled       disabled         undetermined

1/2      enabled       disabled         bidirectional

使用set udld aggressive-mode enable <module/port>命令，每個連線埠都啟用積極UDLD:

Vega> (enable) set udld aggressive-mode enable 1/2

Aggressive UDLD enabled on port 1/2.

Vega> (enable) show udld port 1/2

UDLD              : enabled

Message Interval  : 15 seconds

Port      Admin Status  Aggressive Mode  Link State

--------  ------------  ---------------  ----------------

1/2      enabled       enabled         undetermined

發出以下命令以更改消息間隔：

Vega> (enable) set udld interval 10

UDLD message interval set to 10 seconds

間隔範圍可以是7到90秒，預設值為15秒。

如需IOS UDLD設定的詳細資訊，請參閱以下檔案：

- 有關執行Cisco IOS系統軟體的Catalyst 6500/6000交換器，請參閱設定UDLD。

- 若是Catalyst 2900XL/3500XL交換器，請參閱設定交換器連線埠的設定單向連結偵測一節。

- 有關Catalyst 2940交換器，請參閱設定UDLD。

- 有關Catalyst 2950/2955交換器，請參閱設定UDLD。

- 有關Catalyst 2970交換器，請參閱設定UDLD。

- 有關Catalyst 3550交換器，請參閱設定UDLD。

- 有關Catalyst 3560交換器，請參閱設定UDLD。

- 有關執行Cisco IOS的Catalyst 4500/4000，請參閱設定UDLD。

相關資訊

- LAN 交換技術支援

- Catalyst LAN和ATM交換器產品支援

- 技術支援與文件 - Cisco Systems