《電子技術(shù)應(yīng)用》
欢迎订阅(电子2025)
欢迎订阅(网数2025)
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > 基于網(wǎng)絡(luò)微處理器包過濾硬件防火墻的研究
Digikey(202412)
2024测试测量培训202410

基于網(wǎng)絡(luò)微處理器包過濾硬件防火墻的研究

2009-06-18
作者:胡成偉

  摘 要:網(wǎng)絡(luò)處理器NP(Network Processor)對數(shù)據(jù)包接收、處理和發(fā)送的角度,討論在NP架構(gòu)下多微引擎、多線程并行處理網(wǎng)絡(luò)數(shù)據(jù)包,實(shí)現(xiàn)基于包過濾方式防火墻的原理。
  關(guān)鍵詞:網(wǎng)絡(luò)微處理器;防火墻;包過濾;微引擎;并行處理

?

  防火墻是當(dāng)今計(jì)算機(jī)網(wǎng)絡(luò)安全的主要設(shè)備之一。隨著網(wǎng)絡(luò)數(shù)據(jù)量的增大、速度的增高,軟件防火墻已不能勝任,硬件防火墻成為大流量、高品質(zhì)防火墻產(chǎn)品的首選。硬件防火墻的實(shí)現(xiàn)方案有采用網(wǎng)絡(luò)處理器ASIC技術(shù)實(shí)現(xiàn)芯片級防火墻和采用網(wǎng)絡(luò)處理器NP(Net Processor)技術(shù)實(shí)現(xiàn)微處理芯片防火墻兩種。對兩種方案進(jìn)行比較,ASIC處理速度快,數(shù)據(jù)吞吐量大,但開發(fā)難度大,開發(fā)周期長,很難適應(yīng)快速變化的網(wǎng)絡(luò)環(huán)境而升級換代;NP技術(shù)實(shí)現(xiàn)方案靈活,也較ASIC開發(fā)難度小,開發(fā)周期短,可以根據(jù)情況快速升級。NP技術(shù)是適合我國國情的硬件防火墻產(chǎn)品的實(shí)現(xiàn)方案,是目前我國硬件防火墻產(chǎn)品主要采用的技術(shù)[1]。
  防火墻可根據(jù)其處理數(shù)據(jù)的層次分為:包過濾防火墻、狀態(tài)檢測防火墻、代理服務(wù)器防火墻和核處理防火墻。對于要求高速處理的硬件防火墻(處理能力大于2.5 Gb/s),無法完成代理服務(wù)防火墻功能和核處理防火墻功能?;诎^濾功能硬件防火墻是高速防火墻能采用的基本實(shí)現(xiàn)策略。以下將就NP實(shí)現(xiàn)包過濾的方法進(jìn)行研究。
1 IXP2400網(wǎng)絡(luò)處理器
  NP是專門為處理網(wǎng)絡(luò)數(shù)據(jù)包而設(shè)計(jì)的可編程處理器,它能夠并行、高速完成網(wǎng)絡(luò)數(shù)據(jù)處理。IXP2400是INTEL公司的第二代NP產(chǎn)品,它采用多內(nèi)核并行結(jié)構(gòu),由1個(gè)XScale Core作為核心處理器,以及8個(gè)32位獨(dú)立可編程、支持多線程的微引擎(MicroEngine)構(gòu)成。NP的體系結(jié)構(gòu)可分為兩個(gè)層面:控制層面和數(shù)據(jù)層面。
  控制層面由XScale Core處理,它的主要任務(wù)是完成對整個(gè)NP各部件的初始化,運(yùn)行操作系統(tǒng),完成復(fù)雜而非實(shí)時(shí)運(yùn)算??刂茖用嬉话惆惭b的操作系統(tǒng)是:VxWorks或LINUX等。由于控制層面是構(gòu)建在一個(gè)強(qiáng)大的XScale Core之上,其開發(fā)與一般的嵌入式系統(tǒng)開發(fā)相類似。
  數(shù)據(jù)層面主要負(fù)責(zé)對數(shù)據(jù)包的收發(fā)和實(shí)時(shí)數(shù)據(jù)處理,由微引擎來完成。微引擎是32位的采用RISC技術(shù)實(shí)現(xiàn)的微型MCU,對它的編程與傳統(tǒng)嵌入式系統(tǒng)開發(fā)不同,由INTEL提供的MicroC和MicroASM支持。微引擎和XScale Core在工作時(shí)關(guān)系如圖1所示。

?


2?包過濾的規(guī)則
  包過濾是基于一系列規(guī)則對進(jìn)出防火墻的數(shù)據(jù)包進(jìn)行過濾。規(guī)則其實(shí)是一個(gè)“if conditions then action”的判斷,一組規(guī)則構(gòu)成一個(gè)規(guī)則表(如表1)。當(dāng)IP數(shù)據(jù)包通過這個(gè)規(guī)則表的檢查后,允許通過的IP包就轉(zhuǎn)發(fā),禁止通過的IP包就被攔截下來,其結(jié)果如表2所示 。對于一個(gè)小型的網(wǎng)絡(luò),其規(guī)則一般有幾百個(gè),對于一個(gè)中型的ISP服務(wù)網(wǎng)絡(luò),其規(guī)則一般有數(shù)千個(gè),對于一個(gè)大型的網(wǎng)絡(luò)其規(guī)則一般超過2萬個(gè)。在進(jìn)行包過濾時(shí),最重要的就是進(jìn)行規(guī)則的匹配。如何快速查找匹配規(guī)則,減少存儲器容量成為包過濾算法的研究重點(diǎn),參考文獻(xiàn)[2]中詳細(xì)地討論了一些包過濾算法。

?

?


  本文主要是討論NP在整個(gè)過程中各部分的工作,為敘述簡單將不涉及復(fù)雜的規(guī)則查找,采用線性搜索,即從上到下對規(guī)則表進(jìn)行查找,在制定規(guī)則表時(shí),優(yōu)先級高的規(guī)則將被安排在表的前面。
3 基于NP的包過濾
  IP數(shù)據(jù)包過濾處理由IXP2400中的微引擎完成。微引擎是一個(gè)個(gè)獨(dú)立的MCU,有自己的寄存器、存儲器,執(zhí)行各自的指令序列,互不干擾,而且每個(gè)微引擎支持8個(gè)硬件線程。在數(shù)據(jù)包處理的過程中,IXP2400的8個(gè)微引擎可以采用串行流水線方式(如圖2)工作,或以并行處理方式(如圖3)工作。在參考文獻(xiàn)[3]中指出并發(fā)處理比串行流水線處理的效率要高25%。

?


  在串行流水線工作方式中,每一個(gè)微引擎(ME)完成的工作不同,當(dāng)一個(gè)微引擎完成其工作后,將數(shù)據(jù)包交給下一個(gè)微引擎繼續(xù)后續(xù)工作,所以每一個(gè)微引擎執(zhí)行的代碼不同。在并發(fā)處理方式中,每一個(gè)微引擎完成的任務(wù)相同,每一個(gè)微引擎所執(zhí)行的代碼相同。本文在安排微引擎時(shí),包的接收采用ME0,當(dāng)它處理完后將結(jié)果交給ME1~ME6,這6個(gè)微引擎并發(fā)對數(shù)據(jù)包進(jìn)行規(guī)則匹配,匹配結(jié)束后將包交由ME7完成發(fā)送任務(wù)。整個(gè)包過濾處理結(jié)構(gòu)既有串行方式,又有并發(fā)方式,這是因?yàn)樵谡麄€(gè)處理過程中,進(jìn)行規(guī)則匹配所需的時(shí)間和運(yùn)算都比接收和發(fā)送的要多,將更多的處理能力部署在這一環(huán)節(jié),可以消除整個(gè)系統(tǒng)處理的瓶頸。
3.1 接收處理的實(shí)現(xiàn)
  MSF(Media Switch Fabric Interface)是IXP2400連接網(wǎng)絡(luò)的接口。它具有8 KB的RBUF(接收緩沖)和8 KB的TBUF(發(fā)送緩沖)。當(dāng)外部以太網(wǎng)幀(Packet C)進(jìn)入MSF時(shí),MSF將數(shù)據(jù)幀分割成若干個(gè)大小為64B(或128/256 B)的mpacket,mpacket存放在RBUF中,每一個(gè)mpacket占據(jù)RBUF的一條目。當(dāng)RBUF中有有效條目時(shí),MSF將發(fā)出一個(gè)RBUF有效信號。在MSF中,有一個(gè)RX_THREAD_FREELIST數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)登記了用于處理接收任務(wù)的空閑線程。本文將ME0中空閑線程登記在這里,并按順序排列成接收線程鏈。當(dāng)一個(gè)空閑線程接收到一個(gè)RBUF有效信號的觸發(fā)時(shí),便會進(jìn)入忙狀態(tài),進(jìn)行一次mpacket的接收循環(huán);當(dāng)循環(huán)結(jié)束后,這個(gè)線程將重新回到空閑狀態(tài),并重新鏈入RX_THREAD_FREELIST。各線程在接收mpacket時(shí),以無限循環(huán)方式進(jìn)行,一次循環(huán)中完成如下工作:
 ?。?)檢查mpacket是否SOP(Packet C進(jìn)入MSF時(shí),被分割成多個(gè)mpacket,其中第一mpacket就是SOP)或EOP(Packet C中最后一個(gè)mpacket);
 ?。?)如果是SOP,線程將在DRAM中開辟一個(gè)新Buffer,并將mpacket拷貝至其間,如果不是SOP則緊接著前面拷貝的內(nèi)容進(jìn)行拷貝。這樣可以將一個(gè)被分割的包重新組合起來;
  (3)如果是EOP,意味著Packet C的結(jié)束,在拷貝完此mpacket后,線程將在SRAM中的接收隊(duì)列中將此Packet C的包句柄(PC)插入到隊(duì)列的尾部。接收過程如圖4所示。


  每個(gè)線程一次循環(huán)只處理一個(gè)mpacket,如果一個(gè)包分成幾個(gè)mpacket,則由幾次這樣的循環(huán)完成接收。由于每個(gè)IXP2400的微引擎都有8個(gè)硬件支持的線程,在接收包處理時(shí),可以出現(xiàn)多個(gè)線程并發(fā)接收多個(gè)mpacket,這樣效率當(dāng)然會很高,但同樣也可能打亂Packet C的重組。為避免這種情況的發(fā)生,各線程的工作次序是嚴(yán)格規(guī)定的。各空閑線程在RX_THREAD_FREELIST登記時(shí),就按順序登記,線程1在最前,線程8在最后。當(dāng)?shù)谝粋€(gè)觸發(fā)到來時(shí),則觸發(fā)線程1,線程1在處理時(shí),若再接收到觸發(fā)時(shí),線程2接收觸發(fā),如此類推,當(dāng)線程1處理完后,它跟在線程8后面,如此形成一個(gè)閉合的線程處理鏈。在將數(shù)據(jù)從RBUF拷貝至DRAM的過程中,線程要經(jīng)過一個(gè)對線程序號敏感的微處理塊,以保證多線程在拷貝過程中是按順序進(jìn)行的。
3.2 規(guī)則匹配處理的實(shí)現(xiàn)
  本文所涉及的規(guī)則表中規(guī)則數(shù)目較少,搜索匹配規(guī)則的方法也相應(yīng)簡單,采用的是線性搜索方法。處理的流程如圖5所示。


  如前所述,采用ME1~ME6共6個(gè)微引擎同時(shí)對數(shù)據(jù)包進(jìn)行包過濾,每個(gè)微引擎有8個(gè)線程,所以可用于包過濾的線程有6×8=48個(gè),每個(gè)線程都采用無限循環(huán)方式。當(dāng)接收隊(duì)列中有有效元素,便發(fā)出處理信號。在線程池中,處在等待狀態(tài)的某一線程便會從SRAM中的接收隊(duì)列取出頭元素。接著,線程根據(jù)所取得元素中的包句柄從DRAM中將幀首部讀進(jìn)來,然后判斷是否是一個(gè)有效的以太網(wǎng)幀。如果不是,則丟棄包,并返回等待狀態(tài)。如果是有效幀,則從DRAM中讀出IP首部,對在SRAM中的規(guī)則進(jìn)行匹配。包過濾規(guī)則由XScale Core在SRAM 中建立一個(gè)規(guī)則表,并可根據(jù)實(shí)際情況對表進(jìn)行增加和刪除。線程從SRAM中將一條規(guī)則讀進(jìn)來,進(jìn)行匹配運(yùn)算。若匹配,則根據(jù)規(guī)則中允許/禁止進(jìn)行后續(xù)工作;若允許,則將把DRAM中對應(yīng)的包的句柄作為新的元素插入SRAM中的發(fā)送隊(duì)列中;若禁止,則釋放DRAM中對應(yīng)的包空間,并返回線程的等待狀態(tài)。若不匹配,則從SRAM中讀入下一條規(guī)則,重復(fù)以上工作,直到最后一條;如果仍找不到匹配規(guī)則,則將接下來的工作交給XSale Core完成。
  每個(gè)包過濾線程完成一個(gè)包的過濾,從接收隊(duì)列中將包句柄一一取出,處理完后,再在發(fā)送隊(duì)列中將其插入到隊(duì)列的尾部。但可能因?yàn)橛行┌幚淼每?,有些包處理得慢,使原來的接收順序因?yàn)樘幚硭俣鹊牟煌騺y。為了使發(fā)送隊(duì)列句柄的順序保持與接收隊(duì)列一致,采用了阻塞式順序包算法(Blocking Packet-ordering Athorithm)[4]。
3.3 發(fā)送處理的實(shí)現(xiàn)
  發(fā)送任務(wù)由ME7來完成,ME7有8個(gè)線程,每個(gè)線程完成如下工作:(1)線程發(fā)現(xiàn)發(fā)送隊(duì)列中的有效包句柄則從SRAM的發(fā)送隊(duì)列中將隊(duì)列頭元素取下來;(2)計(jì)算每個(gè)mpacket在包中的位置,把包從DRAM中以mpacket大小拷貝到TBUF中,其中TBUF是MSF中的發(fā)送緩沖區(qū);(3)寫入TBUF的單元控制字,表明TBUF包含有效數(shù)據(jù);(4)當(dāng)MSF收到EOP標(biāo)志的mpacket時(shí),表明該包結(jié)束,此后該包將交由外部的MAC設(shè)備傳輸。其過程如圖6所示。

?


  一個(gè)發(fā)送線程一次循環(huán)只負(fù)責(zé)一個(gè)mpacket的操作,周而復(fù)始。如同接收線程那樣,發(fā)送線程排好隊(duì),如流水線般將發(fā)送隊(duì)列中的元素對應(yīng)的包,分解為mpacket單元,并逐個(gè)按順序搬運(yùn)到TBUF緩沖區(qū)。
  在上述包過濾規(guī)則匹配時(shí),微引擎會多次訪問DRAM,以及在SRAM中進(jìn)行搜索。當(dāng)規(guī)則表中有較多規(guī)則時(shí),查找規(guī)則的算法會變得相當(dāng)復(fù)雜,將嚴(yán)重影響防火墻的處理速度。要使防火墻能快速地完成包過濾功能,可采用2個(gè)層次的手段:其一,改進(jìn)查找算法,比如使用基于狀態(tài)的動態(tài)包過濾算法;其二,充分應(yīng)用NP內(nèi)部的并行處理架構(gòu),安排好各微引擎工作內(nèi)容,協(xié)調(diào)好微引擎內(nèi)各線程的工作,使NP能高效并行地運(yùn)行。

參考文獻(xiàn)
[1] 宋斌,程勇,劉科全.NP架構(gòu)千兆線速防火墻的體系結(jié)構(gòu)與關(guān)鍵技術(shù),信息安全與通信保密,2004(8):22-25.
[2]?PANKAJ G,KEOWN M.Algorithms for packet classification.New York:IEEE,March/April 2001:24-32.
[3]?DEEPA S,F(xiàn)ANG,Wu Chang. Performance analysis of multi-dimensional packet classification on programmable network processors. New York: IEEE,Proceeding of the 29th Annual IEEE International Coference on Local Computer Networks (LCN’04).
[4]?ERIK J.J,Aaron R K. IXP2400/2800 Programming.INTEL PRESS.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。