TCP/IP中的分段分片问题

MTU是用来限制数据链路层的数据帧的长度大小(可以视作对IP层的限制),以以太网为例,以太网MTU长度为46字节~1500字节(不足46要进行字节填充),因此,当数据帧长度大于1500字节的时候(比如IP头部+TCP头部+应用层数据的长度),需要进行IP分片处理(会根据分片标志和偏移量大小进行重组,相同分片的IP Header ID相同)。

MSS是用来限制TCP的报文段的大小(可以视作对应用层的限制),以太网下MSS最大为1460字节(1500 - 20字节IP头部 - 20字节TCP头部),一般在连接建立的时候,连接双方会通告各自的MSS。而通信双方在发送数据的数据段MSS需要满足min(对方通告的MSS,本机系统限制的MSS)。

所以IP分片的原因是MTU,TCP分段的原因是MSS。

那么为什么即要IP分片,又要TCP分段呢,可不可以不要IP分片呢?对于UDP来说,是没有分段的机制的,那么UDP还要自己再实现一遍分段机制,对于每一种传输层协议,都需要自己再实现一遍分段机制,所以我猜测为了通用性和方便,那么统一对IP进行分片,对于已经有自己分段机制的就不需要IP的分片机制,对于没有自己分段的机制,就使用IP的分片机制。于是对于TCP来说,只要超过了MSS,就会自己进行分段操作了,而不需要IP再进行分片操作,所以一般来说,对于TCP协议,IP分片操作是很少发生的,UDP发生的IP分片操作会比较多。

可以参考如下连接:https://www.zhihu.com/question/48454744
https://blog.csdn.net/yusiguyuan/article/details/22782943

你可能感兴趣的:(TCP/IP中的分段分片问题)