何三波,羅向征,李羅洪
(邁普通信技術(shù)股份有限公司 成都 610041)
在以太網(wǎng)技術(shù)中,STP(spanning tree protocol,生成樹協(xié)議)是一種經(jīng)典的以太網(wǎng)環(huán)網(wǎng)保護(hù)協(xié)議,隨著以太網(wǎng)的發(fā)展而不斷改進(jìn)和完善,由于需要處理更復(fù)雜的網(wǎng)絡(luò)拓?fù)?,所以STP很復(fù)雜,STP網(wǎng)絡(luò)收斂時間一般是秒級的,并且環(huán)上節(jié)點(diǎn)數(shù)量會影響網(wǎng)絡(luò)拓?fù)涫諗克俣?,?jié)點(diǎn)越多,網(wǎng)絡(luò)收斂速度越慢。因此,STP不能滿足電信級以太網(wǎng)不大于50 ms的網(wǎng)絡(luò)拓?fù)涫諗克俣纫?。目前MSTP(multiple spanning tree protocol,多實例生成樹協(xié)議)是生成樹協(xié)議中應(yīng)用最廣泛和網(wǎng)絡(luò)收斂速度最快的。
為了解決以太環(huán)網(wǎng)網(wǎng)絡(luò)拓?fù)涫諗克俣炔荒軡M足50 ms的問題,EAPS(ethernet automatic protection switching)協(xié)議應(yīng)運(yùn)而生。在RFC 3619中對EAPS協(xié)議技術(shù)規(guī)范進(jìn)行了描述,EAPS協(xié)議需要用戶對環(huán)上設(shè)備定義主節(jié)點(diǎn)、傳輸節(jié)點(diǎn)兩種角色,并在節(jié)點(diǎn)上定義主端口和副端口。這種實現(xiàn)方式不僅存在安全隱患,而且可靠性也不高。例如,如果主節(jié)點(diǎn)的控制面崩潰,可能導(dǎo)致以太環(huán)網(wǎng)上數(shù)據(jù)廣播風(fēng)暴,引起用戶網(wǎng)絡(luò)癱瘓。
思科的私有環(huán)網(wǎng)協(xié)議REP(resilient ethernet protocol)也可以基本滿足50 ms的網(wǎng)絡(luò)拓?fù)涫諗恳?,并且提供了友好的網(wǎng)絡(luò)拓?fù)浣缑嬲故?,REP在思科交換機(jī)產(chǎn)品的技術(shù)白皮書中有詳細(xì)描述,雖然REP比STP簡單,但仍然相對較為復(fù)雜。
EAPS協(xié)議和REP都能滿足50 ms的電信級數(shù)據(jù)切換要求,這些切換速度比較快的以太環(huán)網(wǎng)協(xié)議稱為快速以太環(huán)網(wǎng)協(xié)議,并且具有較高的安全性和可靠性。
本文將在STP和EAPS協(xié)議的基礎(chǔ)之上,提出一種新的快速以太環(huán)網(wǎng)技術(shù),其主要特征是動態(tài)選舉主節(jié)點(diǎn)。
如圖1所示,EAPS環(huán)由一個主節(jié)點(diǎn)交換機(jī)和若干個傳輸節(jié)點(diǎn)交換機(jī)在物理上相連接而成。每個節(jié)點(diǎn)都有兩個端口與EAPS環(huán)相連接,其中的一個為主端口,另一個為副端口。主副端口的角色由用戶配置決定。專門分配一個VLAN給主端口和副端口,EAPS協(xié)議報文通過此VLAN傳輸,稱此VLAN為EAPS的控制VLAN。
如圖1所示,EAPS環(huán)中,交換機(jī)S1為主節(jié)點(diǎn),其他交換機(jī)稱為傳輸節(jié)點(diǎn)。當(dāng)EAPS環(huán)網(wǎng)無故障時,主節(jié)點(diǎn)把副端口的數(shù)據(jù)VLAN阻塞,這樣做的目的是防止環(huán)上出現(xiàn)用戶數(shù)據(jù)環(huán)路,對用戶數(shù)據(jù)進(jìn)行保護(hù);若EAPS環(huán)網(wǎng)發(fā)生故障,則主節(jié)點(diǎn)把副端口的數(shù)據(jù)VLAN打開,讓它可以轉(zhuǎn)發(fā)數(shù)據(jù),這樣做的目的是對用戶數(shù)據(jù)進(jìn)行切換。
傳輸節(jié)點(diǎn)的主端口和副端口在功能上完全對等。
當(dāng)某個傳輸節(jié)點(diǎn)發(fā)現(xiàn)它的一個EAPS端口對應(yīng)線路故障時,將從另一個端口向主節(jié)點(diǎn)發(fā)送環(huán)路故障報文,主節(jié)點(diǎn)收到環(huán)路故障報文后,刷新主端口的轉(zhuǎn)發(fā)表,將副端口的數(shù)據(jù)VLAN設(shè)置為轉(zhuǎn)發(fā)狀態(tài),并向所有傳輸節(jié)點(diǎn)發(fā)送故障刷新報文,傳輸節(jié)點(diǎn)收到故障刷新報文后,將刷新自己的主端口和副端口的轉(zhuǎn)發(fā)表。
為了防止環(huán)路故障報文被丟棄,主節(jié)點(diǎn)還從主端口周期性地發(fā)送Hello報文,此報文在環(huán)路上透傳,最后回到主節(jié)點(diǎn)的副端口。如果主節(jié)點(diǎn)在副端口上連續(xù)多次(默認(rèn)為5次)收不到Hello報文,主節(jié)點(diǎn)將認(rèn)為環(huán)路出現(xiàn)故障。
EAPS環(huán)處于故障狀態(tài)時,主節(jié)點(diǎn)如果重新從副端口接收到自己發(fā)出的Hello報文,則認(rèn)為環(huán)路恢復(fù),重新阻塞副端口的數(shù)據(jù)VLAN,并向所有傳輸節(jié)點(diǎn)發(fā)送恢復(fù)刷新報文。
協(xié)議實現(xiàn)中,當(dāng)某個傳輸節(jié)點(diǎn)先于主節(jié)點(diǎn)識別到鏈路恢復(fù),該傳輸節(jié)點(diǎn)如果立即將相應(yīng)端口的數(shù)據(jù)VLAN打開,將會出現(xiàn)一段時間的數(shù)據(jù)環(huán)路。為避免這種情況,傳輸節(jié)點(diǎn)在發(fā)現(xiàn)鏈路恢復(fù)時,不會立即打開相應(yīng)端口的數(shù)據(jù)VLAN,這種狀態(tài)稱為臨時阻塞狀態(tài),此狀態(tài)一直持續(xù)到收到主節(jié)點(diǎn)發(fā)來的恢復(fù)刷新報文或者臨時阻塞定時器超時。
EAPS協(xié)議中,主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)的角色由用戶靜態(tài)配置,一旦配置確定,主節(jié)點(diǎn)角色一直固定直到用戶配置修改,這種實現(xiàn)方式的主要問題包括:給攻擊者提供了更多攻擊主節(jié)點(diǎn)的機(jī)會;主節(jié)點(diǎn)控制面崩潰而數(shù)據(jù)面通信正常時,極可能導(dǎo)致數(shù)據(jù)環(huán)路廣播風(fēng)暴;同時在實際應(yīng)用過程中,配置也相對麻煩。
針對EAPS協(xié)議存在的上述問題,筆者結(jié)合STP根節(jié)點(diǎn)動態(tài)選舉特點(diǎn),提出對一種EAPS協(xié)議優(yōu)化方案,結(jié)合EAPS和STP兩者的優(yōu)勢,在保留EAPS協(xié)議故障快速恢復(fù)能力的同時,增加了主節(jié)點(diǎn)動態(tài)選舉的能力。新協(xié)議在網(wǎng)絡(luò)安全性、可靠性和配置易用性方面對EAPS協(xié)議有了顯著改進(jìn)。
在本環(huán)網(wǎng)協(xié)議中,環(huán)上節(jié)點(diǎn)角色都定義相同,沒有主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)之分,節(jié)點(diǎn)經(jīng)過環(huán)上的兩個端口分別定義成主端口和副端口。在環(huán)上使用一個VLAN傳輸協(xié)議報文,稱此VLAN為控制VLAN。主端口和副端口需要加入控制VLAN。協(xié)議在運(yùn)行過程中通過簡單計算選舉出唯一主節(jié)點(diǎn),主節(jié)點(diǎn)對環(huán)網(wǎng)上的用戶數(shù)據(jù)進(jìn)行保護(hù)和切換。
協(xié)議報文格式可以借鑒EAPS協(xié)議報文格式,報文由報文頭部字段PKT_Head和數(shù)據(jù)字段data兩部分構(gòu)成,如圖2所示。
報文中頭部字段的各字段簡要說明如下。
目的 MAC地址字段(Dst_mac):通信檢測報文、選舉報文、環(huán)路故障報文和轉(zhuǎn)發(fā)表刷新報文分別使用不同的目的MAC地址。
源MAC地址字段 (Src_mac):使用設(shè)備的二層MAC地址作為協(xié)議報文的源MAC地址。
優(yōu)先級字段(Pri):高1位保留,低3位作優(yōu)先級。協(xié)議報文在線路忙時也不能丟棄,因此優(yōu)先級字段需要設(shè)置成7。
Vlan字段:填寫控制VLAN。
報文長度字段(Frame_len):以太報文長度。
協(xié)議數(shù)據(jù)長度字段(dataLength):報文數(shù)據(jù)長度。
報文類型(Type):Type=1,表示通信檢測報文,數(shù)據(jù)字段在3.2節(jié)中進(jìn)行描述;Type=2,表示選舉報文,數(shù)據(jù)字段在3.3節(jié)中進(jìn)行描述;Type=3,表示環(huán)路故障報文,可以無數(shù)據(jù)字段;Type=4,表示故障刷新報文,可以無數(shù)據(jù)字段;Type=5,表示故障恢復(fù)刷新報文,可以無數(shù)據(jù)字段。
其他字段為特征值,固定不變。
節(jié)點(diǎn)對協(xié)議報文轉(zhuǎn)發(fā)策略的設(shè)置:所有節(jié)點(diǎn)設(shè)置通信檢測報文上控制平面;主節(jié)點(diǎn)設(shè)置選舉報文、環(huán)路故障報文和轉(zhuǎn)發(fā)表刷新報文上控制平面;傳輸節(jié)點(diǎn)設(shè)置選舉報文和環(huán)路故障報文不上控制平面,數(shù)據(jù)平面轉(zhuǎn)發(fā),設(shè)置轉(zhuǎn)發(fā)表刷新報文上控制平面且數(shù)據(jù)面轉(zhuǎn)發(fā)。
在用戶定義節(jié)點(diǎn)的主端口和副端口時,對端口進(jìn)行主節(jié)點(diǎn)配置,并且在主端口和副端口上阻塞數(shù)據(jù)VLAN。
如圖3所示,使用設(shè)備的6 byte二層MAC(簡稱為L2_MAC)地址和16 bit端口ID(簡稱為PID)組合形成通信檢測ID(CID,通信檢測號)。
如圖4所示,通信檢測報文中含有本地CID和對端CID,分別記為L_CID和R_CID。
如圖5所示,交換機(jī)S1和S2是環(huán)上相鄰的兩臺交換機(jī)。當(dāng)S1和S2之間的線路信號正常時,S1和S2對發(fā)檢測報文。在S1未接收到S2的通信檢測報文時,S1向S2發(fā)的通信檢測報文中L_CID為S1的L2_MAC地址和端口P1的PID,R_CID為0。在S2未接收到S1的通信檢測報文時,S2向S1發(fā)的通信檢測報文L_CID為S2的L2_MAC地址和端口P2的PID,R_CID為0。
S1接收到S2的通信檢測報文后,從報文中學(xué)習(xí)到S2的L_CID,后續(xù)發(fā)給S2的通信檢測報文中的R_CID字段就填寫S2的L_CID。S2的處理同S1。
S1接收到S2的通信檢測報文中的R_CID與S1的L_CID相等時,S1認(rèn)為S1和S2之間通信正常。S2接收到S1的通信檢測報文中的R_CID與S2的L_CID相等時,S2認(rèn)為S2和S1之間通信正常。
S1和S2通信正常后,S1和S2仍然對發(fā)通信檢測報文。
若S1在規(guī)定的一段時間內(nèi)沒有接收到S2的通信檢測報文,則S1認(rèn)為S1和S2之間通信出現(xiàn)故障,并且需要將學(xué)習(xí)到的S2的L_CID清0。
如果S1在規(guī)定的一段時間內(nèi)接收到的S2的通信檢測報文中的對端CID與本地的CID不相同,認(rèn)為S1到S2方向的通信出現(xiàn)故障。
當(dāng)然,鄰居之間的通信檢測并不局限于上述方法。
在鄰居之間的線路通信正常后開始選舉主節(jié)點(diǎn),每個節(jié)點(diǎn)都被認(rèn)為是主節(jié)點(diǎn),直到選舉成為傳輸節(jié)點(diǎn)。
節(jié)點(diǎn)之間通信正常后,若節(jié)點(diǎn)的選舉ID為0,則節(jié)點(diǎn)生成一個2 byte的隨機(jī)數(shù)RND,由2 byte的隨機(jī)數(shù)和6 byte L2_MAC地址組合形成 8 byte選舉 ID(EID),選舉報文中包含8 byte EID字段,如圖6所示。
由于任意兩個節(jié)點(diǎn)交換機(jī)的L2_MAC地址不相同,所以,任意兩個節(jié)點(diǎn)交換機(jī)的EID也不相同。
節(jié)點(diǎn)之間對發(fā)選舉報文。
一個節(jié)點(diǎn)從一個端口上收到環(huán)上某個節(jié)點(diǎn)的選舉報文后,比較本地的EIDL和對端的EIDR。
若EIDL 若EIDL>EIDR,則該節(jié)點(diǎn)需要繼續(xù)周期地發(fā)送選舉報文,若此節(jié)點(diǎn)的兩個端口的通信都正常,則阻塞最后通信正常端口上的數(shù)據(jù)VLAN,若有一個端口通信不正常,則阻塞該端口上的數(shù)據(jù)VLAN。 最后,如果環(huán)路完整,某個節(jié)點(diǎn)最后收到自己發(fā)出的選舉報文,則該節(jié)點(diǎn)是選舉出來的主節(jié)點(diǎn),將EID清0,轉(zhuǎn)到預(yù)完整狀態(tài)。再過一段時間若沒有收到環(huán)路故障報文,則由預(yù)完整狀態(tài)轉(zhuǎn)到完整狀態(tài),向環(huán)上發(fā)送環(huán)路恢復(fù)刷新報文,傳輸節(jié)點(diǎn)收到環(huán)路故障刷新報文,需要刷新轉(zhuǎn)發(fā)表,并且把EID清0。 下面結(jié)合圖例進(jìn)行詳細(xì)說明。 如圖7所示,S1和S2之間的選舉,S1和S2之間通信正常以及S2和S3之間通信正常后,S1生成選舉EID1,S2生成 EID2,S3 生成 EID3,假設(shè) EID1>EID3>EID2。 S1收到 S2的選舉報文后,檢測到 EID1>EID2,S1繼續(xù)周期地發(fā)送選舉報文;S2接收到S1的選舉報文,檢測到EID2 如圖8所示,當(dāng)S2作為傳輸節(jié)點(diǎn)后,不再發(fā)送選舉報文,但要透傳其他節(jié)點(diǎn)的選舉報文。這樣,S1會收到S3的選舉報文,S3也會收到S1的選舉報文,EID1>EID3,選舉S3作為傳輸節(jié)點(diǎn)。S1繼續(xù)周期地發(fā)送選舉報文。 按照這樣選舉下去,如果環(huán)完整,則會選舉出一個主節(jié)點(diǎn),環(huán)上EID最大的節(jié)點(diǎn)將成為主節(jié)點(diǎn),其他節(jié)點(diǎn)成為傳輸節(jié)點(diǎn)。 如圖9所示,在環(huán)路完整的情況下,傳輸節(jié)點(diǎn)S2和S3之間線路出現(xiàn)故障,S2和S3檢測到線路故障后,將向主節(jié)點(diǎn)發(fā)送環(huán)路故障報文,向環(huán)上其他節(jié)點(diǎn)發(fā)送故障刷新報文,設(shè)置兩個端口選舉報文、環(huán)路故障報文和轉(zhuǎn)發(fā)表刷新報文上控制平面。S2和S3需要阻塞故障端口上的數(shù)據(jù)VLAN和控制VLAN。S2和S3都被認(rèn)為是主節(jié)點(diǎn),對端口作主節(jié)點(diǎn)配置,S2生成選舉ID為EID2,S2通過正常端口發(fā)送選舉報文;S3生成選舉ID為EID3,S3通過正常端口發(fā)送選舉報文。假設(shè)EID2 主節(jié)點(diǎn)S1收到環(huán)路故障報文后,打開其阻塞端口上的數(shù)據(jù)VLAN,刷新主端口和副端口的FDB(forwarding database,轉(zhuǎn)發(fā)數(shù)據(jù)庫)表,S1作為傳輸節(jié)點(diǎn),對端口進(jìn)行傳輸節(jié)點(diǎn)配置,S1透傳選舉報文和環(huán)路故障報文。 S2和S3將會收到對方的選舉報文,由于EID2 如圖10所示,如果S2和S3之間的線路通信恢復(fù),S2打開端口P1上的控制VLAN,S3打開端口P2的控制VLAN。由于EID2 S3將會收到自己發(fā)出的選舉報文,成為主節(jié)點(diǎn),繼續(xù)阻塞端口P2上的數(shù)據(jù)VLAN。轉(zhuǎn)到預(yù)完整狀態(tài),停止發(fā)送選舉報文,一段時間后轉(zhuǎn)到完整狀態(tài),向環(huán)上發(fā)送恢復(fù)刷新報文,把EID清0。傳輸節(jié)點(diǎn)S2收到恢復(fù)刷新報文后,需要把選舉ID清0。其他傳輸節(jié)點(diǎn)接收到恢復(fù)刷新報文時刷新轉(zhuǎn)發(fā)表,并把EID清0。 在此環(huán)網(wǎng)協(xié)議中,控制面處理協(xié)議報文開銷低,節(jié)點(diǎn)檢測到正常通信后能很快進(jìn)入工作狀態(tài)。在單點(diǎn)故障恢復(fù)后,環(huán)網(wǎng)拓?fù)洳话l(fā)生變化,環(huán)上數(shù)據(jù)并不發(fā)生鏈路切換,所以,單點(diǎn)故障恢復(fù)過程中數(shù)據(jù)報文無分組丟失。環(huán)網(wǎng)狀態(tài)變化導(dǎo)致主節(jié)點(diǎn)變化,協(xié)議安全性高,可靠性高。 通過測試儀發(fā)送單向數(shù)據(jù)報文,網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時將丟報文,通過分組丟失字節(jié)數(shù)計算網(wǎng)絡(luò)拓?fù)涫諗繒r間。使用測試儀發(fā)送雙向數(shù)據(jù)報文測試網(wǎng)絡(luò)拓?fù)涫諗繒r間,其原理和測試結(jié)果與單向數(shù)據(jù)流一致,下文不再贅述。 MSTP實驗網(wǎng)絡(luò)拓?fù)淙鐖D11所示,實驗網(wǎng)絡(luò)拓?fù)溆?臺交換機(jī)S1、S2、S3和S4組成吉比特以太環(huán)網(wǎng)。通過對S1、S2、S3和S4進(jìn)行配置,使環(huán)網(wǎng)在無故障時阻塞S1上的P1端口。當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時,測試數(shù)據(jù)的路徑都要發(fā)生變化。 本文所述協(xié)議的實驗網(wǎng)絡(luò)拓?fù)湟灿?臺交換機(jī)S1、S2、S3和S4組成吉比特以太環(huán)網(wǎng)。在環(huán)網(wǎng)無故障時到S2和S3之間線路斷開的拓?fù)渥兓鐖D12所示,網(wǎng)絡(luò)發(fā)生故障時,測試數(shù)據(jù)的路徑將發(fā)生變化。 而S2和S3之間的單點(diǎn)故障恢復(fù)的網(wǎng)絡(luò)拓?fù)渥兓鐖D13所示,實際上拓?fù)錄]有發(fā)生變化,測試數(shù)據(jù)的路徑不發(fā)生切換。 表1是運(yùn)行MSTP協(xié)議和本文所述協(xié)議在環(huán)網(wǎng)故障時網(wǎng)絡(luò)拓?fù)涫諗繒r間。 表2是運(yùn)行MSTP協(xié)議和本文所述協(xié)議在環(huán)網(wǎng)故障恢復(fù)時網(wǎng)絡(luò)拓?fù)涫諗繒r間。 可以看出,本文所述協(xié)議的網(wǎng)絡(luò)拓?fù)涫諗繒r間都是毫秒級的,特別是單點(diǎn)故障恢復(fù)時拓?fù)涫諗繒r間為0,而MSTP的網(wǎng)絡(luò)拓?fù)涫諗繒r間則在秒級。試驗數(shù)據(jù)表明:本文所述協(xié)議在網(wǎng)絡(luò)故障處理過程中,仍然滿足50 ms的拓?fù)涫諗克俣纫?,遠(yuǎn)優(yōu)于與之對照的MSTP。在改善EAPS協(xié)議可靠性、安全性、配置易用性基礎(chǔ)上,本協(xié)議對故障收斂處理沒有任何不良影響。 表1 環(huán)網(wǎng)故障時拓?fù)涫諗繒r間 表2 環(huán)網(wǎng)故障恢復(fù)時拓?fù)涫諗繒r間 在STP和EAPS協(xié)議基礎(chǔ)之上,本文提出了一種更靈活的動態(tài)選舉主節(jié)點(diǎn)的以太環(huán)網(wǎng)協(xié)議,此環(huán)網(wǎng)協(xié)議安全性更高,可靠性更高,用戶配置更簡單,同時網(wǎng)絡(luò)故障收斂時間也更優(yōu)。 生成樹協(xié)議太復(fù)雜,拓?fù)涫諗克俣嚷荒軡M足50 ms電信級的拓?fù)涫諗恳?,而EAPS協(xié)議等又太簡單,在安全性和可靠性方面存在缺陷。隨著以太網(wǎng)的進(jìn)一步普及,比生成樹協(xié)議簡單而安全性和可靠性又比EAPS高的以太環(huán)網(wǎng)技術(shù)將不斷提出并得到廣泛應(yīng)用。 本文所述動態(tài)選舉主節(jié)點(diǎn)的環(huán)網(wǎng)協(xié)議,對于環(huán)上多點(diǎn)故障的處理還存在缺陷。因此,對本協(xié)議進(jìn)行優(yōu)化和改進(jìn)以適用于多點(diǎn)故障處理是進(jìn)一步的工作。 1 RFC 3619.EAPS:ExtremeNetworks’EthernetAutomatic Protection Switching,2003 2 中國通信標(biāo)準(zhǔn)化協(xié)會.以太網(wǎng)環(huán)路保護(hù)技術(shù)要求,20073.4 單點(diǎn)故障后協(xié)議的處理
3.5 單點(diǎn)故障恢復(fù)處理
3.6 實驗數(shù)據(jù)
4 結(jié)束語