004::每天五分钟入门TCP/IP协议栈::IP协议之16位总长度字段引出的MTU值问题...

要理解MTU以及实际生产环境中的MTU问题,就得搞清楚三个问题:
IP数据报包含什么内容;
数据进入协议栈的封装过程;
MTU具体代表含义;

首先要理解一个过程:
数据进入协议栈的封装过程!
004::每天五分钟入门TCP/IP协议栈::IP协议之16位总长度字段引出的MTU值问题...
数据从发送主机发送出去之前,在主机的协议栈中会经历上述图中的几个封装过程。
本次以TCP数据的封装过程为例,用户数据往下封装。
当数据封装了TCP首部后,数据在协议栈中就被称为TCP段;
当TCP段数据封装了IP首部之后的数据,称为IP数据报。
也就是说:IP数据报由几部分组成:IP首部+TCP首部+用户数据

其次要理解一个重要词:
IP数据报!
从上述封装过程可以看出,IP数据报是由几部分组成的。
从IP首部角度看,IP首部字段中的16位总长度字段,表示的就是:IP数据报的大小,并非整个数据包的大小,IP数据报需要再封装了以太网首部和尾部才能称为一个完整的数据包。

最后要理解一个重要的词:
MTU!
MTU即为:最大传输单元,是链路层的一个概念
路径MTU即为两台主机之间传输数据的路径的最大MTU。
从总长度字段为16位,可以得出理论的最大字段长度为:2的16次方=65535字节,这个值即为所谓的超通道。
但是因为MTU的存在,IP数据报是不可能无限大的。主机之间发送数据的最大MTU取决于路径中的最大MTU中的最小MTU值。
从总长度字段中的值减去IP首部长度值,即为用户数据的长度和IP数据报中数据内容的起始位置。
当IP数据报被分片之后,该总长度字段对应的值会发生变化。

现在的协议栈中使用的基本都是以太网协议,
在以太网中,不包含以太网帧头部和尾部的MTU的最大值是1500字节,最小是46字节。
这就是说:
**标准的以太网帧长度的下限是:64字节(包含了IP首部/帧头部/帧尾部)
标准的以太网帧长度的上限是:1518字节(包含了IP首部/帧头部/帧尾部)

这最小最大值,是由于最初的以太网协议,使用的是CSMA/CD即为载波监听多路访问冲突检测协议等因素,在一个时间内只能由一台主机的数据在以太网中传输,当在以太网中传输的帧太大或太小,都会导致最初的以太网传输效率不是最高的。
当帧太小,传输是有延迟,帧太小,传输很快就完成了,当传输过程中发生了冲突,但是发送者却认为数据已经成功发送,这种情况是没办法接受的。所以,帧不能太小。

当帧太大,机会导致有主机占用传输线路时间较长,那些对于延迟敏感的应用是没办法接受的。
所以有了帧的上限和下限。

当数据超过了MTU限定的长度,此时就会进行分片。
分片发生在网络层,对IP数据报进行分片。
与分片相关字段,后续会讲解。
主机之间的路径MTU基本都不是固定的,因为出去互联网后,会有多种的负载均衡策略,数据走的路径,经过的设备会经常变化,导致了路径MTU是不一样的。
还有一个巨型帧的问题,基本上巨型帧只会存在于IDC内部。巨型帧基本上都是讲大于9000字节的数据,例如NFS文件系统,将系统需要用到的接口如交换机端口/网卡接口等的MTU值设置大一些,这样可以传输的数据帧可以更大,可以提高文件系统传输文件的效率。正常情况下不需要修改接口的MTU值。

转载于:https://blog.51cto.com/mangguostudy/2109349