邱海嘯

摘要:交換機的環回檢測功能主要用來檢測交換機的用戶端口是否發生了環路,及時上報環路告警,并通過關閉產生環路的端口來防止產生MAC地址漂移,導致其他用戶業務受到影響。特別是在QINQ業務時,造成業務不通。本文主要介紹了一種新的環回檢測方法,簡稱CTC環回檢測法,這種新的環回檢測法與傳統的環回檢測法相比,更加簡單,易于實現,且降低了維護成本,并且能夠兼容不同類型的交換機,具備極大的推廣性。
關鍵詞:環回;地址漂移;CTC環回檢測法
一、問題的提出
環回即交換機下接的網絡形成環的拓撲結構,環路會造成內網廣播風暴,會消耗交換機設備大量的CPU處理時間或者線路帶寬,嚴重時甚至可以造成設備死機,網絡癱瘓。
為避免網絡中出現環路,造成對業務的影響,需要設備具備環回檢測的功能。一般的環回檢測方法采用的是BPDU報文格式,而這類報文屬于一種比較特殊的報文,其目的mac一般為01-80-C2-00-00-00,我們簡單的將其稱為傳統模式的環回檢測法。但有些設備,特別是一些簡單的家庭網關終端設備無法識別該種報文,直接將該種類型的報文丟棄,造成環回檢測失敗。另外,一些設備在發環路檢測報文的時候,并沒有按照vlan來檢測,這樣同樣會造成環路檢測的失敗,因此一種新的環回檢測法應運而生,簡稱ctc模式環回檢測法。該方法簡單實用,幾乎在所有類型的交換機上都可以推廣,有一定的借鑒意義。
二、解決方法
為了提供一種能夠檢測網絡中各種環路的方法,本文的CTC模式環回檢測法在原來傳統模式環回檢測法的基礎上做了如下幾點改動:
(1)環回檢測報文的目的mac由原來的BPDU格式改為了現在的廣播mac,在沒有其他規則的影響下,所有的交換機都可以轉發廣播報文,可以防止環回檢測報文被交換機下掛的家庭網關設備丟棄;
(2)環回檢測報文的以太網類型(ethernet type)由原來的0x8901改為可配置的任意類型,這樣可以有效防止某些以太網類型的報文被cpu截取以作他用;
(3)CTC模式環回檢測法,發送的環回檢測報文既可以是untag類型(不帶vlan標簽),也可以是tag類型(帶vlan標簽),而原來傳統模式下只支持untag類型的報文發送,因此CTC模式環回檢測法可以更好地檢測線路中的環路情況。
如果環回檢測功能開啟,交換機的CPU會定時向每個已經配置環回檢測功能的端口發送環回檢測報文,該環回檢測報文的目的mac為全F的廣播報文,源mac為交換機的系統mac,以太網類型可以配置為任意協議類型,一些標準里已經使用的協議類型除外。
環回檢測示意圖如上圖所示,交換芯片收到環回檢測報文以后,判斷該報文的以太網類型是否和配置的以太網類型一致,如果是,送給CPU的環回檢測模塊處理;接著分析報文中的源mac是否為本設備的系統mac,如果是,則認為本設備中發生了環路,否則丟棄;再判斷環回檢測報文中的源單板的槽位號和源端口號和收到環路檢測幀的單板的槽位和端口號是否一致,如果一致,則說明該端口發生了自環。當檢測到環路以后,會向網管服務器發送Trap告警報文,Trap報文中帶有該端口的全局端口號,然后根據用戶是否啟用了端口的環回檢測功能來決定是否關閉該端口。
由于環回檢測模塊會不斷地循環向各個端口發生環回檢測報文,如果發送報文的頻率過快,可能會導致底層硬件無法處理,所以發送完一個環回檢測報文以后,適當延時,這個延時的時間通過實際測試的結果來得到,目前暫定為2s。由于環路檢測的優先級較低,且每次最多只對24個用戶口中配置環路檢測的端口進行檢測,所以開啟環路檢測功能對系統處理性能的影響比較小。
每個端口記錄環路關閉/解閉/開啟狀態s,檢測到解閉次數n,本次解閉的剩余時間t。當端口收到檢測到環回報文以后,關閉該端口,將關閉/開啟狀態設置為:關閉狀態;本次解閉的剩余時間設置為一個固定時延+檢測到的解閉次數*一個固定的時延(即t=T+n*T,T可配置):
啟用一個解閉定時器(timerT,1分鐘間隔):
(1)如果該端口時開啟狀態,則繼續下一個端口;
(2)如果用戶關閉端口,則繼續下一個端口;
(3)否則,如果解閉的剩余時間t!=0,則t=t- timerT;
(4)否則,如果是解閉狀態,將s=開啟;t=0;n=0;
(5)否則,將s=解閉中;t=T+n*T;n=n+1。
三、實踐情況
測試步驟:
(1)設置環回檢測模式為ctc:
(config)#loop-check mode ctc
(2)設置環回檢測周期為2s:
(config)#loop-check interval 2?//2s為環回檢測模塊發送環回檢測報文的周期
(3)設置發送環回檢測報文的以太網類型:
(config)#loop-check eth-type 8903
(4)設置發送環回檢測恢復時間間隔為5分鐘:
(config)#loop-check recover-time 5
(5)端口配置vlan,并配置端口環回檢測功能使能
(config)#interface range fei_0/1/1-8
(config-if)#switchport vlan 100 t?//8個用戶口同時配置vlan100
(config-if)#loop-check enable?//8個用戶口配置環回檢測使能
如果此時fei_0/1/1與fei_0/1/2?口用網線連起來,我們可以觀察到端口狀態會在2s以后從up就變成了down。即cpu的環回檢測模塊每2s會依次往這8個用戶端口發送環回檢測報文,由于fei_0/1/1和fei_0/1/2用網線連起來了,則環回檢測模塊從fei_0/1/1出來的環回檢測包,又從fei_0/1/2收了回來,導致cpu的環回檢測模塊又重新收到了0x8903,且源mac為設備帶內mac,目的mac為全F,vlan為100的環回檢測報文,因此cpu的環回檢測模塊會將這個報文的源端口,即fei_0/1/1端口強制關閉。如果人為操作該端口使其up,則直接調用交換芯片接口使其up,但是up以后,會再次檢測到端口環回,環回檢測模塊又會將其端口關閉。如果人為不操作端口,則經過recover-time時間(解閉時間)以后,端口會再次up,但如果這時候網線依然是連接狀態,則cpu的環回檢測模塊又會再次檢測到端口環回,又會將端口關閉掉,這樣,下次端口再次恢復up的時間將不再是recover-time 5分鐘了,而是大于5分鐘,因為這個時候會加上一個懲罰因子n,即上一節的步驟5中描述的場景,如果下次再檢查到環回,則環回檢測的解閉時間又大于上一次的解閉時間,因為懲罰因子從n又變成了n+1了。
四、總結
CTC模式環回檢測法對比一般的傳統環路檢測法,可以兼容不同的終端設備,并且能夠檢測到多種網絡拓撲下的環路,因此ctc模式環路檢測法很好的拓展了環回檢測的使用范圍,且實現方法簡單易于操作,在有同類需求的設備上有一定的借鑒意義。
(作者單位:中興通訊南京研發中心)