本文件說明單向連結偵測 (UDLD) 通訊協定在交換網路中,可如何協助防止迴圈和流量的異常情況。
本文件沒有特定需求。
本檔案將說明一般的UDLD作業。本檔案中的組態和驗證範例已在執行Cisco IOS XE 17.X版的Cisco Catalyst 9300系列交換器上驗證。
附註:命令語法、預設值、計時器範圍和輸出可能因平台和軟體版本而異。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
生成樹協定(STP)將冗餘物理拓撲解析為無環樹狀轉發拓撲。為此,它會阻塞一個或多個埠。阻塞一個或多個埠後,轉發拓撲中沒有環路。STP的運行依賴於橋接協定資料單元(BPDU)的接收和傳輸。 如果處於STP阻塞或丟棄狀態的埠停止從指定網橋接收BPDU,則STP最終會陳舊與該埠相關的資訊,並將其移至轉發狀態。
這可能會產生STP回圈,封包將沿著回圈路徑無限循環並消耗更多頻寬和資源。這可能會導致網路中斷。
埠開啟時,交換機怎麼可能不接收BPDU?這是因為存在單向鏈路。
在以下情況下,鏈路被視為單向鏈路:
鏈路在連線的兩端均處於開啟狀態。
本地端不接收遠端端傳送的資料包,而遠端端接收本地端傳送的資料包。
考慮下一個場景,箭頭指示STP BPDU的流量:
STP埠狀態拓撲
在此拓撲圖中所示的條件下,交換機B上面向交換機C的介面是B-C網段的指定埠,並向交換機C傳輸BPDU。交換機C上面向交換機B的介面是傳統IEEE 802.1D STP中的非指定埠。或RSTP中的備用埠,在接收和處理來自交換機B的BPDU時,該埠保持阻塞/丟棄狀態。雖然交換機C上的介面處於阻塞或丟棄狀態,但該埠繼續接收和處理BPDU;這些狀態會阻止埠轉發資料幀,但不會阻止埠接收BPDU。
考慮B-C鏈路變為單向且B-C方向發生故障時→會發生什麼情況。交換機C不再從交換機B接收BPDU,而交換機B可以接收交換機C傳送的BPDU。交換機C會保留從最後一個BPDU中獲知的資訊,直到該資訊過期。使用傳統IEEE 802.1D STP和預設的最大老化時間20秒時,這可能需要20秒。一旦STP資訊老化,交換機C便不再認為交換機B在該網段上優於交換機B,並且埠可以從阻塞轉換到偵聽、學習並最終轉發。
這會產生第2層轉發環路,因為A-B-C三角形中不再有阻塞埠。廣播、未知單播和多播幀可能會在環路中重複循環,消耗頻寬和CPU,並可能導致廣播風暴。
此案例可能會使網路停機,這是類似流量黑洞的單向連結造成的另一個可能問題。
STP BPDU流
UDLD是第2層通訊協定,透過識別直接連線裝置之間的單向通訊和特定纜線不一致之處來補充第1層連結偵測機制。
在第1層,自動交涉可解決實體訊號傳送和錯誤偵測。UDLD會執行自動交涉無法執行的任務,例如檢測鄰居身份和關閉連線不當的埠。同時啟用自動交涉和UDLD時;第1層和第2層檢測協同工作,防止物理和邏輯單向連線以及其他協定的故障。
UDLD是透過在相鄰裝置之間交換通訊協定封包來運作。要建立雙向UDLD鄰居關係,兩個直接連線的裝置都必須支援UDLD,並在連線的介面上啟用它。檢驗兩台裝置上的雙向狀態。
針對UDLD設定的每個交換器連線埠都會傳送UDLD通訊協定封包,其中包含UDLD在該連線埠上看到的連線埠裝置/連線埠ID以及鄰近裝置/連線埠ID。
鄰近連線埠會在從另一端接收的封包中看到自己的裝置/連線埠ID(回應)。如果連線埠在傳入UDLD封包中的特定持續時間內看不到其自己的裝置/連線埠ID,則連結會視為單向的。
此回應演演算法允許偵測到以下問題:
鏈路兩端都處於開啟狀態,但只有一端接收資料包。
當接收和傳輸光纖未連線到遠端端上的同一埠時,發生連線(電線)錯誤。
UDLD偵測到單向條件後,會將偵測的本地介面置於err-disable狀態。遠端介面狀態取決於遠端UDLD檢測和物理鏈路行為。控制檯上會顯示類似消息:
UDLD-3-DISABLE: Unidirectional link detected on port 1/2. Port disabled
被UDLD停用的介面會保留在err-disable狀態,直到手動復原或啟用的錯誤停用復原計時器到期為止。在恢復之前糾正光纖、收發器、電纜或遠端介面故障。使用shutdown和no shutdown進行手動恢復。在支援此功能的平台上,udld reset會重設由UDLD停用/關閉的介面。恢復後,運行show interfaces status err-disabled、show udld <interface-id>和show udld neighbors命令,以確認介面運行正常,並且UDLD關係是雙向的。檢視系統日誌以確認故障不再發生。
UDLD可以在兩種模式下運作:正常和積極:
在支援的介面上啟用UDLD時,除非明確設定積極模式,否則正常模式為預設作業模式。UDLD會配合第1層機制(例如自動交涉)來驗證連結。第1層機制檢測物理信令和鏈路故障,而UDLD識別相鄰裝置並檢驗連線到正確埠的光纖束。
在正常模式下,UDLD會在連線埠之間光纖串連線不當,且第1層機制沒有偵測纜線錯誤時偵測單向情況。如果光纖束連線到正確的埠,但流量只向一個方向流動,則UDLD正常模式會將邏輯鏈路標籤為undetermined,並且不會禁用該埠。此行為依賴於第1層機制來檢測物理故障。如果一條光纖鏈路斷開連線且自動協商檢測到物理故障,鏈路不會保持運行。UDLD不執行關閉操作,因為第1層已檢測到問題,並且UDLD邏輯鏈路狀態未確定。
主動模式包括正常模式的檢測功能,並為點對點光纖和雙絞線鏈路提供額外的保護。它檢測連線不正確的光纖束,以及終端無法傳送或接收流量、一個埠保持開啟而另一個埠關閉或一個光纖束斷開的情況。
UDLD hello資料包充當點對點鏈路的心跳。如果在鏈路建立為雙向後UDLD停止接收這些資料包,主動模式將嘗試重新建立雙向關係。如果UDLD無法還原該關係,則會禁用受影響的本地埠,以防止繼續使用雙向操作無法驗證的鏈路。
當兩條光纖線看起來都可用於第1層時,主動式UDLD會驗證它們是否連線到正確的相鄰埠,以及流量是否會在預期相鄰埠之間雙向流動。自動交涉無法執行此鄰居和連線埠身分驗證,因為它在第1層執行。
當執行UDLD的連線埠在保持時間持續時間內未收到來自相鄰連線埠的UDLD封包時,UDLD資訊會過期。這些計時器適用於正常模式和主動模式下的UDLD鄰居資訊維護;到期後的操作取決於配置的模式和檢測到的條件。連線埠的保持時間由遠端連線埠決定,並取決於遠端上的訊息間隔。消息間隔越短,保持時間越短,檢測速度越快。最近的UDLD實現允許配置消息間隔。由於某些物理問題或雙工不相符導致連線埠上的高錯誤率,UDLD資訊可能會過期。此類封包捨棄並不意味著連結是單向的,且正常模式下的UDLD不會停用連結。
選擇正確的消息間隔對於確保適當的檢測時間非常重要。在建立轉發環路之前,消息間隔必須足夠快以檢測單向鏈路,但是它不能使交換機CPU過載。本示例中的預設消息間隔為15秒。在所描述的傳統IEEE 802.1D STP計時器場景中,估計的UDLD資訊過期時間小於阻塞埠達到轉發狀態的估計時間。
這種比較不能保證主動UDLD在STP更改轉發拓撲之前將介面置於err-disable狀態。UDLD鄰居資訊的到期時間大約是消息間隔的三倍。舉例來說:
Texpiration ≈ message_interval × 3
使用預設消息間隔Texpiration ≈ 15 × 3 = 45秒。對於傳統IEEE 802.1D STP操作,阻塞埠將其儲存的STP資訊老化並通過偵聽和學習狀態轉換到轉發狀態的大致時間是:
Tforward = max_age + (2 × forward_delay)
使用預設STP計時器:Tforward = 20 +(2 × 15)= 50秒 — 將UDLD鄰居資訊過期與STP埠轉換進行比較時,請選擇保持以下狀態的消息間隔:文本<Tforward
在主動模式下,UDLD鄰居資訊過期後,UDLD會嘗試通過每秒傳送一條消息(持續八秒)來重新建立雙向關係。如果無法重新建立雙向狀態,UDLD會禁用本地埠。
附註:這些計算是近似的,適用於本文檔中描述的UDLD行為和傳統IEEE 802.1D STP計時器場景。部署的平台、軟體版本、STP模式、配置的計時器和故障發生的時間可能會影響實際計時。
附註:傳統STP計算Treconvergence = max_age +(2 × forward_delay)不適用於普通RSTP快速收斂。如果連續三個呼叫間隔內未收到BPDU,或者達到適用的最大老化時間條件,RSTP協定資訊可能會過期。符合條件的備用埠隨後可以快速轉換到轉發狀態。總轉換時間取決於拓撲、埠角色、鏈路型別、同步過程和故障條件。因此,固定計時器計算無法保證UDLD在RSTP更改轉發拓撲之前檢測或禁用單向鏈路。在部署的平台、軟體版本、拓撲和計時器配置上驗證UDLD和RSTP之間的互動。
主動模式檢測到的其他條件的示例包括:
某些乙太網路PHY實作提供遠端故障訊號傳送或連結交涉機制,可導致一個或兩個連結端點在特定實體發生失敗後轉為關閉。行為因平台、介面型別、收發器、介質和協商模式而異。UDLD會為實體層訊號無法偵測的單向條件提供第2層驗證。當一個端點無法傳輸/接收時,或者當一個端點開啟而另一個端點關閉時,發生故障的鏈路本身不提供完整的轉發路徑,也不形成轉發環路。但是,如果某個介面保持活動狀態,則可能會繼續將流量轉發到不起作用的路徑,從而導致流量黑洞。主動UDLD檢測雙向通訊丟失,如果無法重建UDLD關係,則禁用受影響的本地埠。
在連線的兩個介面上啟用UDLD。在兩個端點上配置相同的UDLD模式,以提供一致的本地故障檢測和錯誤禁用行為:
9300-1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-1(config)#interface TenGigabitEthernet1/1/6
9300-1(config-if)#udld port
9300-1(config-if)#end
9300-2#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-2(config)#interface TenGigabitEthernet1/1/6
9300-2(config-if)#udld port
9300-2(config-if)#end
附註:全域UDLD命令及其介面範圍因平台而異;使用全域性命令之前驗證目標平台命令參考。
在兩個鏈路端點上運行show udld <interface-id>和show udld neighbors命令。確認每個介面都處於操作啟用狀態,當前狀態為雙向,並且顯示預期的鄰居裝置和埠識別符號:
9300-1#show udld TenGigabitEthernet1/1/6
Interface Te1/1/6
---
Port enable administrative configuration setting: Enabled
Port enable operational state: Enabled
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: 37500 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: F87A41A8CA00
Port ID: Te1/1/6
Neighbor echo 1 device: F87A41A8C180
Neighbor echo 1 port: Te1/1/6
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: 9300-2
9300-1#show udld neighbors
Port Device Name Device ID Port ID Neighbor State
---- ----------- --------- ------- --------------
Te1/1/6 F87A41A8CA00 1 Te1/1/6 Bidirectional
Total number of bidirectional entries displayed: 1
9300-2#show udld TenGigabitEthernet1/1/6
Interface Te1/1/6
---
Port enable administrative configuration setting: Enabled
Port enable operational state: Enabled
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: 32500 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: F87A41A8C180
Port ID: Te1/1/6
Neighbor echo 1 device: F87A41A8CA00
Neighbor echo 1 port: Te1/1/6
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: 9300-1
9300-2#show udld neighbors
Port Device Name Device ID Port ID Neighbor State
---- ----------- --------- ------- --------------
Te1/1/6 F87A41A8C180 1 Te1/1/6 Bidirectional
Total number of bidirectional entries displayed: 1
使用udld port aggressive命令,可以在介面上設定積極UDLD:
9300-1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-1(config)#interface TenGigabitEthernet1/1/6
9300-1(config-if)#udld port aggressive
9300-1(config-if)#end
9300-2#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-2(config)#interface TenGigabitEthernet1/1/6
9300-2(config-if)#udld port aggressive
9300-2(config-if)#end
在兩個端點上運行show udld <interface-id>命令,以驗證主動模式是否已操作性啟用:
9300-1#show udld TenGigabitEthernet1/1/6
Interface Te1/1/6
---
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: 31200 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: F87A41A8CA00
Port ID: Te1/1/6
Neighbor echo 1 device: F87A41A8C180
Neighbor echo 1 port: Te1/1/6
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: 9300-2
9300-2#show udld TenGigabitEthernet1/1/6
Interface Te1/1/6
---
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: 38600 ms
Cache Device index: 1
Current neighbor state: Bidirectional
Device ID: F87A41A8C180
Port ID: Te1/1/6
Neighbor echo 1 device: F87A41A8CA00
Neighbor echo 1 port: Te1/1/6
TLV Message interval: 15 sec
No TLV fast-hello interval
TLV Time out interval: 5
TLV CDP Device name: 9300-1
運行udld message time命令以更改消息間隔:
9300-1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-1(config)#udld message time ?
<1-90> Time in seconds between sending of messages in steady state
在Cisco Catalyst 3000和9000系列交換器上,udld訊息時間值範圍從1到90秒,預設值為15秒。請參閱命令參考指南,驗證其他系統上的可接受範圍和預設值。
有關Catalyst 3560交換器,請參閱設定UDLD
| 修訂 | 發佈日期 | 意見 |
|---|---|---|
2.0 |
18-Aug-2026
|
為了便於閱讀,更新了拼寫、語法,將水平線插入各個部分。 |
1.0 |
09-Jul-2007
|
初始版本 |