CN1859312A - 一种ip报文分片重组的方法 - Google Patents

一种ip报文分片重组的方法 Download PDF

Info

Publication number
CN1859312A
CN1859312A CNA2006100350462A CN200610035046A CN1859312A CN 1859312 A CN1859312 A CN 1859312A CN A2006100350462 A CNA2006100350462 A CN A2006100350462A CN 200610035046 A CN200610035046 A CN 200610035046A CN 1859312 A CN1859312 A CN 1859312A
Authority
CN
China
Prior art keywords
burst
message
pointer
reconstruction unit
adjacent
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2006100350462A
Other languages
English (en)
Other versions
CN100420238C (zh
Inventor
何军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CNB2006100350462A priority Critical patent/CN100420238C/zh
Publication of CN1859312A publication Critical patent/CN1859312A/zh
Application granted granted Critical
Publication of CN100420238C publication Critical patent/CN100420238C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种IP报文分片重组的方法,所述的方法包括如下步骤:a.重组装置接收到IP报文新的分片后将其与已收到的分片中相邻的分片合并;b.重组装置对合并后的分片进行重组和重叠检查。本发明克服现有技术的不足,采用将相邻分片合并为一个分片后只分配一组指针的方法有效的减少了指针数量,从而简化了重组时重叠检查时的运算复杂度,提高了处理效率,同时通过减少指针的数量还可以减少指针占用的存储空间。

Description

一种IP报文分片重组的方法
技术领域
本发明涉及IP报文分片重组技术领域,具体来说,涉及到IP报文重组时重叠检查技术。
背景技术
由于以太网络成本低、组网灵活以及可扩展性好,IP数据越来越多的承载在以太网上,但是由于以太网络对承载的净荷长度有1500Byte的上限,导致IP报文通过以太网时,长度过长的报文必须进行分片和重组。
IP报文的数据结构里定义了用于分片重组的数据域,IP报文头数据结构如下:
IP   31   30   29   28   27   26   25   24   23   22   21   20   19   18   17   16   15   14   13   12   11   10   9   8   7   6   5   4   3   2   1   0
      Version=4           IHL                       TOS                                             Total Length
                                   Identification   Flags   Fragment Offset
  TTL   Protoco                                        Header Checksum
                                                                             SIP
                                                                             DIP
                                                                             Option
数据结构说明如下:
信号名   位宽(bits) 描述
  Version   4   IP版本,
  IHL   4   IP头长度(以4byte为单位),必须大于等于5
  TOS   8   IP服务类型
  Total Length 16   当前IP包总长度(以byte为单位),包括IP头和IP payload,必须在46Byte-1500Byte之间
  Identification   16   IP分片标识
  Flags 3   IP控制标志,Bit0保留,Bit1-DF必须为0,Bit2-MF:0-Last,1-More
  FragmentOffset   13   IP片偏移,以8Byte为单位
  TTL   8   生命时间
  Protocol   8   IP负载的协议
  HeaderChecksum   16   IP头checksum,按照协议标准进行校验
  SIP   32   源IP地址
  DIP   32   目的IP地址
其中对分片重组起到关键作用的是Total Length、Identification、Flags和Fragment Offset这几个域。同一个IP报文进行分片操作时,Identification一直保持,即多个分片使用同一个Identification,结合SIP(源IP地址)和DIP(目的IP地址)可以准确识别哪些报文是同一个IP报文;Flags和Fragment Offset结合使用,进行分片时,DF(Don’t Fragment)比特设置为0,表示可以进行分片,这时如果Flags中的bit2的值为1,则表示当前IP报文是一个IP包的其中一段分片,并且不是最后一个分片,这时结合FragmentOffset域继续判断;如果Flags的Bit2为1而Fragment Offset=0,表示该IP报文为第一个分片,而且后续有分片;如果Flags的Bit2为1而FragmentOffset不是0,表示该IP报文为中间的一个分片;如果Flags的Bit2为0而Fragment Offset不是0,表示该报文是最后一个分片。
重组设备根据Fragment Offset和IP Total Length以及IHL进行拼接重组,用IP Total Length减去IHL*4获得当前净荷长度,然后根据FragmentOffset*8获得当前净荷第一个字节所在位置,然后存入相应的位置,所有的分片都到达后就可以进行完成重组。
IP报文的分片一般在用户终端设备以及MTU(最大传输单元)比较小的中间路由设备进行操作,但IP报文的重组基本上都在用户终端设备,即DIP所属设备进行,对单一的终端设备而言,流量不大,处理所需性能不高;但随着L2TP等隧道技术出现,用户报文会在某个汇聚点封装上L2TP等IP类封装,这时,由于增加了封装头,封装后的报文就很容易长度超过以太网的长度限制,就必须进行IP报文的分片。
现有技术采用支持任意多个分片的重组拼接方式,先是申请一个较大的缓存,例如为了能够支持IP报文65535字节的最大长度,需要申请65536Byte的缓存区,然后根据IP Total Length、IHL以及Fragment Offset进行拼接。
如上所述,现有技术方案需要申请较大的缓存,当连接较多时,就需要海量的存储空间;同时因为要进行防攻击以及错包检查,由于分片数很大,算法也相应复杂,一般采用软件实现,处理性能也受到限制,往往成为瓶颈。
发明内容
本发明的目的在于提供一种IP报文分片重组的方法,以解决现有的IP报文分片重组时处理过于复杂并且表项指针占用的存储空间过大的问题。
为实现上述目的,本发明采用如下的技术方案:一种IP报文分片重组的方法,所述的方法包括如下步骤:
a、重组装置接收到IP报文新的分片后将其与已收到的分片中相邻的分片合并;
b、重组装置对合并后的分片进行重组和重叠检查。
其中步骤a之前还包括:
对IP报文进行合法化检查并将属于同一个IP报文的分片依次存储在缓存中。
其中步骤b之后还包括:
当首尾分片均已到达且所有分片都能够合并为一个分片时,重组完成,重组装置将缓存区中的IP报文转发。
其中步骤a具体包括:
a1、重组装置判断接收到IP报文新的分片与已收到的分片是否相邻,如果不是,则依据所述分片在分片前的位置次序分别分配指针组,否则转步骤a2;
a2、重组装置将所述的相邻分片依据其在分片前的位置次序合并成一个分片后分配一组指针组;
其中步骤b具体包括:
重组装置根据所述的指针组对所述的分片进行重组和重叠检查。
其中步骤a1所述的重组装置判断新的分片与已收到分片是否为相邻分片具体为:判断所述的新的分片尾指针是否与所述的已收到分片的头指针相邻。
其中步骤a1所述的已收到分片为一个或者一个以上。
其中步骤a2还包括:重组装置依据合并后减少的分片数量相应调整当前分片数PtrCnt。
其中所述的分片在分片前的位置次序依据所述的IP报文的报文头信息中的偏移量Offset确定。
本发明克服现有技术的不足,采用将相邻分片合并为一个分片后只分配一组指针的方法有效的减少了指针数量,从而简化了重组时重叠检查时的运算复杂度,提高处理效率,同时通过减少指针的数量还可以减少指针占用的存储空间。
附图说明
图1为本发明实施例所述的将相邻分片合并成一个分片的原理图;
图2为本发明实施例所述的分片匹配的流程图;
图3为本发明实施例所述的分片重组和重叠检查的示意图。
具体实施方式
本发明的基本原理是在IP报文重组时将存储在缓存区的相邻分片合并成一个新的分片后分配一组指针,减少指针的数量并简化重组时重叠检查的运算。
以下具体说明:
由于基于IP的隧道技术的汇聚设备都增加了部分封装,导致报文长度很有可能超出以太网的长度限制,但是同时由于增加的封装长度都不是很长,封装后的以太网帧最大长度一般都在1500~1800Byte的范围内,最多不超过2000Byte,按照以太网的MTU,分成两片也就足够了,但考虑到现网上有可能会有MTU为512字节的老式路由器存在,因此本发明实施例中以4个IP报文分片为例进行说明。
由于本实施例中假设支持4个分片,长度在1500~1800Byte之内,首先,对于每个IP报文只要分配2048Byte(2的11次幂)的缓存空间。
按照现有技术,在对分片后的IP报文重组时,对于需要支持4个分片的情况,需要分配4组分片的指针,包括分片头指针和分片尾指针,每组指针间要进行合法性检查,以防止恶意攻击和报文丢失,主要检查三种情况:一种就是两个分片有重叠部分,另一种情况就是报文中间总是有若干字节没有收到,第三种情况就是最后一个分片之外的分片的净荷长度不是8Byte的整数倍(这种情况是为了防止网络上的恶意攻击,正常情况是不会有这种报文的),由于Offset是以8Byte为单位,所以除了最后一个分片,其余分片的净荷长度都应该是8Byte整数倍,如果不是就不正确。检查这些特殊情况时,由于分片数目有4个,各种组合情况就比较多,判断就比较复杂。
由于4个分片是连续的,任意两个相邻的分片都可以合并为一个分片,而只使用一组指针,所以合并成两个或三个分片时,4个分片以内的重组,只需要两组分片指针就可以实现,其原理如附图1所示:
其中A、B、C、D是按顺序的四个分片,AB、BC、CD都可以合并为一个分片,从中可以推出ABC、BCD、ABCD也可以合并为一个分片,所以在任何时刻,一个合法的IP报文如果正确的分为4个分片,在重组时,某一时刻最多存在两个分片,如果出现第三个分片,必然是错的,就可以丢弃,也不需要第三组指针。
在进行硬件实现时,指针可以使用芯片内部的寄存器或者存储器存储,指针的单位为8Byte,2048Byte就需要8比特的指针地址;没有简化时,需要4组指针,共计4(组)*2(个指针/组)*8(比特/指针)=64比特,简化后只需要2组指针,就只需32比特存储,节省了一半的缓存空间。而每个IP帧都要有自己的指针组,假设系统要求同时支持8192个IP帧同时重组,就可以节省32*8192=262144比特的存储空间。
在处理中需要根据Identification和SIP、DIP进行连接检查,以检查该连接的报文是否已经收到,并且需要以下几个中间数据:1)第一个分片头指针F1HeadPtr,2)第一个分片尾指针F1TailPtr,3)第二个分片头指针F2HeadPtr,4)第二个分片尾指针F2TailPtr;(注:这些指针都是以8Byte为单位)5)当前分片数PtrCnt;6)是否已收到尾分片TailArrive;7)该连接是否有效Valid;8)尾分片长度TailLength(0~7);9)分片数目FragCnt;10)表项是否已在使用Valid,11)当前分片头指针CurHeadPtr和CurTailPtr当前分片尾指针。
所述的中间数据来自IP报文的报文头信息,其中HeadPtr就是Offset,TailPtr就是Offset+[(Total Length-IHL*4)/8],”[]”表示取整)。
处理流程如下:
首先对IP报文进行合法化检查,检查IP报文的Checksum(校验和)是否正确,长度是否合法等,同时判断是否一个分片报文(即Offset不等于0或者Flags的Bit2=1,即后续还有分片,都是用来判断的条件),如果是分片报文并且Offset*8+Total Length<2000Byte,就可以转到第二部分的处理,并提取报文的Total Length、Flags、Offset以及IHL等值。
第二部分大致分以下两个处理:
1、分片匹配处理,用来确定是否已经收到该IP报文的其他分片;
2、分片重组和重叠检查,用来进行报文的重组和报文正确性的检查。
分片匹配处理的流程如附图2所示:
将提取的Identification和SIP、DIP进行处理(由于DIP一般为本机,也可以简化不使用DIP),获取一个地址,判断表项中的Valid域是否有效。
如果Valid域无效,则进行以下操作:
1)设置Valid域有效,
2)将F1HeadPtr设置为Fragment Offset,F2HeadPtr和F2TailPtr都设置为最大值,F1TailPtr设置为Offset+[(Total Length-IHL*4)/8],(注:[]表示向下取整);
3)PtrCnt设置为1;FragCnt设置为1;
4)判断该分片是否尾分片,如果是,则
4.1放置TailArrive有效,设置TailLength=(Total Length-IHL*4)%8(注:%表示取余);
4.2)将该报文按照Offset存入缓存;
如果不是尾分片,则进行以下操作:
4.3)判断当前分片的净荷长度是否为8Byte的整数倍,如果不是则
4.3.1)丢弃该报文;
如果是8Byte整数倍则
4.3.2)将该报文按照Offset存入缓存;
如果Valid域有效则
5)转分片重组和重叠检查。
分片重组和重叠检查过程说明如下:
如附图3所示:当最多只有两个分片,已收到分片,再来一个分片时,合理的组合情况就只有7种,其中第一列为当前分片(新收到的分片),拥有CurHeadPtr和CurTailPtr;第二大列(+号和箭头号之间的一列)为处理前指针信息(已经收到的分片,可能已经合并过);第三列为处理后的指针信息。A、B、C、D为按顺序的分片,第二列和第三列中的A、B、C有可能是合并后的指针组。
其中情况(1)、(2)中分片D(D为与A分片、B分片都不相连的最后一个分片)对处理不产生影响,所以附图3中虽然有D分片存在,但如果没有,处理方式同附图3中一样。
除了附图3中所示的7种组合情况之外,其余的情况都属于不合理的情况,包括重叠、出现三个分片等。
对于情况(1),由于F1TailPtr+1=CurHeadPtr,说明这两个分片相连,并且当前分片在已有分片后面,将F1TailPtr设为当前分片的尾指针。
对于情况(2),由于CurTailPtr+1=F1HeadPtr,说明这两个分片相连,并且当前分片在已有分片前面,将F1HeadPtr设为当前分片的头指针。
对于情况(3),由于CurTailPtr+1不等于F1HeadPtr,说明分片C和分片A不相邻,将F2HeadPtr和F2TailPtr分别设为当前分片的头指针和尾指针,PtrCnt+1。
对于情况(4),由于CurTailPtr+1不等于F1HeadPtr,说明分片A和分片C不相邻,将F2HeadPtr和F2TailPtr分别设为原来的F1HeadPtr和F1TailPtr,将F1HeadPtr和F1TailPtr分别设为当前分片的头指针和尾指针,PtrCnt+1。
对于情况(5),将F1TailPtr设为F2TailPtr,并将PtrCnt-1;由于F1TailPtr+1=CurHeadPtr,并且CurTailPtr+1=F2HeadPtr,说明这三个分片全部相连,可以连成一个分片。
对于情况(6),将F2HeadPtr设为当前分片的头指针;由于CurTailPtr+1=F2HeadPtr,并且F1TailPtr+1=CurHeadPtr,说明当前分片与第二组分片相连,并且当前分片在第二组分片之前,可以连成一个分片。
对于情况(7),将F2TailPtr设为当前分片的尾指针;由于F2TailPtr+1=CurHeadPtr,说明当前分片与第二组分片相连,并且当前分片在第二组分片之后,可以连成一个分片。
当尾分片已经到达(TailArrive有效),并且首分片也已经到达(F1HeadPtr=0),而且所有分片都能够合并为一个分片(PtrCnt=1)时,表示重组完成,这时就可以将缓存区中的报文发送出去。
同理,对于多于4个分片的情况也可以根据情况进行合并,例如如果需要支持5~6个分片就需要3组指针,n(n>4)个分片可以采用n+1除以2后向下取整数指针组进行简易重组判断来实现。

Claims (8)

1、一种IP报文分片重组的方法,其特征在于,所述的方法包括如下步骤:
a、重组装置接收到IP报文新的分片后将其与已收到的分片中相邻的分片合并;
b、重组装置对合并后的分片进行重组和重叠检查。
2、根据权利要求1所述的方法,其特征在于,其中步骤a之前还包括:
对IP报文进行合法化检查并将属于同一个IP报文的分片依次存储在缓存中。
3、根据权利要求1所述的方法,其特征在于,其中步骤b之后还包括:
当首尾分片均已到达且所有分片都能够合并为一个分片时,重组完成,重组装置将缓存区中的IP报文转发。
4、根据权利要求1所述的方法,其特征在于,其中步骤a具体包括:
a1、重组装置判断接收到IP报文新的分片与已收到的分片是否相邻,如果不是,则依据所述分片在分片前的位置次序分别分配指针组,否则转步骤a2;
a2、重组装置将所述的相邻分片依据其在分片前的位置次序合并成一个分片后分配一组指针组;
其中步骤b具体包括:
重组装置根据所述的指针组对所述的分片进行重组和重叠检查。
5、根据权利要求4所述的方法,其特征在于,其中步骤a1所述的重组装置判断新的分片与已收到分片是否为相邻分片具体为:判断所述的新的分片尾指针是否与所述的已收到分片的头指针相邻。
6、根据权利要求4所述的方法,其特征在于,其中步骤a1所述的已收到分片为一个或者一个以上。
7、根据权利要求4所述的方法,其特征在于,其中步骤a2还包括:重组装置依据合并后减少的分片数量相应调整当前分片数PtrCnt。
8、根据权利要求4所述的方法,其特征在于,所述的分片在分片前的位置次序依据所述的IP报文的报文头信息中的偏移量Offset确定。
CNB2006100350462A 2006-04-12 2006-04-12 一种ip报文分片重组的方法 Expired - Fee Related CN100420238C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006100350462A CN100420238C (zh) 2006-04-12 2006-04-12 一种ip报文分片重组的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006100350462A CN100420238C (zh) 2006-04-12 2006-04-12 一种ip报文分片重组的方法

Publications (2)

Publication Number Publication Date
CN1859312A true CN1859312A (zh) 2006-11-08
CN100420238C CN100420238C (zh) 2008-09-17

Family

ID=37298176

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006100350462A Expired - Fee Related CN100420238C (zh) 2006-04-12 2006-04-12 一种ip报文分片重组的方法

Country Status (1)

Country Link
CN (1) CN100420238C (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102055498A (zh) * 2009-11-11 2011-05-11 英业达股份有限公司 移动通讯装置的遥控方法
CN103379046A (zh) * 2012-04-20 2013-10-30 唐漫宇 Ip报文合并和分拆的技术提高报文发送效率的方法
CN103533075A (zh) * 2013-10-23 2014-01-22 中国科学院声学研究所 将数据导入iSCSI目标器的方法和iSCSI启动器
CN105610744A (zh) * 2016-01-28 2016-05-25 东南大学 一种ip报文分片与重组方法及装置
CN110300074A (zh) * 2019-06-06 2019-10-01 北京左江科技股份有限公司 一种ip报文分片重组方法
CN110554852A (zh) * 2018-05-31 2019-12-10 赛灵思公司 数据拼接结构、方法及其片上实现

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101159694B (zh) * 2007-11-16 2011-04-06 中兴通讯股份有限公司 一种ip共享的分布式系统避免分片重组失败的方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100338923C (zh) * 2002-10-31 2007-09-19 中兴通讯股份有限公司 基于网络处理器实现ip报文分片重组的方法
CN1268097C (zh) * 2002-12-18 2006-08-02 华为技术有限公司 一种实现报文分片组包的方法
CN100502297C (zh) * 2003-08-05 2009-06-17 华为技术有限公司 因特网协议(ip)包进行重组的装置和方法
CN100499480C (zh) * 2003-08-27 2009-06-10 中兴通讯股份有限公司 一种对分片式报文重组和业务分配的方法
CN1287571C (zh) * 2004-05-25 2006-11-29 中兴通讯股份有限公司 在网络地址端口映射中高速处理tcp/ip分片包的方法
CN100502391C (zh) * 2004-06-27 2009-06-17 华为技术有限公司 一种分片报文的重组方法

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102055498A (zh) * 2009-11-11 2011-05-11 英业达股份有限公司 移动通讯装置的遥控方法
CN103379046A (zh) * 2012-04-20 2013-10-30 唐漫宇 Ip报文合并和分拆的技术提高报文发送效率的方法
CN103533075A (zh) * 2013-10-23 2014-01-22 中国科学院声学研究所 将数据导入iSCSI目标器的方法和iSCSI启动器
CN103533075B (zh) * 2013-10-23 2017-05-03 中国科学院声学研究所 将数据导入iSCSI目标器的方法和iSCSI启动器
CN105610744A (zh) * 2016-01-28 2016-05-25 东南大学 一种ip报文分片与重组方法及装置
CN105610744B (zh) * 2016-01-28 2018-10-23 东南大学 一种ip报文分片与重组方法及装置
CN110554852A (zh) * 2018-05-31 2019-12-10 赛灵思公司 数据拼接结构、方法及其片上实现
CN110554852B (zh) * 2018-05-31 2021-11-12 赛灵思公司 数据拼接结构、方法及其片上实现
CN110300074A (zh) * 2019-06-06 2019-10-01 北京左江科技股份有限公司 一种ip报文分片重组方法
CN110300074B (zh) * 2019-06-06 2021-08-06 北京左江科技股份有限公司 一种ip报文分片重组方法

Also Published As

Publication number Publication date
CN100420238C (zh) 2008-09-17

Similar Documents

Publication Publication Date Title
CN1859312A (zh) 一种ip报文分片重组的方法
EP2353017B1 (en) Packet aggregation and fragmentation at layer-2 over a managed network
US7203194B2 (en) Method and system for encoding wide striped cells
US6697368B2 (en) High-performance network switch
US7356030B2 (en) Network switch cross point
US7512127B2 (en) Backplane interface adapter
US20030039250A1 (en) Reassembly engines for multilink applications
CN1260915C (zh) 一种城域网传输设备的流量控制方法
CN103618673A (zh) 一种保障服务质量的片上网络路由方法
CN1514622A (zh) 互连带有异构结构的网络处理器
CN1816042A (zh) 一种处理器间数据传输方法
CN101035033A (zh) 支持远程报文镜像的报文镜像方法和网络设备
CN1263262C (zh) 用于处理带宽分配消息的系统和方法
US9853920B2 (en) Systems and methods for performing packet reorder processing
CN1921440A (zh) 检测路径最大传输单元的方法和系统
CN1362820A (zh) 在路由设备中为分组选择路由的方法
CN1179049A (zh) 在异步转移模式链路上发送异步转移模式单元的方法和系统
CN103944880B (zh) 一种ZigBee数据传输的方法
CN1863141A (zh) 一种ip分片报文传输处理方法
CN1859308A (zh) 一种ip报文重组的方法
CN101051957A (zh) 链路状态以及捆绑链路状态动态调整方法和装置
CN1859417A (zh) 一种多台网络设备链路聚集的实现方法
CN1248465C (zh) 网络通信中数据发送/接收缓冲区的管理方法
CN1271833C (zh) 无需ip重组分发分组的装置和方法
KR102266603B1 (ko) 플렉시블 이더넷 프로토콜에서 트래픽 플로우를 전달하는 방법, 장치 및 시스템

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080917

Termination date: 20150412

EXPY Termination of patent right or utility model