TCPIP协议中分包与重组原理介绍
引⾔
分⽚是分组交换的思想体现,也是IP协议解决的两个主要问题之⼀。在IP协议中的分⽚算法主要解决不同物理⽹络最⼤传输单元(MTU) 的不同造成的传输问题。但是分组在传输过程中不断地分⽚和重组会带来很⼤的⼯作量还会增加⼀些不安全的因素。我们将在这篇⼩论⽂中讨论IP分⽚的原因、原理、实现以及引起的安全问题。
⼀、什么是IP分⽚
IP分⽚是⽹络上传输IP报⽂的⼀种技术⼿段。IP协议在传输数据包时,将数据报⽂分为若⼲分⽚进⾏传输,并在⽬标系统中进⾏重组。这⼀过程称为分⽚(fragmentation)。
⼆、为什么要进⾏IP分⽚
每⼀种物理⽹络都会规定链路层数据帧的最⼤长度,称为链路层MTU(Maximum Transmission Unit).IP协议在传输数据包时,若IP数据报加上数据帧头部后长度⼤于MTU,则将数据报⽂分为若⼲分⽚进⾏传输,并在⽬标系统中进⾏重组。⽐如说,在以太⽹环境中可传输最⼤IP报⽂⼤⼩(MTU)为1500字节。如果要传输的数据帧⼤⼩超过1500字节,即IP数据报长度⼤于1472(1500-20-8=1472,普通数据报)字节,
则需要分⽚之后进⾏传输。
三、IP分⽚原理及分析
分⽚和重新组装的过程对传输层是透明的,其原因是当IP数据报进⾏分⽚之后,只有当它到达⽬的站时,才可进⾏重新组装,且它是由⽬的端的IP层来完成的。分⽚之后的数据报根据需要也可以再次进⾏分⽚。tcpip协议pdf
IP分⽚和完整IP报⽂差不多拥有相同的IP头,ID域对于每个分⽚都是⼀致的,这样才能在重新组装的时候识别出来⾃同⼀个IP报⽂的分⽚。在IP头⾥⾯,16位识别号唯⼀记录了⼀个IP包的ID,具有同⼀个ID的IP分⽚将会重新组装;⽽13位⽚偏移则记录了某IP⽚相对整个包的位置;⽽这两个表中间的3位标志则标志着该分⽚后⾯是否还有新的分⽚。这三个标志就组成了IP分⽚的所有信息(将在后⾯介绍),接受⽅就可以利⽤这些信息对IP数据进⾏重新组织。
1、标志字段的作⽤
标志字段在分⽚数据报中起了很⼤作⽤,在数据报分⽚时把它的值复制到每⽚中的标志字段的其中⼀个⽐特称作“不分⽚”位,⽤其中⼀个⽐特来表⽰“更多的⽚”。除了最后⼀⽚外,其他每个组成数据报的⽚都要把该⽐特置1。⽚偏移字段指的是该⽚偏移原始数据报开始处的位置。另外,当数据报被分⽚后,
每个⽚的总长度值要改为该⽚的长度值。如果将标志字段的⽐特置1,则IP将不对数据报进⾏分⽚,若在某个中间路由器上需要对其分⽚,则仅仅把数据报丢弃并发送⼀个ICMP不可达差错报⽂给源主机。如果不是特殊需要,则不应该置1;最右⽐特置1表⽰该报⽂不是最后⼀个IP分⽚。故意发送部分IP分⽚⽽不是全部,则会导致⽬标主机总是等待分⽚消耗并占⽤系统资源。某些分⽚风暴攻击就是这种原理。这⾥以以太⽹为例,由于以太⽹传输电⽓⽅⾯的限制,每个以太⽹帧都有最⼩的⼤⼩64bytes最⼤不能超过
1518bytes,抛去以太⽹帧的帧头(DMAC⽬的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC 校验部分4Bytes,那么剩下承载上层协议的地⽅也就是Data域最⼤就只能有1500Bytes,这就是前⾯所说的MTU的值。这个也是⽹络层协议⾮常关⼼的地⽅,因为⽹络层的IP协议会根据这个值来决定是否把上层传达下来的数据进⾏分⽚。就好⽐⼀个盒⼦没法装下⼀⼤块⾯包,我们需要把⾯包切成⽚,装在多个盒⼦⾥⾯⼀样的道理。
下⾯是标志位在IP⾸部中的格式以及各个标志的意义:
Identification R DF MF Fragment Offset
R:保留未⽤;DF:Don’t Fragment,“不分⽚”位,如果将这⼀⽐特置1,IP 层将不对数据报进⾏分⽚;MF:More Fragment,“更多的⽚”,除了最后⼀⽚外,其它每个组成数据报的⽚都要把⽐特置1;Fragm
ent Offset:该⽚偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。
2、MTU原理
  当两台远程PC需要通信的时候,它们的数据需要穿过很多的路由器和各种各样的⽹络媒介才能到达对端,⽹络中不同媒介的MTU各不相同,就好⽐⼀长段的⽔管,由不同粗细的⽔管组成(MTU不同)通过这段⽔管最⼤⽔量就要由中间最细的⽔管决定。
对于⽹络层的上层协议⽽⾔(这⾥以TCP/IP协议族为例)它们对“⽔管”粗细不在意,它们认为这个是⽹络层的事情。⽹络层IP协议会检查每个从上层协议下来的数据包的⼤⼩,并根据本机MTU的⼤⼩决定是否作“分⽚”处理。分⽚最⼤的坏处就是降低了传输性能,本来⼀次可以搞定的事情,分成多次搞定,所以在⽹络层更⾼⼀层(就是传输层) 的实现中往往会对此加以注意!有些⾼层因为某些原因就会要求我这个⾯包不能切⽚,我要完整地⾯包,所以会在IP数据包包头⾥⾯加上⼀个标签:DF(Don‘t Fragment)。这样当这个IP数据包在⼀⼤段⽹络(⽔管⾥⾯)传输的时候,如果遇到MTU⼩于IP数据包的情况,转发设备就会根据要求丢弃这个数据包。然后返回⼀个错误信息给发送者。这样往往会造成某些通讯上的问题,不过幸运的是⼤部分⽹络链路MTU都是1500或者⼤于1500(仅X.25⽹络的576和点对点⽹络的296⼩于1500)。
对于UDP协议⽽⾔,这个协议本⾝是⽆连接的协议,对数据包的到达顺序以及是否正确到达并不关⼼,
所以⼀般UDP应⽤对分⽚没有特殊要求。
对于TCP协议⽽⾔就不⼀样了,这个协议是⾯向连接的协议,对于TCP协议⽽⾔它⾮常在意数据包的到达顺序以及是否传输中有错误发⽣。所以有些TCP应⽤对分⽚有要求---不能分⽚(DF)。
3、MSS的原理
  MSS(Maxmum Sigmentation Size)就是TCP数据包每次能够传输的最⼤数据分段。为了达到最佳的传输效能TCP协议在建⽴连接的时候通常要协商双⽅的MSS值,这个值TCP协议在实现的时候往往⽤MTU值代替(需要减去IP数据包包头的⼤⼩20字节和TCP数据段的包头20字节)所以往往MSS为1460。通讯双⽅会根据双⽅提供的MSS值的最⼩值确定为这次连接的最⼤MSS值。
当IP数据报被分⽚后,每⼀⽚都成为⼀个分组,具有⾃⼰的IP⾸部,并在选择路由时与其他分组独⽴。这样,当数据报的这些⽚到达⽬的端时有可能会失序,但是在IP⾸部中有⾜够的信息让接收端能正确组装这些数据报⽚。
尽管IP分⽚过程看起来是透明的,但有⼀点让⼈不想使⽤它:即使只丢失⼀⽚数据也要重传整个数据报。因为IP层本⾝没有超时重传的机制——由更⾼层来负责超时和重传(TCP有超时和重传机制,但UDP没有。⼀些UDP应⽤程序本⾝也执⾏超时和重传)。当来⾃TCP报⽂段的某⼀⽚丢失后,TCP在
超时后会重发整个TCP报⽂段,该报⽂段对应于⼀份IP数据报。没有办法只重传数据报中的⼀个数据报⽚。事实上,如果对数据报分⽚的是中间路由器,⽽不是起始端系统,那么起始端系统就⽆法知道数据报是如何被分⽚的。就这个原因,经常需要避免分⽚。
四、IP分⽚算法的原理
分⽚重组是IP层⼀个最重要的⼯作,其处理的主要思想:当数据包从⼀个⽹络A进⼊另⼀个⽹络B时,若原⽹络的数据包⼤于另⼀个⽹络或者接⼝的MTU长度,则需要进⾏分⽚(若设置DF为1,则丢弃,并回送ICMP不可达差错报⽂)。因⽽在IP数据包的报头有若⼲标识域注明分⽚包的共同标识号、分⽚的偏移量、是否最后⼀⽚及是否允许分⽚。传输途中的⽹关利⽤这些标识域进可能的再⾏分⽚,⽬有主机把收到的分⽚进⾏重组以恢重数据。因此,分⽚包在经过⽹络监测设备、安全设备、系统管理设备时,为了获取信息、处理数据,都必须完成数据包的分⽚或重组。
五、IP分⽚的安全问题
IP分⽚是在⽹络上传输IP报⽂时常采⽤的⼀种技术,但是其中存在⼀些安全隐患。Ping of Death, teardrop等攻击可能导致某些系统在重组IP 分⽚的过程中宕机或者重新启动。⼀些IP分⽚攻击除了⽤于进⾏拒绝服务攻击之外,还常⽤于躲避防⽕墙或者⽹络⼊侵检测系统的⼀种⼿段。部分路由器或者基于⽹络的⼊侵检测系统(NIDS),由于IP分⽚重组能⼒的⽋缺,导致⽆法进⾏正常的过滤或者检测。
介绍⼀下Tiny fragment 攻击:
所谓Tiny fragment攻击是指通过恶意操作,发送极⼩的分⽚来绕过包过滤系统或者⼊侵检测系统的⼀种攻击⼿段。攻击者通过恶意操作,可将TCP报头(通常为20字节)分布在2个分⽚中,这样⼀来,⽬的端⼝号可以包含在第⼆个分⽚中。对于包过滤设备或者⼊侵检测系统来说,⾸先通过判断⽬的端⼝号来采取允许/禁⽌措施。但是由于通过恶意分⽚使⽬的端⼝号位于第⼆个分⽚中,因此包过滤设备通过判断第⼀个分⽚,决定后续的分⽚是否允许通过。但是这些分⽚在⽬标主机上进⾏重组之后将形成各种攻击。通过这种⽅法可以迂回⼀些⼊侵检测系统及⼀些安全过滤系统。⽬前⼀些智能的包过滤设备直接丢掉报头中未包含端⼝信息的分⽚。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。