摘 要: 討論了在IXP2400上應(yīng)用IPSec實(shí)現(xiàn)安全網(wǎng)關(guān)的一種方案,可為通過(guò)的業(yè)務(wù)流提供較強(qiáng)的安全性,。
關(guān)鍵詞: 網(wǎng)絡(luò)處理器,; IXP2400; 微引擎,; IPSec
IPSec是一種基于IP層的通信安全機(jī)制,,是目前唯一一種可為任何形式的通信提供安全保障的協(xié)議,因而實(shí)現(xiàn)具有IPSec功能的網(wǎng)關(guān)能保證IP層通信的安全,。然而,,用IPSec對(duì)數(shù)據(jù)包進(jìn)行認(rèn)證、加/解密處理等,,都是比較耗費(fèi)資源的工作,,容易使具有IPSec功能的網(wǎng)關(guān)設(shè)備出現(xiàn)瓶頸問(wèn)題;同時(shí),,基于ASIC研發(fā)具有這類(lèi)復(fù)雜功能的新產(chǎn)品更為困難,。因此,傳統(tǒng)的網(wǎng)絡(luò)解決方案已在處理速度和靈活性?xún)煞矫媸艿教魬?zhàn),。具有通用CPU的靈活性和ASIC芯片的執(zhí)行速度的可編程網(wǎng)絡(luò)處理器的出現(xiàn),,為IPSec機(jī)制在線(xiàn)速網(wǎng)關(guān)設(shè)備的應(yīng)用提供了新途徑。
本文介紹了Intel的IXP2400網(wǎng)絡(luò)處理器的特點(diǎn),、結(jié)構(gòu)以及IPSec體系結(jié)構(gòu),,討論了在IXP2400中以IPSec實(shí)現(xiàn)安全網(wǎng)關(guān)的一種方案。
1 IXP2400的體系結(jié)構(gòu)
網(wǎng)絡(luò)處理器(Network Processor)是一種面向包結(jié)構(gòu)處理的專(zhuān)用器件,。IXP2400是Intel公司第二代高性能網(wǎng)絡(luò)處理器之一,,是在第一代網(wǎng)絡(luò)處理器的基礎(chǔ)上,實(shí)現(xiàn)了高性能的并行處理結(jié)構(gòu),,從而能夠?qū)崿F(xiàn)復(fù)雜的算法,、深入查看包內(nèi)容、進(jìn)行流量管理及以線(xiàn)速(2.4 Gb/s)轉(zhuǎn)發(fā)包等,;并首次采用Intel的超任務(wù)流水線(xiàn)技術(shù),,允許將1個(gè)包處理任務(wù)分解為多個(gè)易于銜接的、有序的子任務(wù),,并確保微引擎間通信的低時(shí)延,。在體系結(jié)構(gòu)上,具有以下特點(diǎn):
(1)多處理單元結(jié)構(gòu),,各單元獨(dú)立運(yùn)行,,并以硬件實(shí)現(xiàn)多線(xiàn)程技術(shù),,線(xiàn)程間無(wú)任何需切換開(kāi)銷(xiāo)。
(2)以軟件流水線(xiàn)的形式分派任務(wù)到各處理單元,,各處理單元可并行操作,。
(3)ALU采用優(yōu)化過(guò)的指令,專(zhuān)用于數(shù)據(jù)包處理,,1條指令能在1個(gè)時(shí)鐘周期內(nèi)完成,。
(4)具有一些完成特殊功能的硬件單元,如CRC校驗(yàn),、Hash計(jì)算,、甚至加/解密運(yùn)算單元,用于加速專(zhuān)用處理,。
IXP2400的體系結(jié)構(gòu)如圖1所示,。
其主要功能部件如下[1]:
(1)XScale:32位的RISC高性能通用處理器,用于初始化,、管理整個(gè)芯片,,同時(shí)能執(zhí)行高層網(wǎng)絡(luò)處理任務(wù),如復(fù)雜的算法處理,、路由表維護(hù)等。
(2)Microengine(MEv2):8個(gè)相互獨(dú)立的32 bit可編程微引擎,,是處理數(shù)據(jù)的主要場(chǎng)所,,各微引擎間用寄存器通信。每個(gè)微引擎主要包括:1個(gè)存放該微引擎運(yùn)行程序的控制存儲(chǔ)器,、8個(gè)硬件支持的線(xiàn)程,、數(shù)據(jù)通路和控制狀態(tài)寄存器、1個(gè)ALU及1個(gè)CRC單元等,。
(3)存儲(chǔ)器控制器:用于控制訪問(wèn)片外RAM,,包括SRAM、DRAM,。SRAM主要用于存儲(chǔ)各種控制信息,,如路由表等;DRAM主要用作數(shù)據(jù)處理的緩沖區(qū),。
(4)Scratch:片內(nèi)的16 KB通用存儲(chǔ)器,,存放各種經(jīng)常需快速查找的數(shù)據(jù)。
(5)Hash:能對(duì)48 bit,、64 bit或128 bit的數(shù)據(jù)作Hash運(yùn)算,,并生成索引。
此外,,IXP2400中還采用了一些如硬件隊(duì)列等技術(shù)來(lái)提高ALU的處理速度,。
2 IPSec的工作原理
IPSec的安全服務(wù)是通過(guò)在IP層對(duì)所有數(shù)據(jù)流使用密碼和安全協(xié)議聯(lián)合實(shí)現(xiàn)的,,能保證應(yīng)用程序通信的安全性。它能應(yīng)用于防火墻和路由器等網(wǎng)關(guān)設(shè)備,,對(duì)上層應(yīng)用是透明的,。
IPSec利用2種通信安全協(xié)議[2]:認(rèn)證頭(AH)和封裝安全載荷(ESP)。還有用于密鑰交換和管理的Internet密鑰交換協(xié)議(IKE)[2]和相應(yīng)的認(rèn)證/加密算法等協(xié)議組件,。AH和ESP既可用于保護(hù)一個(gè)完整的IP包,,也可以用來(lái)保護(hù)IP包中的上層數(shù)據(jù)。此外,,還可以組合使用,,實(shí)現(xiàn)不同的安全保護(hù)級(jí)別。AH和ESP使用2種工作模式[3]:傳輸模式和隧道模式,。
由于IPSec體系設(shè)計(jì)與算法無(wú)關(guān),,因而可以為不同的通信對(duì)等體選擇不同的安全算法。為維護(hù)這些動(dòng)態(tài)存在的安全策略,,在實(shí)現(xiàn)IPSec時(shí),,需要定義相應(yīng)的安全策略數(shù)據(jù)庫(kù)(SPD),其中的每1條記錄就是1條安全策略,。
為正確處理具有IPSec功能的IP包,,IPSec通信對(duì)等體需要將經(jīng)協(xié)商一致后所采用的安全協(xié)議、工作模式,、加密/認(rèn)證算法,、密鑰等信息與所建立的鏈路結(jié)合起來(lái),才能為不同的數(shù)據(jù)流提供不同的安全保護(hù),。其實(shí)現(xiàn)方法就是在IPSec通信對(duì)等體間建立安全關(guān)聯(lián)(SA),。SA是通信對(duì)等體之間為進(jìn)行安全通信而協(xié)商的一種約定。SA可由1個(gè)三元組唯一標(biāo)識(shí),,表示為<安全參數(shù)索引(SPI),,目的IP,安全協(xié)議標(biāo)識(shí)>,。
為維護(hù)所有活動(dòng)的SA參數(shù),,在實(shí)現(xiàn)IPSec時(shí),需要定義相應(yīng)的SA數(shù)據(jù)庫(kù)(SAD),。IKE的主要功能就是在IPSec通信對(duì)等體間動(dòng)態(tài)進(jìn)行通信參數(shù)協(xié)商[4],,并提供經(jīng)認(rèn)證的密鑰信息,從而建立起SA,,對(duì)其進(jìn)行維護(hù)和管理,。
3 IPSec在IXP2400中的實(shí)現(xiàn)
3.1 程序設(shè)計(jì)
網(wǎng)絡(luò)應(yīng)用程序中,網(wǎng)絡(luò)信息的處理通常包含在以下2個(gè)邏輯層面中[5]:
(1)數(shù)據(jù)層面:負(fù)責(zé)高速處理,、轉(zhuǎn)發(fā)數(shù)據(jù)包,。因所有要處理的數(shù)據(jù)包都必須通過(guò)該層面,,故其性能直接影響到整個(gè)程序的性能。
(2)控制層面:主要處理協(xié)議信息,,并負(fù)責(zé)創(chuàng)建,、配置及更新各種表和數(shù)據(jù)集,供數(shù)據(jù)層面查找使用,。如處理含路由信息的RIP,、OSPF包,然后更新IPv4轉(zhuǎn)發(fā)表,,供數(shù)據(jù)層面使用,。
網(wǎng)絡(luò)處理器就是完成這2個(gè)層面的功能。
在IXP2400中,,將數(shù)據(jù)層面分為快速通道和慢速通道,。快速通道主要由各微引擎構(gòu)成,,完成絕大多數(shù)包的正常處理,,如IP包轉(zhuǎn)發(fā)等;慢速通道主要由XScale構(gòu)成,,處理少數(shù)需復(fù)雜處理的包,,如異常包、包分段等,??紤]到處理速度的要求,在快速通道中通常將處理任務(wù)以軟件流水線(xiàn)形式分配到多個(gè)微引擎中實(shí)現(xiàn),,每個(gè)微引擎以編程方式實(shí)現(xiàn)所指定的任務(wù)。當(dāng)一個(gè)微引擎完成其任務(wù)后,,將包傳到下一微引擎繼續(xù)處理,,直至完成整個(gè)任務(wù)。每個(gè)微引擎的流水線(xiàn)又可由若干流水線(xiàn)級(jí)構(gòu)成,,這些流水線(xiàn)級(jí)是順序執(zhí)行的,。由于每個(gè)微引擎有8個(gè)線(xiàn)程并發(fā)(甚至有數(shù)個(gè)微引擎的線(xiàn)程在并行)執(zhí)行相同任務(wù),因而要按序正確處理數(shù)據(jù)包,,就必須考慮各線(xiàn)程訪問(wèn)臨界區(qū)代碼的同步問(wèn)題,。為保證指令盡可能少,以達(dá)到線(xiàn)速要求,,一種處理方法就是:在一個(gè)微引擎中讓各線(xiàn)程順序執(zhí)行,,并且每個(gè)線(xiàn)程順序執(zhí)行所有流水線(xiàn)級(jí)。如某個(gè)流水線(xiàn)級(jí)的功能對(duì)所處理的包并不要求,,則在執(zhí)行到該流水線(xiàn)級(jí)時(shí)必須進(jìn)入等待,,當(dāng)線(xiàn)程下一次獲得運(yùn)行時(shí)再執(zhí)行下一流水線(xiàn)級(jí),;如有數(shù)個(gè)微引擎在并行執(zhí)行同一任務(wù),則必須考慮微引擎間的執(zhí)行順序,??梢?jiàn),將少數(shù)包要求的復(fù)雜處理任務(wù)交給XScale,,能有效減少微引擎不必要的等待時(shí)間,,加快數(shù)據(jù)的處理速度。
對(duì)于控制層面,,因所要處理信息復(fù)雜,、廣泛,涉及的指令范圍廣,,數(shù)據(jù)層面中的快速通道是難以處理的,,因而應(yīng)放在XScale中實(shí)現(xiàn)[5]。
通常,,將快速通道處理任務(wù)按邏輯劃分為若干功能塊,,在可編程的微引擎中,每一塊實(shí)現(xiàn)稱(chēng)為一個(gè)微功能塊(microblock),。而將運(yùn)行在XScale中的微功能塊對(duì)應(yīng)的慢速通道處理部分稱(chēng)為核心組件(Core Component),,完成相應(yīng)微功能塊的配置、初試化及維護(hù)共享數(shù)據(jù)結(jié)構(gòu),,并處理微功能塊發(fā)送的異常包或信息,。此外,各種路由協(xié)議也運(yùn)行在XScale中,,處理各種協(xié)議信息,。這樣實(shí)現(xiàn)了數(shù)據(jù)層面和控制層面的分離,兩層面間可用標(biāo)準(zhǔn)API通信,。
將所有任務(wù)放在一個(gè)IXP2400中實(shí)現(xiàn),,可能滿(mǎn)足不了線(xiàn)速要求,因而通常將任務(wù)分配到2個(gè)IXP2400來(lái)實(shí)現(xiàn),。這樣對(duì)于需要較多指令的微功能塊,,可指定多個(gè)微引擎并行運(yùn)行,適當(dāng)增加每個(gè)微引擎的執(zhí)行時(shí)間,。
3.2 系統(tǒng)功能
綜上述分析,,實(shí)現(xiàn)方案的系統(tǒng)框圖如圖2所示。
其中,,接收微功能模塊(Receive Microblock)和發(fā)送微功能模塊(Transmit Microblock)用于數(shù)據(jù)包的接收和發(fā)送,,發(fā)送隊(duì)列(Transmit Queues )用于數(shù)據(jù)包的隊(duì)列管理、調(diào)度,,IP轉(zhuǎn)發(fā)微功能模塊(Forwarding Microblock)用于一般IP包的簡(jiǎn)單轉(zhuǎn)發(fā)(包括路由通告等),,核心組件是相關(guān)微功能塊的慢速通道處理部分,,如異常處理等;XScale中還運(yùn)行嵌入式OS,、各種協(xié)議及高層處理程序等,。
IPSec處理微功能模塊(Processing Microblock)是系統(tǒng)的主要部分,包括以下主要功能:協(xié)議核心,、AH/ESP處理模塊,、SPD、SAD,。其中,AH/ESP處理程序負(fù)責(zé)根據(jù)SA中定義的安全服務(wù)按照AH/ESP協(xié)議對(duì)數(shù)據(jù)包進(jìn)行處理,;SPD和SAD以適當(dāng)?shù)牟檎冶斫Y(jié)構(gòu)存放在片外的SRAM中,但該微功能塊中有各自的快速訪問(wèn)接口,,供其查詢(xún)數(shù)據(jù)使用(在XScale中也有訪問(wèn)這2個(gè)數(shù)據(jù)庫(kù)的接口,,以便維護(hù)其中的數(shù)據(jù));協(xié)議核心主要是協(xié)調(diào)以上各部分的工作,,解釋獲取的IP包等,。
3.3 數(shù)據(jù)處理過(guò)程
IPSec模塊是整個(gè)IPSec系統(tǒng)的核心,處理包的過(guò)程如下:
(1)線(xiàn)程摘取1個(gè)IP包,,判斷是否是經(jīng)分段的,,若是,該線(xiàn)程進(jìn)入等待狀態(tài),,下一線(xiàn)程開(kāi)始運(yùn)行,。在所有分段到達(dá)并重組后,進(jìn)入下一步處理,。
(2)使用選擇符檢索SPD,,若查找失敗,拋棄包;若返回的動(dòng)作是“拋棄”,,拋棄該包,。對(duì)于不包含IPSec頭的包,若返回的是“繞過(guò)”,,將包交給IP轉(zhuǎn)發(fā)模塊處理(若目的IP是本機(jī),將其交到XScale中,,由相應(yīng)程序處理,,否則轉(zhuǎn)發(fā)到下一節(jié)點(diǎn));若返回的是“應(yīng)用”,,進(jìn)入(4)處理,。對(duì)于包含IPSec頭的包,若返回的是“應(yīng)用”,,且包的目的地是本機(jī),,則進(jìn)入(3)處理,;若目的地不是本機(jī),則進(jìn)入(4)處理,。
(3)用檢索SPD返回的三元組搜索SAD,,若沒(méi)有匹配的SA,則丟棄該包,;否則,,按SA中的定義進(jìn)行處理,主要包括:
①重發(fā)檢查:用序列號(hào)及溢出標(biāo)志,、重發(fā)窗口大小檢查包是否有效,。
②數(shù)據(jù)包驗(yàn)證:用指定的認(rèn)證算法及密鑰,驗(yàn)證數(shù)據(jù)包,。若ESP沒(méi)選擇認(rèn)證,,則不做。
③解密:若是ESP協(xié)議包,,則用指定的加密算法及密鑰,,解密數(shù)據(jù)包。
以上處理失敗,,則丟棄該數(shù)據(jù)包,;若包中還有IPSec頭,需選擇新的選擇符,,重復(fù)(2),、(3)。
④重構(gòu)IP包交給IP轉(zhuǎn)發(fā)模塊處理,。
(4)用檢索SPD返回的三元組搜索SAD,,若沒(méi)有匹配的SA,線(xiàn)程向XScale發(fā)出IKE的服務(wù)請(qǐng)求,,由IKE服務(wù)程序與通信對(duì)等體協(xié)商建立相應(yīng)的SA,,并記入SAD。具備SA后,,有序進(jìn)行如下處理:
①根據(jù)SA中指定的安全協(xié)議及操作模式,,調(diào)用對(duì)應(yīng)的處理模塊,為數(shù)據(jù)包生成協(xié)議頭,。
②若采用傳輸模式,,只需將原IP頭中的協(xié)議類(lèi)型改為上一步中所用協(xié)議;若是隧道模式,,則需要以隧道兩端的IP作源,、目的IP和上一步中所用協(xié)議,生成新的IP頭,封裝原IP包,。
③對(duì)ESP協(xié)議,按SA中指定的加密算法和密鑰,,對(duì)包的相應(yīng)部分加密。
④按SA中指定的認(rèn)證算法,,對(duì)包的相應(yīng)部分進(jìn)行認(rèn)證,。
⑤修改有關(guān)數(shù)據(jù),重新計(jì)算校驗(yàn)和,;若需要分段處理,,將包交給XScale中處理。
(5)經(jīng)以上處理后,,將包安排到對(duì)應(yīng)端口的隊(duì)列中,,經(jīng)調(diào)度后由傳送模塊經(jīng)重新添加MAC幀頭后發(fā)送。
值得一提的是,,在以上過(guò)程中,,由于是多線(xiàn)程處理,因而在1個(gè)微引擎中,,一個(gè)線(xiàn)程進(jìn)入等待狀態(tài),,另一個(gè)線(xiàn)程立刻運(yùn)行,這一過(guò)程由編程者控制完成的,。下面的程序段是數(shù)據(jù)處理過(guò)程的主要控制部分:
while(1){
dl_source(); //從接收線(xiàn)程取下包描述符
if(dlBufHandle= =0){ continue; }
Ethernet_validate(); // 驗(yàn)證這個(gè)包是一個(gè)有效的以太網(wǎng)頭
Ethernet_strip_header(); //去掉以太網(wǎng)頭
IPSec_process(); //IPSec處理
IPv4_five_tuple_class(); //進(jìn)行IPv4 classifier的轉(zhuǎn)發(fā)
If(dlNextBlock= =IX_DROP){ //clNextBlock全局變量,,
//表示下一個(gè)
Goto drop; //跳轉(zhuǎn)到丟棄包的處理模塊
}
Ethernet_add_header(); //添加新的以太網(wǎng)頭
D1_sink(); //將處理后的包描述符放入發(fā)送緩沖區(qū)中
Drop:
Dl_BufDrop(dlBufHandle); //丟棄包的處理
}
IPSec被認(rèn)為是目前實(shí)現(xiàn)VPN的技術(shù)標(biāo)準(zhǔn),在Internet的安全通信中發(fā)揮著重要作用,。當(dāng)前對(duì)網(wǎng)絡(luò)通信不斷提出了速度和安全的更高要求,,以兼?zhèn)渫ㄓ肅PU的靈活性和ASIC芯片執(zhí)行速度的網(wǎng)絡(luò)處理器為核心實(shí)現(xiàn)高速安全網(wǎng)絡(luò)設(shè)備,是當(dāng)前網(wǎng)絡(luò)新技術(shù)的應(yīng)用研究重點(diǎn),。
參考文獻(xiàn)
[1] Intel Corp. Intel IXP2400 network processor hardware reference manual[DB/OL]. 2002.
[2] GONCALVES M. IPv6網(wǎng)絡(luò)[M]. 黃錫偉,楊 震,譯.北京:人民郵電出版社,2000: 251-275.
[3] DAVIS C R. IPSec VPN的安全實(shí)施[M]. 周永彬,馮登國(guó),徐震,等譯. 北京:清華大學(xué)出版社,2002:165-201.
[4] 王 健,李 濤,劉曉潔,等. IKE的研究及其在IPSec中的應(yīng)用[J]. 通信技術(shù),,2003,144:128-129.
[5] Intel Corp. Intel IXA portability framework: developer′s manual[DB/OL]. 2002.