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