曾小寶,李曉鋒,宋 銳,肖卓朋
(張家界航空工業(yè)職業(yè)技術(shù)學(xué)院,湖南 張家界 427000)
高速網(wǎng)絡(luò)的出現(xiàn)對(duì)傳統(tǒng)網(wǎng)絡(luò)信息處理技術(shù)是一個(gè)巨大的挑戰(zhàn)?,F(xiàn)有的網(wǎng)絡(luò)信息處理技術(shù)有軟件和硬件兩種方式,采用軟件實(shí)現(xiàn)成本較低,靈活性較高。缺點(diǎn)是軟件方式通常會(huì)受CPU,操作系統(tǒng),計(jì)算機(jī)結(jié)構(gòu)體系,系統(tǒng)資源等的限制,在性能上難以適應(yīng)現(xiàn)有高速網(wǎng)絡(luò)的需求。采用硬件實(shí)現(xiàn)方式具有速度快,穩(wěn)定性等優(yōu)點(diǎn),從相關(guān)文獻(xiàn)得知現(xiàn)有采用硬件實(shí)現(xiàn)方式是采用專用集成電路(ASIC)來實(shí)現(xiàn),其缺點(diǎn)是專用性較強(qiáng),靈活性較差,不能得到廣泛使用。結(jié)合硬件和軟件各自的優(yōu)點(diǎn),斯坦福大學(xué)開發(fā)的網(wǎng)絡(luò)FPGA(NetFPGA)用來處理網(wǎng)絡(luò)信息是較好的選擇[1]。
NetFPGA起源于斯坦福大學(xué)的Nick McKeown教授領(lǐng)導(dǎo)的研究小組開發(fā)設(shè)計(jì)的一個(gè)軟硬件皆可編程的開放平臺(tái)[2]。從2007年開始在國(guó)內(nèi)外掀起了學(xué)習(xí)和研究熱潮,它的出現(xiàn)將硬件的可配置性帶入到網(wǎng)絡(luò)信息處理方面進(jìn)行硬件加速,研究人員很容易在此平臺(tái)上搭建高速網(wǎng)絡(luò)信息處理模型[4]。最新NetFPGA處理速度可達(dá)萬兆,從而進(jìn)行網(wǎng)絡(luò)系統(tǒng)的研究和測(cè)試,突破了傳統(tǒng)網(wǎng)絡(luò)信息純軟件處理速度不高的瓶頸[5]。目前,美國(guó)多數(shù)高校里已經(jīng)開設(shè)了基于NetFPGA平臺(tái)的路由器設(shè)計(jì)和高速網(wǎng)絡(luò)設(shè)計(jì)實(shí)驗(yàn)課程。在國(guó)內(nèi),NetFPGA才剛剛起步,具有很好的發(fā)展前景,現(xiàn)在越來越多的大學(xué)和科研院所開始進(jìn)行研究,臺(tái)灣中原大學(xué)“基于NetFPGA之流量變異偵測(cè)系統(tǒng)”,通過速寫(Sketch)演算法清晰的構(gòu)建了時(shí)變異常檢測(cè)系統(tǒng),達(dá)到線速處理網(wǎng)絡(luò)流量的目標(biāo)[6]。
NetFPGA初期硬件原型主要實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包的解包,負(fù)載的掃描分組等功能,并能很好的支持模塊化的設(shè)計(jì),通過調(diào)用各個(gè)子模塊和用戶自己編寫模塊可以實(shí)現(xiàn)較復(fù)雜的硬件功能設(shè)計(jì)。因此,可將此平臺(tái)應(yīng)用于網(wǎng)絡(luò)攻擊檢測(cè),負(fù)載均衡,流量控制等網(wǎng)絡(luò)硬件加速研究。NetFPGA結(jié)構(gòu)框圖如圖1所示。
具體設(shè)計(jì)如下:從網(wǎng)絡(luò)上采集數(shù)據(jù),數(shù)據(jù)采集模塊采用賽靈思公司開發(fā)的IP核TEMAC來實(shí)現(xiàn),采集到的數(shù)據(jù)訪問分組控制模塊,得到通過與否信號(hào),決定數(shù)據(jù)分發(fā)到相應(yīng)的組別,分組控制模塊包括特征提取,SRAM的讀寫,DDR2SDRAM的讀寫,SRAM用于網(wǎng)絡(luò)特征的緩存,每隔一定時(shí)間以塊的形式通過數(shù)據(jù)通道發(fā)送給上位機(jī)顯示。分組控制模塊接收上位主機(jī)下載的規(guī)則集,按上位主機(jī)封裝規(guī)則進(jìn)行逆向解析,得到IP地址和相應(yīng)的分組控制位,并以此IP地址為DDR2存儲(chǔ)器的寫地址,將分組控制位寫入DDR2的位存儲(chǔ)空間。直接利用提取到的源IP去訪問DDR2,讀取相應(yīng)的分組控制信息,最后分組控制模塊輸出分組控制信息,決定數(shù)據(jù)包分到哪一個(gè)類組,實(shí)現(xiàn)基于IP地址的數(shù)據(jù)包分組。
圖1 NetFPGA結(jié)構(gòu)框圖
圖2 網(wǎng)絡(luò)數(shù)據(jù)包分組方法系統(tǒng)框圖
首先從網(wǎng)絡(luò)上采集到的數(shù)據(jù)放入FIFO(先進(jìn)先出隊(duì)列)進(jìn)行緩存,其次再將網(wǎng)絡(luò)數(shù)據(jù)流送分組控制器,并且依據(jù)分組規(guī)則進(jìn)行分類,分組控制器完成分組規(guī)則的訪問,需要不斷的讀分組規(guī)則,最后輸出分類結(jié)果,上位機(jī)可通過PCI_DMA直接訪問的方式將分組規(guī)則置入DDR2存儲(chǔ)器,也可通過PCI_IO的方式置入。上位機(jī)可實(shí)時(shí)統(tǒng)計(jì)顯示網(wǎng)絡(luò)特征,動(dòng)態(tài)配置分組規(guī)則集。具體框圖如圖3所示。
◆FIFO緩存模塊:流水線技術(shù)是指將一個(gè)邏輯功能分割成多個(gè)階段的過程,每個(gè)階段執(zhí)行一小段邏輯功能。這樣處理可提高執(zhí)行的速度,對(duì)整個(gè)系統(tǒng)來說,可提高吞吐量,可以允許更高的工作頻率,動(dòng)態(tài)的提高了設(shè)計(jì)性能,但是為了使流水線的性能達(dá)到最佳,當(dāng)采用了多級(jí)流水線之后,數(shù)據(jù)通路變成了多時(shí)鐘周期通路,必然會(huì)帶來一定的延時(shí),要進(jìn)行嚴(yán)格的周期約束,邏輯規(guī)模要均衡。在Router HW設(shè)計(jì)中采用5級(jí)流水線模塊化設(shè)計(jì)方法,在數(shù)據(jù)通路幾乎每個(gè)模塊都設(shè)計(jì)一個(gè)同步FIFO,以實(shí)現(xiàn)數(shù)據(jù)包的緩存。從而不必過多考慮時(shí)序約束,專注于模塊內(nèi)部功能的實(shí)現(xiàn),給開發(fā)帶來極大的便利。
圖3 分組方法框圖
◆分組控制器模塊:根據(jù)FSMD數(shù)據(jù)和邏輯控制兩部分的思想設(shè)計(jì)出分組控制方法,設(shè)計(jì)出分組控制邏輯結(jié)構(gòu)圖如圖4所示。
圖4 分組控制邏輯結(jié)構(gòu)圖
待分組數(shù)據(jù)進(jìn)入FIFO進(jìn)行緩存,與此同時(shí)進(jìn)行預(yù)處理,預(yù)處理的目的是一個(gè)狀態(tài)轉(zhuǎn)移機(jī)。根據(jù)數(shù)據(jù)包內(nèi)容確定在哪個(gè)狀態(tài)下進(jìn)行IP地址的提取,根據(jù)預(yù)處理的標(biāo)記結(jié)果啟動(dòng)后面的IP地址提取,數(shù)據(jù)緩存和提取IP地址是并行執(zhí)行的,提取到的IP地址再去訪問DDR2讀取分組控制位,依據(jù)讀取到的分組控制位如“1”數(shù)據(jù)包通過,“0”數(shù)據(jù)包不通過,修改相應(yīng)數(shù)據(jù)包信息,以便后續(xù)電路對(duì)其轉(zhuǎn)發(fā)到不同端口。要注意的是:在數(shù)據(jù)包轉(zhuǎn)發(fā)時(shí),對(duì)緩存的數(shù)據(jù)包讀取要注意其時(shí)序,所用FIFO采用異步的方法控制其讀信號(hào)。
◆上位機(jī)下載分組規(guī)則:數(shù)據(jù)包的傳輸分為幀的發(fā)送和接收,對(duì)于硬件和驅(qū)動(dòng)來說都是通過PCI接口以DMA的方式進(jìn)行數(shù)據(jù)的收發(fā)。在應(yīng)用程序?qū)崿F(xiàn)上可以有兩種方式:一種是利用Linux下網(wǎng)絡(luò)工具包Linpcap和Libnet分別進(jìn)行數(shù)據(jù)包的捕獲和發(fā)送;另一種是直接對(duì)網(wǎng)絡(luò)接口進(jìn)行數(shù)據(jù)包操作。Libpcap是Linux下的網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包,可以對(duì)網(wǎng)絡(luò)進(jìn)行監(jiān)聽,但不能攔截?cái)?shù)據(jù)包。它是在操作系統(tǒng)內(nèi)核的數(shù)據(jù)鏈路層添加旁路電路實(shí)現(xiàn),并不影響網(wǎng)絡(luò)協(xié)議棧工作,可以用來監(jiān)聽NetFPGA各個(gè)網(wǎng)口數(shù)據(jù)流量等操作。Libnet是Linux下用于數(shù)據(jù)包構(gòu)造和發(fā)送的函數(shù)包軟件,只需把NetFPGA作為一塊普通的網(wǎng)絡(luò)接口來操作即可。本文配置分組規(guī)則就是采用Libnet軟件把大量分組IP和所對(duì)應(yīng)的分組控制位封裝成IP數(shù)據(jù)包的形式,通過PCI_DMA方式下到FPGA中,其封裝過程流程圖如圖5所示。
圖5 封裝過程流程圖
為了驗(yàn)證基于FPGA的網(wǎng)絡(luò)數(shù)據(jù)包分組系統(tǒng)設(shè)計(jì)性能,本文的實(shí)現(xiàn)是采用斯坦福大學(xué)的NetFPGA2.1開發(fā)平臺(tái)來實(shí)現(xiàn)其原型系統(tǒng),通過ISE軟件編寫Verilog描述語(yǔ)言對(duì)各功能模塊進(jìn)行描述,使用ModelSim軟件進(jìn)行仿真,結(jié)果表明分組效果較軟件方式具有較高的準(zhǔn)確率。