程序员社区

什么是分片标志位

如果你看过前面MTU和MSS的文章,你应该知道数据如果太大,在传送中极易丢失,故而在网卡上对每条数据帧的大小做了限制,这就是MTU,它的意思是从网络层发到二层的数据(ip头+ipPayload),不能大于MTU,如果大了就会丢弃,这就要求数据包在网络层要把数据包分成符合MTU大小的分片包。但是,有的报文为了数据的完整性,并不想在网络层由于MTU的关系而进行分片,它宁愿丢弃,也不愿意分片后发送,这个怎么办呢?

分片标志位

上面的问题要怎么办?很简单,既然报文是在网络层分片的,我只要在网络层添加一些信息,用来表明是否允许分片即可,这就是网络层协议头里的分片标志位字段

什么是分片标志位插图

DF

表示是否允许分片,0表示可以,1表示不允许

所以如果你不想报文在网络传送过程中由于MTU的关系,可能需要在经过某个路由器网卡时需要而进行分片,你就可以把报文的IP首部里的DF值设置为1,这样路由器就无法分片,把报文丢弃,同时发ICMP给源主机

这里就带出了DF的另一个作用:

发现路径MTU,PMTUD,path mtu discovery,通过把DF设置为1,当路径中的某些网卡MTU太小又不能分片,就会发icmp给源主机,这个icmp报文里有这个网卡的mtu的大小信息,源主机就能发现路径上的最小mtu,这就是path mtu。源主机根据pmtu,就可以重新发送小一些的ip包

MF

表示该ip包是否是最后一片,0表示最后一片,1表示不是最后一片

这个标志位有什么用途?

数据包在网络层分片后发送,在接收端,也需要在网络层重组,等待分片包进行重组什么时候结束?就是以接收到最后一片数据包为止。如果最后一片迟迟未到,重组的数据包就是不完整的,就不能发给上层,就需要把整个包丢弃。只有完整的数据包才可以发给上层


赞(0) 打赏
未经允许不得转载:IDEA激活码 » 什么是分片标志位

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区