IP 分片:网络传输中不可或缺的技术手段及其原因

日期: 2024-08-19 10:07:37|浏览: 411|编号: 61332

友情提醒:信息内容由网友发布,本站并不对内容真实性负责,请自鉴内容真实性。

目录

1.什么是IP分片?

IP分片是IP数据包在网络上传输的一种技术手段,IP协议在传输数据包时,将数据包分成若干个片断进行传输,在目标系统中再重新组装,这个过程就称为分片。

二、为什么需要IP分片?

(1500)6+6+2+4以太网技术支持最大帧长1518字节,通常以太网接口默认链路MTU设置为1500字节。1500---》1482

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

3. IP分片原理及分析

分段和重组过程对于传输层来说是透明的,因为 IP 数据报分段后,只能在到达目的地时进行重组,而重组由目的地的 IP 层完成。分段的数据报可以根据需要再次分段。

IP 分片和完整的 IP 数据包具有几乎相同的 IP 报头,并且 ID 字段对于每个分片都是一致的,这样在重组时可以识别来自同一个 IP 数据包的分片。在 IP 报头中,16 位标识号唯一地记录了一个 IP 数据包的 ID,具有相同 ID 的 IP 分片将被重组;13 位分片偏移量记录了某个 IP 分片相对于整个数据包的位置;而这两个表中间的 3 位标志位表示该分片之后是否有新的分片。这三个标志位构成了 IP 分片的全部信息(后面会介绍),接收方可以利用这些信息重组 IP 数据。

标志字段的功能

标志字段在分片数据报中起着重要作用。当数据报被分片时,其值被复制到每个分片中的标志字段中的某个位,该位称为“不分片”位。其中一个位用于指示“更多分片”。除了最后一个分片外,组成数据报的每个分片都必须将此位设置为 1。分片偏移字段指的是分片相对于原始数据报开头的偏移位置。

另外,在对数据报进行分片时,会将每次分片的总长度改为分片的长度。如果标志字段的该位被设置为1,则IP不会对数据报进行分片。如果需要在中间路由器上进行分片,则只会丢弃该数据报并向源主机发送ICMP不可达错误消息。

若无特殊需要,不应设置为1;最右边的位设置为1,表示该报文不是最后一个IP分片。故意发送部分IP分片而不是全部,将导致目标主机一直等待分片消耗完毕,占用系统资源。有些分片风暴攻击就是基于这个原理。这里以以太网为例,由于以太网传输的电气限制,每个以太网帧都有一个不能超过的最小大小。丢弃以太网帧的帧头(DMAC目的MAC地址48bit=+SMAC源MAC地址48bit=+Type域)和帧尾的CRC校验部分,剩下承载上层协议的地方,也就是Data域,最多只能有1,也就是上面说的MTU值。这也是网络层协议非常关注的地方,因为网络层的IP协议会根据这个值来决定是否对上层传来的数据进行分片。就像一个盒子装不下一大块面包,我们需要将面包切成片,然后放在多个盒子里。

以下是IP头中标志位的格式以及各个标志位的含义:

识别号

标志: R DF MF

R 保留,无定义用途

DF(Do Not Bit)1表示此数据包不允许分片,0表示允许分片

MF 1 我是一个碎片,但我不是最后一个碎片,0 我是一个碎片,而且我是最后一个碎片(M=更多)

(分钟偏移)

R:保留;DF:Don't,“不分片”位。如果此位设置为 1,则 IP 层不会对数据报进行分片;MF:更多

“更多分片”,除最后一个分片外,组成数据报的每个分片都必须将该位设置为1;

:此分片相对于原始数据包开头的偏移量。偏移量的字节数为该值乘以 8。

生存时间

TTL:防止网络转发数据包时出现环路。数据包在网络中被转发的次数。每次转发的数据包被下一个设备接收时,TTL值就减一。当下一个接收设备发现TTL值等于0时,就不再转发该数据包,而是将其丢弃。

TTL值范围:0~255(8位)

协议编号

表示数据报使用的传输层协议

:8位,:下一层协议。表示此数据包携带的数据使用哪种协议,以便目标主机的IP层将数据交给哪个进程进行处理。常用值:

-1:ICMP,;

-2:IGMP,组;

6:TCP。;

17:UDP,用户。

-1为ICMP协议,17为UDP协议:

:16 位,头校验和。

IP:32位,源IP地址。

IP:32位,目的IP地址。

:变量,选项字段。

:变量填充字段,全部用0填充

碎片数据包示例:

只有首片分片才携带传输层字段(TCP/UDP),非首片分片不携带传输层字段。

分片偏移计算方法:

:第一个片段的(传输层大小 + PDU)/8 = 第二个片段的偏移量

((第一个片段的传输层大小 + PDU) + 第二个片段的 PDU)/8 = 第三个片段的偏移量。

后续分片的偏移量也类似。

第一个分片:

每个分片的长度必须是8字节(64位)的整数倍

第二个碎片:

第三个碎片:

提醒:请联系我时一定说明是从101箱包皮具网上看到的!