tcp/ip IP数据报头详解

下列两幅图是IP数据报头结构:
在这里插入图片描述
在这里插入图片描述
在IP数据报头中有三个字段与数据报的分片与重组有很大的关系,分别是标识符、标志和片偏移量。

  1. 标识占16位,用于目的主机将数据报的各个分片重装成原来的数据报。当数据报分片时,该标识字段的值被复制到所有的数据报片的标识字段中。这样,目的就可以正确的将标识字段值相同的各数据报分片重装成原来的数据报。

  2. 其中标志占3位,该字段目前只有后两位有意义,前一位字段保留。
    其中,最低位记为MF(More Fragment),用于把数据报最后一片与前面其它各片区分开来。MF = 1代表片未完,即钙片不是原始数据报的最后一片;MF = 0表示钙片是原始数据报的最后一片。
    次低位DF(Don’t Fragment),用来控制数据报是否允许分片。DF = 1表示该数据报不允许分片;DF = 0允许分片。
    其实,数据报的分片和重组都是由机器自动完成的,因此设置DF位的真正意义在于,程序员可以控制数据报的分片过程,这为程序调试提供了方便和灵活性。

  3. 片偏移占13位,表示本片在原数据报中的偏移,偏移量以8字节为单位。由于各片数据均按照独立数据报方式传输,因此到达目的站的片序是不定的,目的主机在重装数据报时需要该字段提供偏移量

例如:
A: 有一数据报总长度4820字节,首部20字节,数据4800字节。某一网络能传送的数据报的最大长度是1420字节,该如何分片?
在这里插入图片描述
B: 有一数据报总长度4500字节,ip报头20字节,考虑到还有一种情况,分片的数据包还可能继续进行分片, 如下截图:
在这里插入图片描述
所有片段的数据量: 1480+1000+1480+540 = 4500字节

如何得片段偏移:
A1: 0
A2: 0 + 1480/8 = 185
A3: 185+1000/8 = 310
A4: 310+1480/8 = 495
在分片时,除最后一片外,其他每一片的数据部分必须是8字节的整数倍

  1. 如何重组:
    A1: 每个分段数据首部中,16位标识符 是相同的,接收端可以依靠此标识,来识别是否是同一组数据。
    A2: 3位标志位,用DF来区分是否允许分片,如果为0,继续查看MF,接收端会把MF=1的分组数据放到缓存中,直到把所有16位标识符相同的分段读取完为止。
    (根据网络传输速度,接收端不一定最后收到MF=0的标识分段数据. 而因该是check16位标识符相同的分组,全部放到缓冲区 )
    A3: 然后根据13位偏移量,来重组缓存中的数据(可以通过MF=0来确定最后一段分组数据).
    所以重组前提依据上述三个步骤来确认。缺一不可.

当需要进行分片时,在每个数据报片的首部存放着该数据报的标识、标志位和片偏移,在进行重组时,标识用来分辨该数据报片的原数据报是哪个,标志位中的MF用来分辨这是不是原数据报的最后一片,片偏移用来分辨这个数据报片相对原数据报的位置。通过这几个字段,可以稳定的完成数据报的分片与重组操作

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值