CN100420238C - 一种ip报文分片重组的方法 - Google Patents
一种ip报文分片重组的方法 Download PDFInfo
- Publication number
- CN100420238C CN100420238C CNB2006100350462A CN200610035046A CN100420238C CN 100420238 C CN100420238 C CN 100420238C CN B2006100350462 A CNB2006100350462 A CN B2006100350462A CN 200610035046 A CN200610035046 A CN 200610035046A CN 100420238 C CN100420238 C CN 100420238C
- Authority
- CN
- China
- Prior art keywords
- burst
- message
- pointer
- message fragment
- reorganization
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种IP报文分片重组的方法,所述的方法包括如下步骤:a、重组装置接收到IP报文新的分片后将其与已收到的分片中相邻的分片合并;b、重组装置对合并后的分片进行重组和重叠检查。本发明克服现有技术的不足,采用将相邻分片合并为一个分片后只分配一组指针的方法有效的减少了指针数量,从而简化了重组时重叠检查时的运算复杂度,提高了处理效率,同时通过减少指针的数量还可以减少指针占用的存储空间。
Description
技术领域
本发明涉及IP报文分片重组技术领域,具体来说,涉及到IP报文重组时重叠检查技术。
背景技术
由于以太网络成本低、组网灵活以及可扩展性好,IP数据越来越多的承载在以太网上,但是由于以太网络对承载的净荷长度有1500Byte的上限,导致IP报文通过以太网时,长度过长的报文必须进行分片和重组。
IP报文的数据结构里定义了用于分片重组的数据域,IP报文头数据结构如下:
数据结构说明如下:
其中对分片重组起到关键作用的是Total Length、Identification、Flags和Fragment Offset这几个域。同一个IP报文进行分片操作时,Identification一直保持,即多个分片使用同一个ldentification,结合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报文分片进行合法性检查,并将通过合法性检查的IP报文分片存储在缓存中;
b、判断该新存储的IP报文分片与已存储的分片是否相邻,如果相邻,则将该新存储的IP报文分片与已存储的分片依据分片前的顺序合并成一个新的分片,分配一组指针,并依据该指针对新的分片进行重组;
如果不相邻,则依据该新存储的IP报文分片与已存储的分片依据分片前的顺序,分别分配指针;
c、判断首尾分片是否均已到达且所有分片都能够合并为一个分片,如果否,则执行步骤a。
其中步骤c还包括:
判断首尾分片是否均已到达且所有分片都能够合并为一个分片,
如果是,则将存储的IP报文分片转发。
其中依据指针对新的分片进行重组具体包括:
根据该指针对所述新的分片进行重组和重叠检查。
其中判读新存储的IP报文分片与已存储的分片是否相邻具体为:
判断该新存储的IP报文分片的尾指针是否与已存储的分片的头指针相邻。
其中已存储的分片为一个或者一个以上。
其中还包括:
依据合并后减少的分片数量相应调整当前的分片数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)分片数目FragCntr10)表项是否已在使用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,并且CuTailPtr+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 (7)
1. 一种IP报文分片重组的方法,其特征在于,所述的方法包括如下步骤:
a、对接收到的IP报文分片进行合法性检查,并存储通过合法性检查的IP报文分片;
b、判断该新存储的IP报文分片与已存储的分片是否相邻,如果相邻,则将所述新存储的IP报文分片与已存储的分片依据分片前的顺序合并成一个新的分片,分配一组指针,并依据所述指针对新的分片进行重组;
如果不相邻,则依据所述新存储的IP报文分片与已存储的分片依据分片前的顺序,分别分配指针;
c、判断首尾分片是否均已到达且所有分片都能够合并为一个分片,如果否,则执行步骤a。
2. 根据权利要求1所述的IP报文分片重组的方法,其特征在于,步骤c还包括:判断首尾分片是否均已到达且所有分片都能够合并为一个分片,如果是,则将存储的IP报文分片转发。
3. 根据权利要求1所述的IP报文分片重组的方法,其特征在于,所述依据所述指针对新的分片进行重组具体包括:根据所述的指针对所述新的分片进行重组和重叠检查。
4. 根据权利要求1所述的IP报文分片重组的方法,其特征在于,其中判读所述新存储的IP报文分片与已存储的分片是否相邻具体为:判断所述新存储的IP报文分片的尾指针是否与所述的已存储的分片的头指针相邻。
5. 根据权利要求1或4所述的IP报文分片重组的方法,其特征在于,其中所述的已存储的分片为一个或者一个以上。
6. 根据权利要求1所述的IP报文分片重组的方法,其特征在于,其中还包括:依据合并后减少的分片数量相应调整当前的分片数PtrCnt。
7. 根据权利要求1所述的IP报文分片重组的方法,其特征在于,所述的在分片前的位置次序依据所述的IP报文的报文头信息中的偏移量Offset确定。
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 CN1859312A (zh) | 2006-11-08 |
CN100420238C true 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 (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159694B (zh) * | 2007-11-16 | 2011-04-06 | 中兴通讯股份有限公司 | 一种ip共享的分布式系统避免分片重组失败的方法 |
Families Citing this family (6)
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报文合并和分拆的技术提高报文发送效率的方法 |
CN103533075B (zh) * | 2013-10-23 | 2017-05-03 | 中国科学院声学研究所 | 将数据导入iSCSI目标器的方法和iSCSI启动器 |
CN105610744B (zh) * | 2016-01-28 | 2018-10-23 | 东南大学 | 一种ip报文分片与重组方法及装置 |
CN110554852B (zh) * | 2018-05-31 | 2021-11-12 | 赛灵思公司 | 数据拼接结构、方法及其片上实现 |
CN110300074B (zh) * | 2019-06-06 | 2021-08-06 | 北京左江科技股份有限公司 | 一种ip报文分片重组方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1494274A (zh) * | 2002-10-31 | 2004-05-05 | ����ͨѶ�ɷ�����˾ | 基于网络处理器实现ip报文分片重组的方法 |
CN1509025A (zh) * | 2002-12-18 | 2004-06-30 | ��Ϊ��������˾ | 一种实现报文分片组包的方法 |
CN1581793A (zh) * | 2003-08-05 | 2005-02-16 | 华为技术有限公司 | 因特网协议(ip)包进行重组的装置和方法 |
CN1585381A (zh) * | 2004-05-25 | 2005-02-23 | 中兴通讯股份有限公司 | 在网络地址端口映射中高速处理tcp/ip分片包的方法 |
CN1592215A (zh) * | 2003-08-27 | 2005-03-09 | 中兴通讯股份有限公司 | 一种对分片式报文重组和业务分配的方法 |
CN1713637A (zh) * | 2004-06-27 | 2005-12-28 | 华为技术有限公司 | 一种分片报文的重组方法 |
-
2006
- 2006-04-12 CN CNB2006100350462A patent/CN100420238C/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1494274A (zh) * | 2002-10-31 | 2004-05-05 | ����ͨѶ�ɷ�����˾ | 基于网络处理器实现ip报文分片重组的方法 |
CN1509025A (zh) * | 2002-12-18 | 2004-06-30 | ��Ϊ��������˾ | 一种实现报文分片组包的方法 |
CN1581793A (zh) * | 2003-08-05 | 2005-02-16 | 华为技术有限公司 | 因特网协议(ip)包进行重组的装置和方法 |
CN1592215A (zh) * | 2003-08-27 | 2005-03-09 | 中兴通讯股份有限公司 | 一种对分片式报文重组和业务分配的方法 |
CN1585381A (zh) * | 2004-05-25 | 2005-02-23 | 中兴通讯股份有限公司 | 在网络地址端口映射中高速处理tcp/ip分片包的方法 |
CN1713637A (zh) * | 2004-06-27 | 2005-12-28 | 华为技术有限公司 | 一种分片报文的重组方法 |
Non-Patent Citations (2)
Title |
---|
"基于Ipv4的分片子层及其分片改进算法". 孙琨.南开大学硕士学位论文. 2000 |
"基于Ipv4的分片子层及其分片改进算法". 孙琨.南开大学硕士学位论文. 2000 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159694B (zh) * | 2007-11-16 | 2011-04-06 | 中兴通讯股份有限公司 | 一种ip共享的分布式系统避免分片重组失败的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1859312A (zh) | 2006-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100420238C (zh) | 一种ip报文分片重组的方法 | |
EP0758824B1 (en) | Compact, adaptable, bridging/routing switch | |
US6553031B1 (en) | Communication node apparatus with routing tables in cache memories | |
US7027443B2 (en) | Reassembly engines for multilink applications | |
US7284181B1 (en) | Systems and methods for implementing end-to-end checksum | |
US9817773B2 (en) | System and method for preserving order of data processed by processing engines | |
US7123616B2 (en) | Determining round-trip time delay | |
US7773599B1 (en) | Packet fragment handling | |
EP0905938B1 (en) | Hardware checksum assist for network protocol stacks | |
US7936758B2 (en) | Logical separation and accessing of descriptor memories | |
US8462804B2 (en) | Self-cleaning mechanism for error recovery | |
US8135036B2 (en) | Unified data packet for encapsulating data packets having diverse formats | |
CN106230744A (zh) | 一种数据流乱序重组的方法及转发设备 | |
US6424632B1 (en) | Method and apparatus for testing packet data integrity using data check field | |
CN103001827A (zh) | 基于万兆网卡的以太网包检验和fpga硬件校验方法 | |
US8099515B2 (en) | Context switched route look up key engine | |
US6483840B1 (en) | High speed TCP/IP stack in silicon | |
US20080170571A1 (en) | Method and System for Synchronous Page Addressing in a Data Packet Switch | |
US7936759B2 (en) | Systems and methods for routing data in a network device | |
US6549540B1 (en) | Method and apparatus for bundling serial data transmission links to obtain increased data throughput | |
US20100329262A1 (en) | System and Method for Parsing Frames | |
US7272675B1 (en) | First-in-first-out (FIFO) memory for buffering packet fragments through use of read and write pointers incremented by a unit access and a fraction of the unit access | |
US7337371B2 (en) | Method and apparatus to handle parity errors in flow control channels | |
JP2798141B2 (ja) | Atmネットワークにおけるセルエラー訂正方式 | |
US7352751B2 (en) | Accounting for link utilization in scheduling and billing |
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 |