网络层对IP包进行切片重组时,切片偏移长度的限制是什么?

TCP/IP协议中的分包和重组原理介绍

分片是分组交换的体现,也是IP协议解决的两个主要问题之一。IP协议中的分片算法主要解决不同物理网络的最大传输单元(MTU)的差异所带来的传输问题。但是在传输过程中不断的对数据包进行分片和重组,会带来大量的工作量,增加一些不安全因素。在这篇小论文中,我们将讨论IP碎片化的原因、原理、实现和安全问题。

一、什么是IP碎片化?

IP分片是在网络上传输IP报文的一种技术手段。在传输数据包时,IP协议将数据包分成几个片段进行传输,并在目标系统中重新组装。这个过程叫做碎片化。

二、为什么IP碎片化?

每个物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(最大传输单位)。在IP协议中,传输数据包时,如果添加数据帧头后的IP数据报长度大于MTU,那么数据包将被分割成若干块进行传输,并在目标系统中重新组装。例如,在以太网环境中可以传输的最大IP消息大小(MTU)是1500字节。如果要传输的数据帧大小超过1500字节,即IP数据报长度大于1472(1500-20-8 = 1472,普通数据报)字节,则需要进行分片后再传输。

三、知识产权碎片化的原理及分析

分片重组的过程对传输层是透明的,因为IP数据报分片后,只有到达目的站才能重组,在目的地由IP层完成。分段的数据报也可以根据需要再次分段。

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碎片而不是全部,会导致目标主机一直等待碎片消耗和占用系统资源。一些碎片化风暴攻击就是基于这个原理。这里以以太网为例。由于以太网传输的电气限制,每个以太网帧的最小大小为64字节,最大大小为1518字节。扔掉以太网帧末尾的头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48 bit = 6 bytes+类型字段2bytes)14Bytes和CRC校验部分4Bytes,那么剩下来承载上层协议的地方,也就是数据字段,最多只能有1500Bytes,也就是上面提到的MTU的值。这也是网络层协议非常关心的地方,因为网络层的IP协议会根据这个值来决定是否对上层传达的数据进行分片。就像一个盒子装不下一大块面包一样,我们需要把面包切成块,放在多个盒子里。

以下是IP报头中标志位的格式和每个标志的含义:

识别

稀有

DF

中频

片段偏移

r:保持不用;DF:不分片,“不分片”的那个位,如果这个位设置为1,IP层不会对数据报进行分片;MF: more fragment,“more fragments”,除了最后一个片段,组成数据报的每隔一个片段都要把比特设置为1;片段偏移:该片段从原始数据包的开始位置偏移。偏移的字节数是该值乘以8。

2.MTU原则

当两台远程PC需要通信时,它们的数据需要经过许多路由器和各种网络介质才能到达对端。网络中不同介质的MTU是不一样的,就像一段很长的水管,由不同粗细的水管组成(MTU不一样)。通过这一段水管的最大水量由中间最小的水管决定。

对于网络层的上层协议(这里以TCP/IP协议族为例),他们并不关心“水管”的粗细,他们认为这是网络层的事情。网络层IP协议将检查来自上层协议的每个数据包的大小,并根据本地MTU的大小决定是否“分段”。碎片化最大的缺点是降低了传输性能。一次能做的事情分多次做,所以在网络层更高一层(也就是传输层)的实现中往往会注意到这一点!有些高层会问我,这个面包因为某种原因不能切片。我希望面包是完整的,所以我会在IP包头加一个标签:DF(不要碎片)。这样,当IP包在大断面网络(水管内部)传输时,如果MTU小于IP包,转发设备会按要求丢弃该包。然后向发送方返回一条错误消息。这往往会导致一些通信问题,但幸运的是,大多数网络链路的MTU都是1500或更高(只有X.25网络中的576和点对点网络中的296小于1500)。

对于UDP协议来说,这个协议本身就是一个无连接的协议,它并不关心数据包的到达顺序和是否正确到达,所以一般的UDP应用对分片没有特殊的要求。

TCP协议则不同,它是面向连接的协议。对于TCP协议来说,非常关心数据包的到达顺序和传输中是否有错误。因此,一些TCP应用程序需要分段-无分段(DF)。

3.MSS原理

Mss(最大信令大小)是TCP数据包一次可以传输的最大数据段。为了达到最佳的传输效率,TCP协议通常在建立连接时协商双方的MSS值。这个值在TCP协议实现时经常被MTU值代替(IP包头的大小和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包的报头中有几个标识字段来指示分片包的相同标识号、分片的偏移量、是否是最后一个分片以及是否允许分片。传输过程中的网关使用这些标识字段进行重新分片,这样主机就可以将接收到的分片重新组装起来恢复数据。因此,当一个分片的数据包经过网络监控设备、安全设备和系统管理设备时,需要对数据包进行分片或重组,以获取信息和处理数据。

动词 (verb的缩写)IP碎片的安全问题

IP分段是一种常用于在网络上传输IP消息的技术,但存在一些安全风险。在重组IP碎片的过程中,Ping of Death、teardrop等攻击可能会导致一些系统关闭或重启。除了拒绝服务攻击之外,一些IP碎片攻击经常被用作避开防火墙或网络入侵检测系统的手段。由于缺乏IP分段和重组,一些路由器或基于网络的入侵检测系统(NIDS)无法执行正常的过滤或检测。

介绍微小碎片攻击:

微小碎片攻击是指通过恶意操作发送微小碎片,绕过包过滤系统或入侵检测系统的攻击方式。攻击者可以通过恶意操作将TCP头(通常为20字节)分布在两个片段中,使目的端口号包含在第二个片段中。对于包过滤设备或入侵检测系统,首先通过判断目的端口号来采取允许/禁止措施。但由于目的端口号通过恶意分片定位在第二个分片中,因此包过滤设备通过判断第一个分片来确定是否允许后续分片通过。但是这些碎片在目标主机上重组后会形成各种攻击。这种方法可以绕过一些入侵检测系统和一些安全过滤系统。目前,一些智能包过滤设备直接丢弃报头中不包含端口信息的片段。