簡介
本檔案將說明單向連結偵測(UDLD)通訊協定如何協助防止交換網路中的回圈和流量異常。
必要條件
需求
本文件沒有特定需求。
採用元件
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
慣例
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
問題定義
生成樹協定(STP)將冗餘物理拓撲解析為無環樹狀轉發拓撲。
為此,它會阻塞一個或多個埠。阻塞一個或多個埠後,轉發拓撲中沒有環路。STP的運行依賴於橋接協定資料單元(BPDU)的接收和傳輸。如果埠處於阻塞狀態的交換機上運行的STP進程沒有從其上游(指定)交換機接收BPDU,則STP最終會將該埠的STP資訊過期並將其移至轉發狀態。
這可能會產生STP回圈,封包將沿著回圈路徑無限循環並佔用越來越多的頻寬和資源。這可能會導致網路中斷。
交換機如何在埠處於開啟狀態時不接收BPDU?原因是單向鏈路。
發生此情況時,連結會視為單向的:
請考慮以下情況。箭頭指示STP BPDU的流量。
在正常運行期間,網橋B是鏈路B-C上的指定埠。網橋B將BPDU向下傳送到C,這是阻塞埠。當C看到來自該鏈路上B的BPDU時,該埠被阻塞。
現在,請考慮如果鏈路B-C在C方向上發生故障,將會發生什麼情況。C不再接收來自B的流量,但是B仍然接收來自C的流量。
up
C不會在鏈路B-C上接收BPDU,但會保留使用最後一個BPDU接收的資訊。這最多需要20秒,具體取決於maxAge STP計時器。一旦埠上的STP資訊過期,該埠就會從阻塞狀態轉換到偵聽、學習,並最終轉換到轉發STP狀態。這會產生回圈,因為三角形A-B-C中沒有阻塞埠。資料包沿該路徑循環(B仍接收來自C的資料包),這將消耗額外的頻寬,直到鏈路完全被填滿。
這種情況可能會使網路停機。單向鏈路可能造成的另一個問題是流量黑洞。
單向連結偵測通訊協定運作原理
UDLD是第2層(L2)通訊協定,與第1層(L1)機制合作以確定連結的物理狀態。在第1層,自動交涉負責物理訊號傳送和故障檢測。UDLD會執行自動交涉無法執行的任務,例如檢測鄰居的身份和關閉連線埠不當的情況。啟用自動交涉和UDLD時,第1層和第2層檢測會協同工作,防止物理和邏輯單向連線以及其他協定的故障。
UDLD是透過在相鄰裝置之間交換通訊協定封包來運作。若要使UDLD正常運作,連結上的兩台裝置都必須支援UDLD,並在各自的連線埠上啟用它。
針對UDLD設定的每個交換器連線埠都會傳送UDLD通訊協定封包,其中包含UDLD在該連線埠上看到的連線埠裝置/連線埠ID以及鄰近裝置/連線埠ID。鄰近連線埠會在從另一端接收的封包中看到自己的裝置/連線埠ID(回應)。如果連線埠在傳入UDLD封包中的特定持續時間內看不到其自己的裝置/連線埠ID,則連結會視為單向的。
此回應演演算法允許偵測到以下問題:
UDLD偵測到單向連結後,相應的連線埠就會停用,且主控台上會顯示以下訊息:
UDLD-3-DISABLE: Unidirectional link detected on port 1/2. Port disabled
UDLD關閉的埠將一直處於禁用狀態,直到手動啟用該埠或直到錯誤停用超時過期(如果已配置)。
UDLD運作模式
UDLD可以在兩種模式下運作:正常模式和主動模式。
- 在正常模式下,如果埠鏈路狀態確定為雙向且UDLD資訊超時,則UDLD不會執行任何操作。UDLD的埠狀態標籤為未確定。連線埠的行為與其STP狀態相符。
- 在主動模式下,如果確定埠的鏈路狀態為雙向,並且當埠上的鏈路仍處於開啟狀態時,UDLD資訊超時,則UDLD會嘗試重新建立埠狀態。如果失敗,連線埠就會進入錯誤停用狀態。
如果執行UDLD的連線埠在保留時間持續時間內沒有收到來自相鄰連線埠的UDLD封包,就會發生UDLD資訊過期的情況。連線埠的保持時間由遠端連線埠決定,並取決於遠端上的訊息間隔。消息間隔越短,保持時間越短,檢測速度越快。最近的UDLD實現允許配置消息間隔。由於某些物理問題或雙工不相符導致連線埠上的高錯誤率,UDLD資訊可能會過期。此類封包捨棄並不意味著連結是單向的,且正常模式下的UDLD不會停用此類連結。
必須能夠選擇正確的消息間隔,以確保正確的檢測時間。消息間隔必須足夠快,才能在建立前向環路之前檢測單向鏈路,但是它不能使交換機CPU過載。預設消息間隔為15秒,並且速度足夠快,可以在使用預設STP計時器建立前向環路之前檢測單向鏈路。檢測時間大約等於消息間隔的三倍。
例如: Tdetection~ message_interval x3
預設消息間隔15秒為45秒。
單向鏈路故障時,STP需要Treconvergence=max_age + 2x forward_delay才能重新收斂。使用預設計時器時,需要20+2x15=50秒。
建議保留Tdetection< Treconvergence並選擇適當的消息間隔。
在主動模式下,一旦資訊老化,UDLD將嘗試重新建立鏈路狀態,並每秒8秒傳送一次資料包。如果仍然無法確定鏈路狀態,則表示鏈路已禁用。
Aspirsivemode會增加這些情況的額外檢測:
最近,光纖快速乙太網硬體實施具有遠端故障指示(FEFI)功能,以便在這些情況下使兩端鏈路斷開。在GigabitEthernet上,連結交涉提供類似的功能。銅纜埠通常不易受此類問題的影響,因為它們使用乙太網鏈路脈衝來監控鏈路。必須注意的是,在這兩種情況下,由於連線埠之間沒有連線,所以不會發生正向回圈。但是,如果鏈路在一端處於開啟狀態而在另一端處於關閉狀態,則可能會發生流量黑洞。積極的UDLD旨在防止這種情況。
可用性
UDLD在Cisco IOS®軟體版本12及更高版本的正常和主動模式下可用。
組態和監控
運行命令show udld以驗證介面上是否已啟用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#
發出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秒。
相關資訊