什么是MTU?MSS?为什么要有MTU?对应以太网、TCP传输最小值?

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目

文章目录

  • 系列文章目录
    • 1.什么是MTU、MSS
    • 2.为什么会有MTU?
    • 3.为什么会有MSS?
    • 4.MTU为什么是1500?
    • 5.MSS为什么是1460 ?
  • 总结
      • 参考:


1.什么是MTU、MSS

Maximum Transmission Unit,MTU,最大传输单元。网络层最大管控值。

Maximum Segment Size,MSS, 最大报文段长度。传输层最大管控值。

2.为什么会有MTU?

MTU其实就是在每一个节点的最大管控值,只要是大于这个值的数据帧,要么选择分片,要么直接丢弃。

因为根据当前节点的属性(主要是速度),要是没有MTU管控,都将大量数据包发来,当前节点都来不及处理了,全卡住不就完蛋了。

其实就是因为兼顾延迟,使得大数据能发的同时,可以穿插的发送别的数据,不至于让其他的数据不能发送。

3.为什么会有MSS?

MSS就是TCP数据包每次能够传输的最大数据分段。

为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值。

出现MSS是为了避免让ip分片.
IP分片只有第一个带有传输层(tcp)或ICMP首部,其余的分片只有IP头。至于怎么重组就是到对端以后IP层的事情了。TCP分段每个都有完整首部。

如果交给IP层分片会怎样?
只丢失一片数据也要重新传整个数据报。
因为IP层本身没有超时重传机制。只能让更高层(比如TCP)来负责超时和重传。当来自TCP报文段的某一片丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报(而不是一个分片),没有办法只重传数据报中的一个数据分片。

这是因为IP分包后,除了第一个包有TCP报头信息,中间和后面的只有IP报头,所以没法重发一个。而TCP分包,会让每个IP包都有TCP报头信息和IP报头信息,可以做到重发只重发一个包。

所以很可能造成经常大量重传。

那么IP层分片难道用不上了?
当然不是!上层还有UDP不会分段,当然就由IP来分了。

4.MTU为什么是1500?

下面这个作者讲的很好。
魔兽世界掉线引起的:MTU兴趣

其实一个标准的以太网数据帧大小是:1518,头信息有14字节,尾部校验和FCS占了4字节。
所以真正留给上层协议传输数据的大小就是:1518 - 14 - 4 = 1500,那么,1518这个值又是从哪里来的呢?

就像前面(2.为什么会有MTU?)讲的,过大的MTU*导致占用网络时间太长,造成了网络拥堵与高延迟。

而MTU过短,因为报头长度固定,使得报文中有效数据的占用率下降,网络传输有效数据就很差。所以需要折中。

5.MSS为什么是1460 ?

这个值TCP协议在实现的时候往往参考了MTU值。

所以往往MSS为1460 = MTU - 20 - 20(减去TCP、IP报头)。

通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。

当然为了减少IP层的分片,所以设置MSS加上报头也要小于MTU。

总结

其实就是:
为了照顾网络延迟,引入一个差不多大小的MTU来限制单个IP包的大小,而为了让IP层少分包或是不分包(因为IP分包中间丢了一个就得整个重传,而TCP分包只需要重传丢的那一个),传输层引入小于MTU的MSS来限制单个TCP包的大小。

参考:

https://www.cnblogs.com/silyvin/p/12009252.html
https://developer.aliyun.com/article/222535

你可能感兴趣的:(计算机网络,网络协议,计算机网络,tcpip)