国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種ip報文分片重組的方法

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

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


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

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


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