王輝
(中國電子科技集團公司 第三十四研究所,廣西 桂林541004)
一種基于FPGA的地址學習功能的設(shè)計
王輝
(中國電子科技集團公司 第三十四研究所,廣西 桂林541004)
當前的綜合傳輸設(shè)備中,大多都提供了高速的以太網(wǎng)業(yè)務(wù)接口,能夠直接實現(xiàn)以太網(wǎng)業(yè)務(wù)的傳輸。但是,這些傳輸設(shè)備無法實現(xiàn)以太網(wǎng)數(shù)據(jù)包的地址學習功能,給傳輸設(shè)備和交換設(shè)備的組網(wǎng)帶來了一定的影響。文章中提出了一種基于FPG A的地址學習功能的設(shè)計,以解決對數(shù)據(jù)包的源m ac地址進行學習和管理。給出了電路原理,詳細介紹了硬件接口模塊和地址學習模塊中的各模塊功能,并進行了應用驗證。
FPG A;M A C地址;老化
當前,傳輸設(shè)備的地址學習功能大多出現(xiàn)在交換設(shè)備上。交換設(shè)備能夠自動學習到達設(shè)備端口的以太網(wǎng)數(shù)據(jù)包的源MAC地址,有利于對數(shù)據(jù)包的快速轉(zhuǎn)發(fā)[1,2]。傳輸設(shè)備一般只提供物理接口,只對數(shù)據(jù)進行透明傳輸,不提供源MAC地址的學習功能。當傳輸設(shè)備和交換設(shè)備組網(wǎng)時,需要傳輸設(shè)備實時學習和記錄接入到傳輸設(shè)備的終端設(shè)備(如PC)的MAC地址,并能夠適時發(fā)送免費的ARP學習包,使得交換設(shè)備能夠及時更新其與傳輸設(shè)備相連的端口上的MAC地址表。為了實現(xiàn)上述功能,本文在傳統(tǒng)傳輸設(shè)備的基礎(chǔ)上,采用FPGA[3]的方式,實現(xiàn)了傳輸設(shè)備對接入終端設(shè)備的源MAC地址的學習和管理功能[4]。
設(shè)計時,我們在傳輸設(shè)備以太網(wǎng)板的物理層芯片和映射芯片之間增加了一塊FPGA芯片,用來處理收到的數(shù)據(jù)包,對數(shù)據(jù)包中的MAC地址進行學習和管理。電路原理如圖1所示。FPGA芯片提供了1個CPU接口和2個GMII接口。CPU接口用于連接CPU芯片,2個GMII接口分別用于連接以太網(wǎng)物理層芯片和以太網(wǎng)映射芯片。
圖1 電路原理示意圖
一方面,F(xiàn)PGA截獲從端口1收到的所有的數(shù)據(jù)包,并獲取數(shù)據(jù)包的源MAC地址,建立端口1的MAC表項(包含MAC地址、IP地址);另一方面,F(xiàn)PGA還能夠接收CPU的指令,適時的從端口2發(fā)出以端口1的MAC表項構(gòu)成的免費的ARP包以利于其他設(shè)備快速更新其MAC表項。
2.1CPU接口模塊
FPGA提供的CPU接口外部采用地址/數(shù)據(jù)并行總線接口形式,內(nèi)部設(shè)置了一系列的寄存器。CPU芯片可以通過CPU接口對FPGA提供的內(nèi)部寄存器進行讀寫,實現(xiàn)CPU對FPGA的功能模塊的控制管理。CPU芯片對FPGA的主要控制功能有:MAC地址學習功能的開啟和關(guān)閉;MAC地址老化時間的設(shè)置;MAC地址學習包代理轉(zhuǎn)發(fā)功能(傳輸設(shè)備代替接入端口1的終端設(shè)備向端口2轉(zhuǎn)發(fā)免費的ARP學習包)的開啟和關(guān)閉;免費的ARP包的發(fā)包頻率的設(shè)置。
2.2GMII接口功能
FPGA的端口1和端口2都是GMII接口,只支持1000Mb/s的速率。FPGA將端口1的GMII信號和端口2的GMII信號通過FIFO轉(zhuǎn)換時鐘域,實現(xiàn)物理層和以太網(wǎng)映射芯片之間業(yè)務(wù)的透傳功能。
3.1以太網(wǎng)數(shù)據(jù)包地址學習功能
以太網(wǎng)數(shù)據(jù)包地址學習功能是指FPGA學習從端口1進來IPv4包(非WLAN)的源MAC地址和源IP地址,然后將MAC地址和IP地址送入以太網(wǎng)地址管理器進行比較和保存。
以太網(wǎng)數(shù)據(jù)包地址學習功能的FPGA邏輯流程圖如圖2所示。當端口有數(shù)據(jù)包到達時,F(xiàn)PGA對數(shù)據(jù)包的字節(jié)進行計數(shù)。首先,存下數(shù)據(jù)包的源MAC地址 (第15到第20字節(jié))。然后,存下以太網(wǎng)包類型(第21和22字節(jié))并判斷是否為IP包。如果是IP包,則存下IP包的源IP地址(第35到第38字節(jié));如果不是IP包,則結(jié)束本次存入過程,等待下一個數(shù)據(jù)包。最后把源MAC和IP地址送入地址管理器進行比較和保存。
圖2 以太網(wǎng)數(shù)據(jù)包地址學習邏輯流程圖
3.2以太網(wǎng)地址管理功能
圖3為地址管理器示意圖。FPGA提供了以太網(wǎng)地址管理功能,包括一個128個地址的雙端口RAM、一個內(nèi)容地址查找表(Contend Address Memory,CAM)、一個RAM和CAM寫入模塊、一個RAM存入接口模塊、一個RAM讀取接口模塊和一個RAM地址狀態(tài)管理模塊。
圖3 地址管理器示意圖
各個模塊的功能如下:
⑴一個128個地址的雙端口RAM。用來存儲學習到的源MAC地址表項。
⑵一個CAM。用于比較以太網(wǎng)包的源地址表項是否已經(jīng)存在于CAM內(nèi)。
⑶RAM、CAM寫入模塊。用于將RAM存入接口保存的以太網(wǎng)地址寫入RAM和CAM。
⑷RAM存入接口模塊。邏輯流程圖如圖4所示。首先,地址學習模塊獲取數(shù)據(jù)包的源地址并將這些地址送入RAM存入接口模塊;然后,RAM存入接口模塊緩存這些以太網(wǎng)地址,同時將該地址送入CAM中;最后,CAM查找CAM內(nèi)部是否有相同的MAC地址。如果CAM內(nèi)部已經(jīng)存在相同的MAC地址,則終止本次存入,并產(chǎn)生MAC地址更新信號通知RAM地址狀態(tài)管理模塊更新此MAC地址表項。如果CAM內(nèi)沒有此MAC地址,RAM存入接口模塊查詢RAM地址狀態(tài)管理模塊是否有未使用的RAM地址。如果沒有空閑RAM地址,地址管理器將丟棄該以太網(wǎng)地址;如果有空閑RAM地址,則RAM、CAM寫入模塊將該MAC地址表項寫入RAM內(nèi)空閑地址中數(shù)值最小的地址內(nèi),并告訴RAM地址管理模塊該RAM地址被使用,結(jié)束本次存入。
⑸RAM讀取接口模塊邏輯流程圖如圖5所示。RAM讀取接口模塊內(nèi)部設(shè)計了一個狀態(tài)機,可以將RAM中的存儲的MAC表項按照RAM地址從小到大的順序依次讀取出來。狀態(tài)機持續(xù)地檢查RAM地址狀態(tài)管理模塊給出的RAM地址使用狀態(tài),從RAM中已經(jīng)使用的地址中最小的地址開始預讀取一個MAC表項。當代理轉(zhuǎn)發(fā)模塊請求MAC表項時,RAM讀取接口模塊直接將預讀取的MAC表項發(fā)送給代理轉(zhuǎn)發(fā)模塊,接著馬上去讀取RAM中下一個的MAC地址表項,直至不再收到代理轉(zhuǎn)發(fā)模塊的請求。
圖4 RAM存入接口模塊邏輯流程圖
⑹RAM地址狀態(tài)管理模塊,由128個RAM地址老化管理模塊組成,用于管理128個RAM地址的使用及老化狀態(tài)。邏輯流程圖如圖6所示。系統(tǒng)剛上電時RAM地址的使用狀態(tài)默認設(shè)置為未使用 (數(shù)值為‘0’),老化計數(shù)器清零。當RAM的地址狀態(tài)為“0”時,老化計數(shù)器為零且處于不計時狀態(tài);當RAM的地址狀態(tài)為“1”時,老化計數(shù)器處于計時狀態(tài)(時間遞增)。有2種情況會使對應的RAM地址的老化計數(shù)器清零,并開始計時。第一種情況,有新的MAC表項被寫入到RAM中;第二種情況,RAM中原本存在的MAC表項進行了更新。當老化計數(shù)器遞增到設(shè)定的值(默老化時間300s)時,地址保護模塊會從源端口發(fā)出一個以該MAC表項為目的地址的ARP請求包,詢問該MAC地址所在的主機是否存在。如果不存在,則通知RAM地址狀態(tài)管理器將該RAM地址設(shè)置為未使用(即,清除此MAC表項),并清零老化計數(shù)器;如果存在,則將該地址老化計數(shù)器重新開始計時。
圖5 RAM讀取接口模塊邏輯流程圖
圖6 RAM地址使用及老化狀態(tài)管理模塊邏輯流程圖
3.3MAC地址學習包代理轉(zhuǎn)發(fā)功能說明
MAC地址學習包代理轉(zhuǎn)發(fā)功能開啟后,SDH設(shè)備主動模擬接入SDH設(shè)備的主機發(fā)送免費的arp包,從而更新后端網(wǎng)絡(luò)設(shè)備的MAC表項。此功能使得傳輸設(shè)備與其它設(shè)備MAC表項的更新狀態(tài)保持一致,提高了整個網(wǎng)絡(luò)的穩(wěn)定性。
實際應用中網(wǎng)絡(luò)如圖7所示,網(wǎng)絡(luò)由前端交換網(wǎng)絡(luò)、后端交換網(wǎng)絡(luò)和SDH傳輸網(wǎng)絡(luò)組成。前后端的交換網(wǎng)絡(luò)通過SDH傳輸網(wǎng)絡(luò)實現(xiàn)前后端的數(shù)據(jù)交換。SDH網(wǎng)絡(luò)可以根據(jù)與交換網(wǎng)絡(luò)的鏈路情況選擇一條傳輸路徑連接交換網(wǎng)絡(luò)。傳輸網(wǎng)絡(luò)中SDHA-SDHD為SDH傳輸設(shè)備,后端交換網(wǎng)絡(luò)SW1和SW2為三層交換機。正常情況下前后端交換網(wǎng)絡(luò)通過路徑①③進行數(shù)據(jù)交換。當鏈路③故障時,傳輸路徑自動切換為①④。后端網(wǎng)絡(luò)SW1和SW2互為主備熱備方式。PC2為雙網(wǎng)卡終端,能夠?qū)崿F(xiàn)主備網(wǎng)卡的切換。此網(wǎng)絡(luò)拓撲設(shè)計為能夠?qū)崿F(xiàn)網(wǎng)絡(luò)故障的快速保護。
圖7 實際應用網(wǎng)絡(luò)圖
正常通信時,PC1能夠收到PC2的單向數(shù)據(jù)包(此時PC1無任何數(shù)據(jù)包發(fā)出)。但是當鏈路③故障時,PC1長達幾分鐘的時間收不到PC2發(fā)送的數(shù)據(jù)包。此情況不符合此冗余網(wǎng)絡(luò)能夠快速保護業(yè)務(wù)的初衷。排查原因發(fā)現(xiàn):鏈路③故障時,SW2沒有及時更新PC1的MAC地址導致了此情況的發(fā)生。正常通信時(路徑①③),PC1發(fā)送ARP學習包,則SW2的端口4學習到了PC1的MAC地址。當鏈路③故障時,SDH網(wǎng)絡(luò)切換到路徑①④。由于沒有從PC1到PC2的包,因此SW2的端口2上沒有PC1的MAC地址。當PC2到PC1的單向包被發(fā)送到SW2時,SW2發(fā)現(xiàn)PC1和PC2的MAC地址都在端口4上,因此,數(shù)據(jù)不可能從端口2轉(zhuǎn)發(fā)出去,PC1無法收到PC2的數(shù)據(jù),直到SW2的端口2上學習到PC1的MAC地址,通信才能恢復。主要取決于端口2上學習到PC1的MAC地址。
如果SDH網(wǎng)絡(luò)具有地址學習功能,則當SDH網(wǎng)絡(luò)由路徑①③切換到路徑①④時,SDH設(shè)備同時開啟了MAC保護功能,代替PC1向后端網(wǎng)絡(luò)發(fā)送學習包,此時SW2能夠通過路徑①④迅速學習到PC1的MAC地址,實現(xiàn)交換通道的快速建立,從而實現(xiàn)整個網(wǎng)絡(luò)的快速切換。因此,增加了地址學習功能的SDH設(shè)備能夠很好地和交換網(wǎng)絡(luò)互聯(lián),實現(xiàn)網(wǎng)絡(luò)的快速切換。
以上,我們采用FPGA的方式,實現(xiàn)了傳輸設(shè)備對接入終端設(shè)備的源MAC地址的學習和管理功能。通過實際的網(wǎng)絡(luò)驗證可知,增加了地址學習功能的SDH傳輸網(wǎng)絡(luò)能夠很好地與交換網(wǎng)絡(luò)互相配合,共同實現(xiàn)整個網(wǎng)絡(luò)的功能。因此,此功能行之有效,能夠很好地解決SDH網(wǎng)絡(luò)和交換網(wǎng)絡(luò)互聯(lián)時引入的地址學習的問題。
[1]程明坤,趙翠華,江云霞.淺釋交換機的MAC地址學習的過程及應用[J].數(shù)字技術(shù)與應用,2012(7):218-218
[2]蔣友,羅惠瓊.二層交換機中MAC地址的學習、查找和老化方法[J].軟件導刊,2005(20):40-42.
[3]云創(chuàng)工作室.Verilog HDL程序設(shè)計與實踐[M].北京:人民郵電出版社,2005.
[4]于翔,鄭力明,黃紅斌.基于FPGA的MAC層地址表設(shè)計與仿真[J].計算機工程與設(shè)計,2013(1):121-125.
Address learning function design based on FPGA
WANG Hui
(The 34th Research Institute of CETC,Guilin Guangxi 541004,China)
Current integrated transmission equipments mostly provide high-speed Ethernet interface and realize Ethernet business transmission directly.These transmission equipments,however,could not realize the function of address learning for Ethernet packets,which brings a certain influence to the group network of transmission equipment and switching equipment.In the paper,a design of address learning function based on FPGA is proposed to solve the problem of learning and managing the source MAC address of the data packets. The principle of the circuit is given,the function of each module in the hardware interface module and the address learning module is introduced in detail,and the application verification is carried out.
FPGA,MAC address,aging
TN914.332
A
1002-5561(2016)05-0032-04
10.13921/j.cnki.issn1002-5561.2016.05.010
2016-01-11。
王輝(1981-),男,碩士,工程師,主要從事光通信和網(wǎng)絡(luò)交換方面的工作。