IP分片和组装的具体过程

目录

IP协议报头格式

分片与组装的过程

分片

组装

接收⽅如何得知⾃⼰收到的报⽂分⽚了?

接收⽅如何得知⾃⼰收到的分⽚收全了?

接收⽅如何组合形成完整的报⽂?

分片组装示意图


IP协议报头格式

16位标识(id): 唯⼀的标识主机发送的报⽂. 如果IP报⽂在数据链路层被分⽚了, 那么每⼀个⽚⾥⾯

的这个id都是相同的.

3位标志字段: 第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到). 第⼆位置为1

表⽰禁⽌分⽚, 这时候如果报⽂⻓度超过MTU, IP模块就会丢弃报⽂. 第三位表⽰"更多分⽚", 如果

分⽚了的话, 最后⼀个分⽚置为0, 其他是1. 类似于⼀个结束标记.

13位分⽚偏移(framegament offset): 是分⽚相对于原始IP报⽂开始处的偏移. 其实就是在表⽰当

前分⽚在原报⽂中处在哪个位置. 实际偏移的字节数是这个值 除以 8 得到的. 因此, 除了最后⼀个

报⽂之外(之前如果都是8的整数倍,最后⼀⽚的偏移量也⼀定是8的整数倍), 其他报⽂的⻓度必须

是8的整数倍(否则报⽂就不连续了).

注意:⽚偏移(13位)表⽰本⽚数据在它所属的原始数据报数据区中的偏移量(以8字节为单位)

分片与组装的过程

分片和组装都是网络层干的事

IP分⽚对传输层是透明的,这意味着传输层⽆需关⼼数据是否被分⽚以及如何重新组装。

分片

1. 检查MTU限制:

当⼀个IP数据报的⼤⼩超过了⽹络的MTU(最⼤传输单元)限制时,就需要进⾏分⽚。MTU是 数据链路层对IP层数据包进⾏封装时所能接受的最⼤数据⻓度。

2. 分割数据报:

IP层将原始的IP数据报分割成多个较⼩的⽚段。

对于每个⽚段,IP层会设置相应的标识(Identification)、偏移量(Fragment Offset)和标志位(Flags)等字段。

标识字段⽤于标识属于同⼀个数据报的不同分⽚,确保所有分⽚能够被正确地重新组装。

偏移量字段指⽰了当前分⽚相对于原始数据报的起始位置,以8字节为单位。

标志位字段包含了3个位,其中MF(More Fragment)位⽤于指⽰是否还有更多的分⽚,DF (Do Not Fragment)位⽤于指⽰数据报是否允许进⾏分⽚。

3. 添加IP头部:

每个分⽚都会加上⾃⼰的IP头部,与完整IP报⽂拥有类似的IP头结构,但MF和Fragment Offset 等字段的值会有所不同。

4. 发送分⽚:

分⽚在传输过程中独⽴传输,每个分⽚都有⾃⼰的IP头部,并且各⾃独⽴地选择路由。

组装

1. 接收分⽚:

当⽬的主机的IP层接收到这些分⽚后,会根据标识字段将属于同⼀个数据报的所有分⽚挑选出来。

2. 排序与组装:

利⽤⽚偏移字段,IP层会对属于同⼀个数据报的分⽚进⾏排序。

当所有的分⽚都到达并正确排序后,IP层会将这些分⽚重新组装成⼀个完整的IP数据报。

3. 传递给上层协议:

组装好的IP数据报会传递给上层的协议进⾏处理。

接收⽅如何得知⾃⼰收到的报⽂分⽚了?

接收方收到一个IP数据报后,会检查以下两个条件:

  • 如果 MF位为 1:这明确表示还有后续分片,当前数据报是一个分片。

  • 如果 分片偏移值大于 0:这表示当前分片的数据并非从原始数据报的开头开始,那么它肯定是一个分片。

只要满足以上两个条件中的任意一个,接收方就知道当前收到的是一个分片。

特例:​ 如果一个数据报没有被分片(即它本身就是完整的),那么它的 MF=0分片偏移=0

接收⽅如何得知⾃⼰收到的分⽚收全了?

接收方会检查是否已经收到了一个“最后的分片”,并且从开头到这个最后分片之间的所有数据都已经到位。

  • 关键标志:收到一个 MF=0的分片。这表示这是最后一个分片。

  • 数据连贯性:根据已收到的所有分片的分片偏移数据长度,接收方可以计算出整个原始数据报应有的总长度。它会检查从偏移量0开始,到这个最后分片结束为止的整个数据区域是否已经被填满,中间没有“空洞”。

当且仅当收到了 MF=0的分片,并且重组缓冲区中从0到该分片结束的所有数据都已连续存在时,接收方才认为分片已经收全,可以开始重组。

接收⽅如何组合形成完整的报⽂?

组合过程相对直接:

  1. 按偏移量排序:在重组缓冲区中,接收方会根据每个分片的分片偏移值,将它们的数据部分按顺序拼接起来。

    • 例如,偏移量为0的分片数据放在最前面。

    • 接着是偏移量为(第一个分片数据长度/8)的分片,依此类推。

  2. 拼接数据:直接将各个分片的数据块按顺序连接起来。由于IP分片时,每个分片(除了最后一个)的数据长度一定是8字节的倍数,所以拼接时边界是对齐的,不需要特殊处理。

  3. 重构IP头部:重组完成后,会生成一个完整的IP数据报。这个新数据报的IP头部以第一个分片(偏移量为0的那个分片)的IP头部为蓝本,并进行以下修改:

    • 总长度:更新为原始完整数据报的总长度。

    • 标志MF位设置为0。

    • 分片偏移:设置为0。

    • 头部校验和:根据新的头部信息重新计算。

  4. 递交上层:将这个重组后的、完整的IP数据报传递给传输层(如TCP或UDP)进行处理。

分片组装示意图

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_dindong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值