陳 麓,鹿 瑾,徐 曼
(1.中國電信股份有限公司 徐州分公司 網(wǎng)絡(luò)維護中心,江蘇 徐州221000;2.中國礦業(yè)大學(xué) 信息與電氣工程學(xué)院,江蘇 徐州221008)
Linux2.4x內(nèi)核中與生成樹協(xié)議相關(guān)的程序由透明網(wǎng)橋模塊完成,Linux的透明網(wǎng)橋協(xié)議是以Linux內(nèi)核為數(shù)據(jù)交換中心,而在實際工作中,網(wǎng)絡(luò)數(shù)據(jù)的交換與轉(zhuǎn)發(fā)都由交換芯片Marvell 88E6095完成。因此在不改變STA算法的前提下,移植Linux內(nèi)核透明網(wǎng)橋中與STP協(xié)議相關(guān)部分,能實現(xiàn)應(yīng)用于千兆以太網(wǎng)交換機的STP模塊。
生成樹協(xié)議STP(Spanning Tree Protocol)應(yīng)用于環(huán)路網(wǎng)絡(luò),通過一定的算法實現(xiàn)路徑冗余,同時將環(huán)路網(wǎng)絡(luò)修剪成無環(huán)路的樹型網(wǎng)絡(luò),從而避免報文在環(huán)路網(wǎng)絡(luò)中的增生和無限循環(huán)[1]。生成樹協(xié)議的基本原理是通過在交換機之間傳遞一種特殊的協(xié)議報文確定網(wǎng)絡(luò)的拓撲結(jié)構(gòu)。
STP協(xié)議采用的算法稱為生成樹算法STA[2](Spanning Tree Alogorithm),生成樹算法很復(fù)雜,但是其過程可以歸納為選擇根橋、選項根端口、選擇指定端口三個部分。
STP協(xié)議中用于網(wǎng)絡(luò)拓撲管理的數(shù)據(jù)流稱為BPDU(Bridge Protocol Data Unit),網(wǎng)卡芯片則將 BPDU封裝成MGMT幀,MGMT幀與普通數(shù)據(jù)包的最大區(qū)別在于可以自由進出已經(jīng)阻塞的端口,方便網(wǎng)絡(luò)拓撲的管理。
在Linux2.4x內(nèi)核中,驅(qū)動程序并不支持類似于MGMT幀的多播協(xié)議數(shù)據(jù)流,為使MGMT幀自由進出系統(tǒng),需要兩個條件:(1)交換芯片 Marvell 88E6095必須支持IEEE 802.1D協(xié)議,且工作在該模式下;(2)驅(qū)動程序需要開啟對多播數(shù)據(jù)的支持,即開啟MULTICAST關(guān)鍵字。
網(wǎng)絡(luò)數(shù)據(jù)在Linux系統(tǒng)的處理流程如圖1所示,以太網(wǎng)數(shù)據(jù)與MGMT幀混合并自由進出系統(tǒng),Linux網(wǎng)絡(luò)驅(qū)動將分離出以太網(wǎng)幀由系統(tǒng)正常處理,而對于MGMT幀則需要處理DSA_Tag;當(dāng)接收時去掉該標(biāo)記,而在發(fā)送時添加標(biāo)記。
當(dāng)硬件設(shè)置支持STP協(xié)議后,所有網(wǎng)絡(luò)數(shù)據(jù)在網(wǎng)卡接收時會添加DSA_Tag,而在發(fā)送時去掉相應(yīng)的DSA_Tag,如圖 2 所示[3]。
添加DSA_Tag的以太網(wǎng)幀會比正常以太網(wǎng)幀多4個字節(jié),其中 b16~b31為 STA算法所用,其他則應(yīng)用于VLAN模塊,此外CPU發(fā)送與接收的幀所含的DSA_Tag也不一樣,因此網(wǎng)絡(luò)驅(qū)動也要做出相應(yīng)改變,否則由于位數(shù)的偏差正常以太網(wǎng)幀會被當(dāng)成錯包丟棄。
以太網(wǎng)交換機實現(xiàn)STP模塊必須通過STA算法計算出根端口與指定端口,分析網(wǎng)路拓撲結(jié)構(gòu),最終目標(biāo)是要在網(wǎng)絡(luò)中生成一顆無環(huán)狀的樹,以期消除廣播風(fēng)暴以及單播數(shù)據(jù)幀對網(wǎng)絡(luò)的影響[4]。
STP協(xié)議規(guī)定了兩種類型的MGMT幀,一種用于交換配置信息的CONFIG_BPDU幀,另一種則是通知網(wǎng)絡(luò)拓撲變化的TCN幀。
如圖3所示,在接收端,Linux內(nèi)核接收 MGMT幀會依次執(zhí)行以下任務(wù):更新CONFIG_BPDU幀、執(zhí)行STA收斂算法、設(shè)置寄存器;而在發(fā)送端MGMT幀由定時器定時發(fā)送,實時監(jiān)控網(wǎng)絡(luò)拓撲結(jié)構(gòu)。
Linux內(nèi)核中,每個交換機對應(yīng)一個與網(wǎng)橋有關(guān)的數(shù)據(jù)結(jié)構(gòu)Struct Net_Bridge,包含該交換機全部的端口信息與狀態(tài),并通過BPDU包實時更新。而每個交換機端口對應(yīng)一個 Struct Bridge_Port,由 port_list串成鏈表,存放于Struct Net_Bridge中,如圖4所示。
其中Net_Bridge包含與標(biāo)準(zhǔn)STP有關(guān)的參數(shù),如定時 器 參 數(shù) Hello Time、Max Age、Forwarding Delay 等 ,Bridge_Port則只包含交換機端口信息。
STP模塊是千兆以太網(wǎng)交換機系統(tǒng)開發(fā)中必不可少的一部分,與VLAN共同組成了交換機的網(wǎng)絡(luò)模塊。
交換機系統(tǒng)架構(gòu)如圖5所示,系統(tǒng)整體上分為應(yīng)用層、內(nèi)核層、硬件層。在實際設(shè)計中,STP模塊被編譯成驅(qū)動插進系統(tǒng)Linux內(nèi)核中。模塊化的管理將更為有效地提高系統(tǒng)穩(wěn)定性,方面系統(tǒng)的維護與版本的更新。
通過對Linux2.4x內(nèi)核中透明網(wǎng)橋代碼分析,利用Marvell 88E6095交換芯片,實現(xiàn)了千兆以太網(wǎng)交換機STP模塊的開發(fā),并提出了嵌入式Linux下STP模塊開發(fā)的設(shè)計方法與設(shè)計思路。由于篇幅所限,文章無法細致分析STA算法,且設(shè)計時遇到的具體困難也無法詳盡說明??偠灾琒TP模塊開發(fā)是以太網(wǎng)交換機軟件系統(tǒng)開發(fā)中必不可少的環(huán)節(jié),將極大增加交換機的可靠性與穩(wěn)定性。且由于Linux系統(tǒng)的免費開源等優(yōu)點,基于Linux的STP模塊的開發(fā)在嵌入式領(lǐng)域有廣闊的前景。
[1]李雪梅,孫旭.以太網(wǎng)交換機中 STP算法的優(yōu)化設(shè)計.微電子學(xué)與計算機,2006,23(5):53-55.
[2]張勁松,徐志根.快速生成樹協(xié)議端口角色選擇算法的研究[J].西南民族大學(xué)學(xué)報(自然科學(xué)版),2005,31(02):289-293.
[3]Link Street 88E6092/88E6095/88E6095F Datasheet.2006.9.
[4]李延冰,馬躍,王煒,等.基于生成樹的鏈路層拓撲發(fā)現(xiàn)算法[J].計算機工程,2006(18):38-41.