目录
最大传输单元MTU
原文:https://notfalse.net/23/mtu
比较好的简介结构:https://www.cloudflare.com/zh-cn/learning/network-layer/what-is-mtu/
(Maximum Transmission Unit, MTU)
![encapsulation](https://i-blog.csdnimg.cn/blog_migrate/7dee75a39495789d7d5e0bf91efbb01c.png)
但是,帧 (Frame) 太大会发生什麽事?
![](https://i-blog.csdnimg.cn/blog_migrate/af7f2898394792b5904447d2420d760a.png)
传输需耗损大量的 缓衝区 (buffer) 大小
传输媒介可能被某一传送端独佔,造成堵塞
…
因此,数据链路 (Data-Link) 规范了 帧 (Frame) 的大小上限,
也就是 — — 最大传输单元 (Maximum Transmission Unit, MTU),
如果没有这些缺点, MTU 当然越大越好啦!
最大传输单元 (MTU)
不同的 数据链路层,有不同的 MTU。
如:
以太网路 (Ethernet) 的 1500 个位元组,
IEEE 802.3/802.2 的 1492 个位元组,
光纤分散式数据介面 (FDDI) 的 4352 个位元组…。
以 以太网路 (Etherner) 为例:
![Ethernet-frame-format](https://i-blog.csdnimg.cn/blog_migrate/67b9c6d2ce0f03e61c47b5f7ba1afa4f.png)
一个 以太网路 帧(Frame),最大的长度为 1518 位元组 (octet),
去掉表头与尾端数据后,载荷的最大资料长度则为 1500 octet,
且资料最小长度需为 46 octet,不足的话就用 填充位元 (padding) 填满至 46 为止。
使用指令:
netstat -i
可显示系统网路介面信息(含 MTU)
IP 分段
(IP Fragmentation)
网络层的 IPv4 与 IPv6,
其封包大小上限,分别为 65535 与 65575 位元组 (octet),
并提供较大的封包选项 — — 巨型封包 (jumbograms)。
远远超出了许多数据链路层的 帧大小(MTU)!
IP 分段 (IP Fragmentation) 即是其中一种解法:
![](https://i-blog.csdnimg.cn/blog_migrate/a4967b384012227dc68f2a67563bc568.png)
IP 会将封包切割成多个较小的 (小于 MTU) 片段 (fragment),使其能透过数据链路层传输 ,
目的端接收完所有片段后,再将片段 (fragment) 进行重组。
分段 (fragmentation),可能由传输路径中的任何一台路由器来做 (含来源主机),
且被分段的封包 — — 片段 (fragment) 可能经由不同路由方式,
只要最终达到相同的目的地即可。
(IPv6 只有来源端可以做分段)
将 IP 数据包 (IP Datagram) 分段的主机或路由器,
会复制必要栏位到各个片段中,
并更改 标志、片段偏移量、(封包)总长度,与重新计算各个分段的检验和。
(IP 检验和,不含虚拟表头)
最后,目的端接收完所有片段后,再将片段 (fragment) 进行重组:
![IP Datagram 格式](https://i-blog.csdnimg.cn/blog_migrate/2e4ccbc788ecf912c577e9569c5ba6a4.png)
IP Datagram 格式
将在未来讨论 IP 协定进一步说明。
Path MTU Discovery
如果 IP Fragmentation 任一片段遗失、毁损呢?
答案是: 目的端将无法重组这个封包。
更重要的是:
网路层的 IP 并不会处理重送
这对有重送机制的传输层 (Ex: TCP),降低了传输效率 (无法只重送一个 片段);
对没有重送机制的传输层 (Ex: UDP),增加了资料的遗失率。
Path MTU Discovery 技术,有效的避免 IP Fragmentation:
找出 来源 与 目的端路径中,
所有数据连接层的 最小 MTU。
(通常,为以太网路的 1500 octet)
许多可靠的传输层 (如: TCP),会以此值做为参考,
调整 最大区段长度 (Maximum Segment Size, MSS)。
最简单的算法:
MSS = MTU - 20 octet (TCP 固定表头) - 20 octet (IP 固定表头)
或 其他动态调整演算法,
常见的 MSS 有 1460、1400、1380…。
而没有此机制的传输层 (如: UDP),