[摘要]通過分析IPv6協(xié)議,分片攻擊的基本特點(diǎn)和Linux多線程算法的實(shí)現(xiàn),建立IPv6分片包并行重組模型,并給出該模型的一種實(shí)現(xiàn)方法,在Linux環(huán)境下進(jìn)行了測試,最后對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行了分析。
[關(guān)鍵詞]高速網(wǎng)絡(luò) IPv6協(xié)議 分片并行重組
中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0510040-01
隨著IPv6互聯(lián)網(wǎng)的逐漸發(fā)展、普及,不安全問題并沒有隨著IPv6逐步取代IPv4而消失,反而日益受到重視。為防范分片攻擊以及實(shí)現(xiàn)基于IPv6包的后續(xù)應(yīng)用,并減少丟包率,本文提出了IPv6分片包并行重組模型,采取多線程并行重組方式以加快分片包的重組。
一、IPv6協(xié)議和分片攻擊
基于IPv4協(xié)議的上一代互聯(lián)網(wǎng)因其固有的不穩(wěn)定性,不安全性,以及其IPv4地址耗盡的現(xiàn)實(shí)因素,越來越成為互聯(lián)網(wǎng)發(fā)展的不利因素,與IPv4協(xié)議相比,IPv6協(xié)議具有許多新的特點(diǎn)并彌補(bǔ)了IPv4的許多不足,比如巨大的地址空間;簡潔的IPv6協(xié)議報(bào)頭(基本報(bào)頭如圖1所示)以及全新的擴(kuò)展報(bào)頭,其中特別增加了IPSEC安全協(xié)議;全新的ICMPv6協(xié)議,并將ARP協(xié)議和RARP協(xié)議功能集成進(jìn)ICMPv6協(xié)議中;自動(dòng)配置功能;對(duì)移動(dòng)IPv6的支持等。
物理網(wǎng)絡(luò)通過將IPv6數(shù)據(jù)包封裝進(jìn)物理幀來在物理層進(jìn)行數(shù)據(jù)傳輸?shù)?,每一種物理網(wǎng)絡(luò)都規(guī)定了一幀所能攜帶的最大數(shù)據(jù)量。這一限制稱為最大傳輸單元(Maximum Transmission Unit,MTU)。因而一個(gè)數(shù)據(jù)包必須小于或等于一個(gè)網(wǎng)絡(luò)的MTU,否則無法進(jìn)行封裝和傳輸。IPv6協(xié)議規(guī)定,如果要發(fā)送的IPv6數(shù)據(jù)包長度大于路由過程中所經(jīng)過的所有子網(wǎng)的最小MTU值,那么源節(jié)點(diǎn)必須對(duì)此數(shù)據(jù)包進(jìn)行分片,不同于IPv4協(xié)議,中間路由器不必再分片了,最后由目的節(jié)點(diǎn)進(jìn)行分片重組。因此,對(duì)于數(shù)據(jù)包捕獲系統(tǒng)來說,將網(wǎng)卡設(shè)置成混雜(Promiscuous)模式后,也要模擬目的節(jié)點(diǎn)將捕獲的分片數(shù)據(jù)包進(jìn)行重組成原始數(shù)據(jù)包。
IPv6數(shù)據(jù)包的分片只能在源節(jié)點(diǎn)進(jìn)行,路由中間節(jié)點(diǎn)不再進(jìn)行分片操作,簡化了中間節(jié)點(diǎn)對(duì)數(shù)據(jù)包的處理,提高的中間節(jié)點(diǎn)對(duì)數(shù)據(jù)包的轉(zhuǎn)發(fā)效率;IPv6的分片包重組只發(fā)生在目的節(jié)點(diǎn)。通過MTU發(fā)現(xiàn)機(jī)制,源節(jié)點(diǎn)可以確定路由中的最小MTU值,以此作為發(fā)送數(shù)據(jù)的最大限度。當(dāng)源節(jié)點(diǎn)要進(jìn)行分片時(shí),它將在IPv6數(shù)據(jù)包的可分片部分插入分片擴(kuò)展報(bào)頭。這些分片包擁有相同的分片標(biāo)志,但是分片偏移量各不相同。因此對(duì)于每一個(gè)分片包,必須包含三個(gè)部分,依次是原始數(shù)據(jù)包的不可分片部分、分片擴(kuò)展頭(fragment header),原始數(shù)據(jù)包的可分片部分的某一個(gè)分片。分片擴(kuò)展頭如圖2所示。
其中當(dāng)M=1的時(shí)候表示此分片包不是最后一個(gè)分片包,M=0則表示是最后一個(gè)分片包。偏移量是13位的無符號(hào)整數(shù),以8byte為單位,表示此分片數(shù)據(jù)相對(duì)于未分片的原始數(shù)據(jù)包中可分片部分的偏移量。
二、分片并行重組模型
本文所敘述的多線程分片并行重組方法可以設(shè)計(jì)為運(yùn)行在用戶空間和內(nèi)核空間,這里在用戶空間實(shí)現(xiàn)此基于libpcap的分片并行重組設(shè)計(jì)。 利用符合POSIX標(biāo)準(zhǔn)的pthread庫來進(jìn)行多線程編程。為了提高性能,使用基于libpcap和mmap的pfring模塊來捕捉數(shù)據(jù)包。通過使用多線程,可以充分使用多核CPU,進(jìn)行分片并行重組,減少丟包率。
三、模型的實(shí)現(xiàn)
本系統(tǒng)使用LINUX 2.6內(nèi)核,采用C語言為編程工具,并參考了libnids的源碼實(shí)現(xiàn)。
(一)主要數(shù)據(jù)結(jié)構(gòu)。主要用到的數(shù)據(jù)有:struct hosts hostable,關(guān)于hosts的哈希表;hosts,相同hash值的所有主機(jī)鏈表頭結(jié)點(diǎn);hostfrags,相同hash值的主機(jī)節(jié)點(diǎn);ip6q,ip6frag鏈表的頭結(jié)點(diǎn),鏈接同一原始數(shù)據(jù)包的所有分片包;ip6frag,分片包節(jié)點(diǎn);pthread_mutex_t,互斥鎖,用于并發(fā)訪問、主要數(shù)據(jù)結(jié)構(gòu)之間的邏輯關(guān)聯(lián)如圖3所示。
(二)分片重組邏輯流程。1.通過pthread_create循環(huán)創(chuàng)建多個(gè)線程,設(shè)置相應(yīng)的回調(diào)函數(shù);2.在每個(gè)回調(diào)函數(shù)線程中,無限循環(huán)調(diào)用pfri
ng的pfring_rcv函數(shù)獲取數(shù)據(jù)包,若不是分片包,則交由上層的icmp6,tcp6或者udp6模塊處理,否則按分片并行重組流程處理;3.分片并行重組流程將收到的每個(gè)分片包按分片偏移量的順序插入到ip6q隊(duì)列里,當(dāng)所有的分片包都捕獲到了,就將ip6q隊(duì)列里的所有分片包重組成原始IPv6數(shù)據(jù)包,交由上層的icmp6,tcp6或者udp6模塊處理,并釋放相應(yīng)的ip6q隊(duì)列。注意的是,在插入或刪除hostfrags節(jié)點(diǎn),ip6q節(jié)點(diǎn)和ip6frag節(jié)點(diǎn)時(shí)要鎖住相應(yīng)的上層節(jié)點(diǎn)鎖。
(三)測試數(shù)據(jù)。測試用硬件:(1)服務(wù)器,配置是雙至強(qiáng)CPU,4G
內(nèi)存,千兆網(wǎng)卡,使用Linux 2.6.25內(nèi)核,網(wǎng)絡(luò)協(xié)議為IPv6;(2)Smartb
it 6000C測試儀。以Smartbit提供測試流量,發(fā)往服務(wù)器。以單線程分片重組和兩個(gè)線程(每CPU一個(gè)線程)并行重組為對(duì)比,在服務(wù)器中獲取的測試結(jié)果表明,在帶寬為100%利用時(shí),小包產(chǎn)生較大的丟包率,但雙線程仍然比單線程捕包率高,在大包時(shí),反而會(huì)產(chǎn)生丟包,原因是過多拷貝分片包時(shí)消耗了CPU時(shí)間;在帶寬為80%時(shí),各項(xiàng)數(shù)據(jù)表現(xiàn)良好。
四、總結(jié)
本文提出的并行重組算法使用了pthr- ead_mutex_t鎖機(jī)制,由于mutex鎖會(huì)使得沒有得到資源的線程休眠,產(chǎn)生進(jìn)程/線程調(diào)度,因此對(duì)于1Gbit的高速網(wǎng)絡(luò)中,由于數(shù)據(jù)包來的非??欤沟貌l(fā)線程會(huì)不停地競爭mutex鎖資源,這樣大量的CPU用于進(jìn)程/線程調(diào)度,浪費(fèi)了CPU時(shí)間,不利于數(shù)據(jù)包的捕獲,重組等后續(xù)處理;spin_lock機(jī)制可以使得CPU忙等,線程不必放棄CPU,避免了調(diào)度浪費(fèi)的時(shí)間,可以考慮采用spin_lock鎖機(jī)制。同時(shí),如果要在多核上實(shí)現(xiàn)多線程處理,并從根本上避免訪問沖突,可以考慮恰當(dāng)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),使得每個(gè)CPU只訪問屬于自己的數(shù)據(jù),并給予并行處理線程實(shí)時(shí)調(diào)度策略,和線程專屬各自CPU,即線程被調(diào)度時(shí)不會(huì)切換CPU。
參考文獻(xiàn):
[1]Pv6下協(xié)議分析技術(shù)在入侵檢測系統(tǒng)中的研究與應(yīng)用,暨南大學(xué)碩士論文,2006.6.
[2]張會(huì)汀、鄭力明,IP分片重組算法(RFC815)的實(shí)現(xiàn)及其改進(jìn),計(jì)算機(jī)工程與設(shè)計(jì),2005.04(26).
作者簡介:
胡垂立,男,漢族,在讀碩士,廣東技術(shù)師范學(xué)院天河學(xué)院計(jì)算機(jī)系講師,研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)、視頻技術(shù)等。