欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種ip報(bào)文分片重組的方法

文檔序號(hào):7954997閱讀:321來源:國知局
專利名稱:一種ip報(bào)文分片重組的方法
技術(shù)領(lǐng)域
本發(fā)明涉及IP報(bào)文分片重組技術(shù)領(lǐng)域,具體來說,涉及到IP報(bào)文重組時(shí)重疊檢查技術(shù)。
背景技術(shù)
由于以太網(wǎng)絡(luò)成本低、組網(wǎng)靈活以及可擴(kuò)展性好,IP數(shù)據(jù)越來越多的承載在以太網(wǎng)上,但是由于以太網(wǎng)絡(luò)對(duì)承載的凈荷長度有1500Byte的上限,導(dǎo)致IP報(bào)文通過以太網(wǎng)時(shí),長度過長的報(bào)文必須進(jìn)行分片和重組。
IP報(bào)文的數(shù)據(jù)結(jié)構(gòu)里定義了用于分片重組的數(shù)據(jù)域,IP報(bào)文頭數(shù)據(jù)結(jié)構(gòu)如下

數(shù)據(jù)結(jié)構(gòu)說明如下


其中對(duì)分片重組起到關(guān)鍵作用的是Total Length、Identification、Flags和Fragment Offset這幾個(gè)域。同一個(gè)IP報(bào)文進(jìn)行分片操作時(shí),Identification一直保持,即多個(gè)分片使用同一個(gè)Identification,結(jié)合SIP(源IP地址)和DIP(目的IP地址)可以準(zhǔn)確識(shí)別哪些報(bào)文是同一個(gè)IP報(bào)文;Flags和Fragment Offset結(jié)合使用,進(jìn)行分片時(shí),DF(Don’t Fragment)比特設(shè)置為0,表示可以進(jìn)行分片,這時(shí)如果Flags中的bit2的值為1,則表示當(dāng)前IP報(bào)文是一個(gè)IP包的其中一段分片,并且不是最后一個(gè)分片,這時(shí)結(jié)合FragmentOffset域繼續(xù)判斷;如果Flags的Bit2為1而Fragment Offset=0,表示該IP報(bào)文為第一個(gè)分片,而且后續(xù)有分片;如果Flags的Bit2為1而FragmentOffset不是0,表示該IP報(bào)文為中間的一個(gè)分片;如果Flags的Bit2為0而Fragment Offset不是0,表示該報(bào)文是最后一個(gè)分片。
重組設(shè)備根據(jù)Fragment Offset和IP Total Length以及IHL進(jìn)行拼接重組,用IP Total Length減去IHL*4獲得當(dāng)前凈荷長度,然后根據(jù)FragmentOffset*8獲得當(dāng)前凈荷第一個(gè)字節(jié)所在位置,然后存入相應(yīng)的位置,所有的分片都到達(dá)后就可以進(jìn)行完成重組。
IP報(bào)文的分片一般在用戶終端設(shè)備以及MTU(最大傳輸單元)比較小的中間路由設(shè)備進(jìn)行操作,但I(xiàn)P報(bào)文的重組基本上都在用戶終端設(shè)備,即DIP所屬設(shè)備進(jìn)行,對(duì)單一的終端設(shè)備而言,流量不大,處理所需性能不高;但隨著L2TP等隧道技術(shù)出現(xiàn),用戶報(bào)文會(huì)在某個(gè)匯聚點(diǎn)封裝上L2TP等IP類封裝,這時(shí),由于增加了封裝頭,封裝后的報(bào)文就很容易長度超過以太網(wǎng)的長度限制,就必須進(jìn)行IP報(bào)文的分片。
現(xiàn)有技術(shù)采用支持任意多個(gè)分片的重組拼接方式,先是申請(qǐng)一個(gè)較大的緩存,例如為了能夠支持IP報(bào)文65535字節(jié)的最大長度,需要申請(qǐng)65536Byte的緩存區(qū),然后根據(jù)IP Total Length、IHL以及Fragment Offset進(jìn)行拼接。
如上所述,現(xiàn)有技術(shù)方案需要申請(qǐng)較大的緩存,當(dāng)連接較多時(shí),就需要海量的存儲(chǔ)空間;同時(shí)因?yàn)橐M(jìn)行防攻擊以及錯(cuò)包檢查,由于分片數(shù)很大,算法也相應(yīng)復(fù)雜,一般采用軟件實(shí)現(xiàn),處理性能也受到限制,往往成為瓶頸。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種IP報(bào)文分片重組的方法,以解決現(xiàn)有的IP報(bào)文分片重組時(shí)處理過于復(fù)雜并且表項(xiàng)指針占用的存儲(chǔ)空間過大的問題。
為實(shí)現(xiàn)上述目的,本發(fā)明采用如下的技術(shù)方案一種IP報(bào)文分片重組的方法,所述的方法包括如下步驟a、重組裝置接收到IP報(bào)文新的分片后將其與已收到的分片中相鄰的分片合并;b、重組裝置對(duì)合并后的分片進(jìn)行重組和重疊檢查。
其中步驟a之前還包括對(duì)IP報(bào)文進(jìn)行合法化檢查并將屬于同一個(gè)IP報(bào)文的分片依次存儲(chǔ)在緩存中。
其中步驟b之后還包括當(dāng)首尾分片均已到達(dá)且所有分片都能夠合并為一個(gè)分片時(shí),重組完成,重組裝置將緩存區(qū)中的IP報(bào)文轉(zhuǎn)發(fā)。
其中步驟a具體包括a1、重組裝置判斷接收到IP報(bào)文新的分片與已收到的分片是否相鄰,如果不是,則依據(jù)所述分片在分片前的位置次序分別分配指針組,否則轉(zhuǎn)步驟a2;a2、重組裝置將所述的相鄰分片依據(jù)其在分片前的位置次序合并成一個(gè)分片后分配一組指針組;其中步驟b具體包括重組裝置根據(jù)所述的指針組對(duì)所述的分片進(jìn)行重組和重疊檢查。
其中步驟a1所述的重組裝置判斷新的分片與已收到分片是否為相鄰分片具體為判斷所述的新的分片尾指針是否與所述的已收到分片的頭指針相鄰。
其中步驟a1所述的已收到分片為一個(gè)或者一個(gè)以上。
其中步驟a2還包括重組裝置依據(jù)合并后減少的分片數(shù)量相應(yīng)調(diào)整當(dāng)前分片數(shù)PtrCnt。
其中所述的分片在分片前的位置次序依據(jù)所述的IP報(bào)文的報(bào)文頭信息中的偏移量Offset確定。
本發(fā)明克服現(xiàn)有技術(shù)的不足,采用將相鄰分片合并為一個(gè)分片后只分配一組指針的方法有效的減少了指針數(shù)量,從而簡化了重組時(shí)重疊檢查時(shí)的運(yùn)算復(fù)雜度,提高處理效率,同時(shí)通過減少指針的數(shù)量還可以減少指針占用的存儲(chǔ)空間。


圖1為本發(fā)明實(shí)施例所述的將相鄰分片合并成一個(gè)分片的原理圖;圖2為本發(fā)明實(shí)施例所述的分片匹配的流程圖;圖3為本發(fā)明實(shí)施例所述的分片重組和重疊檢查的示意圖。
具體實(shí)施例方式
本發(fā)明的基本原理是在IP報(bào)文重組時(shí)將存儲(chǔ)在緩存區(qū)的相鄰分片合并成一個(gè)新的分片后分配一組指針,減少指針的數(shù)量并簡化重組時(shí)重疊檢查的運(yùn)算。
以下具體說明由于基于IP的隧道技術(shù)的匯聚設(shè)備都增加了部分封裝,導(dǎo)致報(bào)文長度很有可能超出以太網(wǎng)的長度限制,但是同時(shí)由于增加的封裝長度都不是很長,封裝后的以太網(wǎng)幀最大長度一般都在1500~1800Byte的范圍內(nèi),最多不超過2000Byte,按照以太網(wǎng)的MTU,分成兩片也就足夠了,但考慮到現(xiàn)網(wǎng)上有可能會(huì)有MTU為512字節(jié)的老式路由器存在,因此本發(fā)明實(shí)施例中以4個(gè)IP報(bào)文分片為例進(jìn)行說明。
由于本實(shí)施例中假設(shè)支持4個(gè)分片,長度在1500~1800Byte之內(nèi),首先,對(duì)于每個(gè)IP報(bào)文只要分配2048Byte(2的11次冪)的緩存空間。
按照現(xiàn)有技術(shù),在對(duì)分片后的IP報(bào)文重組時(shí),對(duì)于需要支持4個(gè)分片的情況,需要分配4組分片的指針,包括分片頭指針和分片尾指針,每組指針間要進(jìn)行合法性檢查,以防止惡意攻擊和報(bào)文丟失,主要檢查三種情況一種就是兩個(gè)分片有重疊部分,另一種情況就是報(bào)文中間總是有若干字節(jié)沒有收到,第三種情況就是最后一個(gè)分片之外的分片的凈荷長度不是8Byte的整數(shù)倍(這種情況是為了防止網(wǎng)絡(luò)上的惡意攻擊,正常情況是不會(huì)有這種報(bào)文的),由于Offset是以8Byte為單位,所以除了最后一個(gè)分片,其余分片的凈荷長度都應(yīng)該是8Byte整數(shù)倍,如果不是就不正確。檢查這些特殊情況時(shí),由于分片數(shù)目有4個(gè),各種組合情況就比較多,判斷就比較復(fù)雜。
由于4個(gè)分片是連續(xù)的,任意兩個(gè)相鄰的分片都可以合并為一個(gè)分片,而只使用一組指針,所以合并成兩個(gè)或三個(gè)分片時(shí),4個(gè)分片以內(nèi)的重組,只需要兩組分片指針就可以實(shí)現(xiàn),其原理如附圖1所示
其中A、B、C、D是按順序的四個(gè)分片,AB、BC、CD都可以合并為一個(gè)分片,從中可以推出ABC、BCD、ABCD也可以合并為一個(gè)分片,所以在任何時(shí)刻,一個(gè)合法的IP報(bào)文如果正確的分為4個(gè)分片,在重組時(shí),某一時(shí)刻最多存在兩個(gè)分片,如果出現(xiàn)第三個(gè)分片,必然是錯(cuò)的,就可以丟棄,也不需要第三組指針。
在進(jìn)行硬件實(shí)現(xiàn)時(shí),指針可以使用芯片內(nèi)部的寄存器或者存儲(chǔ)器存儲(chǔ),指針的單位為8Byte,2048Byte就需要8比特的指針地址;沒有簡化時(shí),需要4組指針,共計(jì)4(組)*2(個(gè)指針/組)*8(比特/指針)=64比特,簡化后只需要2組指針,就只需32比特存儲(chǔ),節(jié)省了一半的緩存空間。而每個(gè)IP幀都要有自己的指針組,假設(shè)系統(tǒng)要求同時(shí)支持8192個(gè)IP幀同時(shí)重組,就可以節(jié)省32*8192=262144比特的存儲(chǔ)空間。
在處理中需要根據(jù)Identification和SIP、DIP進(jìn)行連接檢查,以檢查該連接的報(bào)文是否已經(jīng)收到,并且需要以下幾個(gè)中間數(shù)據(jù)1)第一個(gè)分片頭指針F1HeadPtr,2)第一個(gè)分片尾指針F1TailPtr,3)第二個(gè)分片頭指針F2HeadPtr,4)第二個(gè)分片尾指針F2TailPtr;(注這些指針都是以8Byte為單位)5)當(dāng)前分片數(shù)PtrCnt;6)是否已收到尾分片TailArrive;7)該連接是否有效Valid;8)尾分片長度TailLength(0~7);9)分片數(shù)目FragCnt;10)表項(xiàng)是否已在使用Valid,11)當(dāng)前分片頭指針CurHeadPtr和CurTailPtr當(dāng)前分片尾指針。
所述的中間數(shù)據(jù)來自IP報(bào)文的報(bào)文頭信息,其中HeadPtr就是Offset,TailPtr就是Offset+[(Total Length-IHL*4)/8],”[]”表示取整)。
處理流程如下首先對(duì)IP報(bào)文進(jìn)行合法化檢查,檢查IP報(bào)文的Checksum(校驗(yàn)和)是否正確,長度是否合法等,同時(shí)判斷是否一個(gè)分片報(bào)文(即Offset不等于0或者Flags的Bit2=1,即后續(xù)還有分片,都是用來判斷的條件),如果是分片報(bào)文并且Offset*8+Total Length<2000Byte,就可以轉(zhuǎn)到第二部分的處理,并提取報(bào)文的Total Length、Flags、Offset以及IHL等值。
第二部分大致分以下兩個(gè)處理1、分片匹配處理,用來確定是否已經(jīng)收到該IP報(bào)文的其他分片;2、分片重組和重疊檢查,用來進(jìn)行報(bào)文的重組和報(bào)文正確性的檢查。
分片匹配處理的流程如附圖2所示將提取的Identification和SIP、DIP進(jìn)行處理(由于DIP一般為本機(jī),也可以簡化不使用DIP),獲取一個(gè)地址,判斷表項(xiàng)中的Valid域是否有效。
如果Valid域無效,則進(jìn)行以下操作1)設(shè)置Valid域有效,2)將F1HeadPtr設(shè)置為Fragment Offset,F(xiàn)2HeadPtr和F2TailPtr都設(shè)置為最大值,F(xiàn)1TailPtr設(shè)置為Offset+[(Total Length-IHL*4)/8],(注[]表示向下取整);3)PtrCnt設(shè)置為1;FragCnt設(shè)置為1;4)判斷該分片是否尾分片,如果是,則4.1放置TailArrive有效,設(shè)置TailLength=(Total Length-IHL*4)%8(注%表示取余);4.2)將該報(bào)文按照Offset存入緩存;如果不是尾分片,則進(jìn)行以下操作4.3)判斷當(dāng)前分片的凈荷長度是否為8Byte的整數(shù)倍,如果不是則4.3.1)丟棄該報(bào)文;如果是8Byte整數(shù)倍則
4.3.2)將該報(bào)文按照Offset存入緩存;如果Valid域有效則5)轉(zhuǎn)分片重組和重疊檢查。
分片重組和重疊檢查過程說明如下如附圖3所示當(dāng)最多只有兩個(gè)分片,已收到分片,再來一個(gè)分片時(shí),合理的組合情況就只有7種,其中第一列為當(dāng)前分片(新收到的分片),擁有CurHeadPtr和CurTailPtr;第二大列(+號(hào)和箭頭號(hào)之間的一列)為處理前指針信息(已經(jīng)收到的分片,可能已經(jīng)合并過);第三列為處理后的指針信息。A、B、C、D為按順序的分片,第二列和第三列中的A、B、C有可能是合并后的指針組。
其中情況(1)、(2)中分片D(D為與A分片、B分片都不相連的最后一個(gè)分片)對(duì)處理不產(chǎn)生影響,所以附圖3中雖然有D分片存在,但如果沒有,處理方式同附圖3中一樣。
除了附圖3中所示的7種組合情況之外,其余的情況都屬于不合理的情況,包括重疊、出現(xiàn)三個(gè)分片等。
對(duì)于情況(1),由于F1TailPtr+1=CurHeadPtr,說明這兩個(gè)分片相連,并且當(dāng)前分片在已有分片后面,將F1TailPtr設(shè)為當(dāng)前分片的尾指針。
對(duì)于情況(2),由于CurTailPtr+1=F1HeadPtr,說明這兩個(gè)分片相連,并且當(dāng)前分片在已有分片前面,將F1HeadPtr設(shè)為當(dāng)前分片的頭指針。
對(duì)于情況(3),由于CurTailPtr+1不等于F1HeadPtr,說明分片C和分片A不相鄰,將F2HeadPtr和F2TailPtr分別設(shè)為當(dāng)前分片的頭指針和尾指針,PtrCnt+1。
對(duì)于情況(4),由于CurTailPtr+1不等于F1HeadPtr,說明分片A和分片C不相鄰,將F2HeadPtr和F2TailPtr分別設(shè)為原來的F1HeadPtr和F1TailPtr,將F1HeadPtr和F1TailPtr分別設(shè)為當(dāng)前分片的頭指針和尾指針,PtrCnt+1。
對(duì)于情況(5),將F1TailPtr設(shè)為F2TailPtr,并將PtrCnt-1;由于F1TailPtr+1=CurHeadPtr,并且CurTailPtr+1=F2HeadPtr,說明這三個(gè)分片全部相連,可以連成一個(gè)分片。
對(duì)于情況(6),將F2HeadPtr設(shè)為當(dāng)前分片的頭指針;由于CurTailPtr+1=F2HeadPtr,并且F1TailPtr+1=CurHeadPtr,說明當(dāng)前分片與第二組分片相連,并且當(dāng)前分片在第二組分片之前,可以連成一個(gè)分片。
對(duì)于情況(7),將F2TailPtr設(shè)為當(dāng)前分片的尾指針;由于F2TailPtr+1=CurHeadPtr,說明當(dāng)前分片與第二組分片相連,并且當(dāng)前分片在第二組分片之后,可以連成一個(gè)分片。
當(dāng)尾分片已經(jīng)到達(dá)(TailArrive有效),并且首分片也已經(jīng)到達(dá)(F1HeadPtr=0),而且所有分片都能夠合并為一個(gè)分片(PtrCnt=1)時(shí),表示重組完成,這時(shí)就可以將緩存區(qū)中的報(bào)文發(fā)送出去。
同理,對(duì)于多于4個(gè)分片的情況也可以根據(jù)情況進(jìn)行合并,例如如果需要支持5~6個(gè)分片就需要3組指針,n(n>4)個(gè)分片可以采用n+1除以2后向下取整數(shù)指針組進(jìn)行簡易重組判斷來實(shí)現(xiàn)。
權(quán)利要求
1.一種IP報(bào)文分片重組的方法,其特征在于,所述的方法包括如下步驟a、重組裝置接收到IP報(bào)文新的分片后將其與已收到的分片中相鄰的分片合并;b、重組裝置對(duì)合并后的分片進(jìn)行重組和重疊檢查。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,其中步驟a之前還包括對(duì)IP報(bào)文進(jìn)行合法化檢查并將屬于同一個(gè)IP報(bào)文的分片依次存儲(chǔ)在緩存中。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,其中步驟b之后還包括當(dāng)首尾分片均已到達(dá)且所有分片都能夠合并為一個(gè)分片時(shí),重組完成,重組裝置將緩存區(qū)中的IP報(bào)文轉(zhuǎn)發(fā)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,其中步驟a具體包括a1、重組裝置判斷接收到IP報(bào)文新的分片與已收到的分片是否相鄰,如果不是,則依據(jù)所述分片在分片前的位置次序分別分配指針組,否則轉(zhuǎn)步驟a2;a2、重組裝置將所述的相鄰分片依據(jù)其在分片前的位置次序合并成一個(gè)分片后分配一組指針組;其中步驟b具體包括重組裝置根據(jù)所述的指針組對(duì)所述的分片進(jìn)行重組和重疊檢查。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,其中步驟a1所述的重組裝置判斷新的分片與已收到分片是否為相鄰分片具體為判斷所述的新的分片尾指針是否與所述的已收到分片的頭指針相鄰。
6.根據(jù)權(quán)利要求4所述的方法,其特征在于,其中步驟a1所述的已收到分片為一個(gè)或者一個(gè)以上。
7.根據(jù)權(quán)利要求4所述的方法,其特征在于,其中步驟a2還包括重組裝置依據(jù)合并后減少的分片數(shù)量相應(yīng)調(diào)整當(dāng)前分片數(shù)PtrCnt。
8.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述的分片在分片前的位置次序依據(jù)所述的IP報(bào)文的報(bào)文頭信息中的偏移量Offset確定。
全文摘要
本發(fā)明公開了一種IP報(bào)文分片重組的方法,所述的方法包括如下步驟a.重組裝置接收到IP報(bào)文新的分片后將其與已收到的分片中相鄰的分片合并;b.重組裝置對(duì)合并后的分片進(jìn)行重組和重疊檢查。本發(fā)明克服現(xiàn)有技術(shù)的不足,采用將相鄰分片合并為一個(gè)分片后只分配一組指針的方法有效的減少了指針數(shù)量,從而簡化了重組時(shí)重疊檢查時(shí)的運(yùn)算復(fù)雜度,提高了處理效率,同時(shí)通過減少指針的數(shù)量還可以減少指針占用的存儲(chǔ)空間。
文檔編號(hào)H04L29/06GK1859312SQ20061003504
公開日2006年11月8日 申請(qǐng)日期2006年4月12日 優(yōu)先權(quán)日2006年4月12日
發(fā)明者何軍 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
桂东县| 芦山县| 罗甸县| 旌德县| 陇西县| 阿拉尔市| 鄂尔多斯市| 琼结县| 穆棱市| 武义县| 科技| 南皮县| 秦安县| 伊川县| 彭泽县| 无锡市| 刚察县| 合肥市| 五家渠市| 鸡东县| 义乌市| 广宗县| 洱源县| 林口县| 奉新县| 东丰县| 平顶山市| 合阳县| 临邑县| 彭山县| 江孜县| 吉安市| 河池市| 婺源县| 巫山县| 同德县| 满城县| 新密市| 日土县| 郧西县| 新竹市|