注:本文为 “MTU” 相关文章合辑。
略作重排,未校未去重。
如有内容异常,请看原文。
Cisco 那篇是2006 年的,机翻未校,时间久远,仅供参考。
车小胖谈网络:MTU 与 MSS
This is bill 于 2016-07-20 发布
作者:车小胖
链接:车小胖谈网络:MTU 与 MSS
MTU:Maximum Transmit Unit
最大传输单元(MTU)是指物理接口(数据链路层)提供给其上层的最大一次传输数据大小,例如 IP 层、MPLS 层等。由于目前应用最多的接口是以太网,因此重点讨论以太网口的 MTU。假定其上层协议为 IP,缺省 MTU = 1500 字节,即整个 IP 包从该接口发送的最大长度为 1500 字节。该值可以通过配置修改为更大或更小的值,但需在系统的边界值以内,并且链路的两端必须修改为相同的值,否则会导致大端的数据被小端丢弃。
MSS:Maximum Segment Size
最大 TCP 分段大小(MSS)不包含 TCP 头和选项,仅包含 TCP Payload。TCP 用于限制每次发送的最大分段尺寸。
在网络通信中,应尽可能避免 IP 分片。分片会消耗大量 CPU 资源,无论是负责分片的主机或路由器,还是负责重组分片的主机或路由器。曾在实验室中进行实验,一台路由器的数据处理能力为 10G,若处理分片则降低到 2G 左右。这种对比是基于相同大小的 IP 报文得出的,即使是较高端的平台,也是通过硬件和软件 CPU 协同工作才达到的水平。对于较低端的平台,若仅依靠 CPU 软件处理,则数据包处理能力将更加低下。需要注意的是,上述数据仅为直观对比,在实际应用中,应根据不同厂商、不同平台获取准确的 datasheet 和分片性能数据。
由于分片对系统性能影响较大,TCP/IP 协议的创造者们采取了多种措施来避免 IP 分片,具体如下:
1. 最大分段大小(Maximum Segment Size)
一般网络接口都有一个最大传输单元(MTU),例如 MTU = 1500 字节,其含义是:如果 IP 包的尺寸 ≤ 1500 字节,则原封不动地从该网络接口发送;否则需要进行分片。既然知道 MTU = 1500 字节,那么 TCP 的最大长度应为 1480 字节,具体计算如下:
IP = IP Header + TCP = 20 + 1480 = 1500 字节 TCP = TCP Header + TCP Payload = 20 + 1460 = 1480 字节 \begin{aligned} \text{IP} &= \text{IP Header} + \text{TCP} &= 20 + 1480 = 1500 \text{ 字节} \\ \text{TCP} &= \text{TCP Header} + \text{TCP Payload} &= 20 + 1460 = 1480 \text{ 字节} \end{aligned} IPTCP=IP Header+TCP=TCP Header+TCP Payload=20+1480=1500 字节=20+1460=1480 字节
其中,TCP Payload = 1460 字节,即为 TCP 最大传输单元(Maximum Segment Size,MSS)。因此,MSS = MTU - IP Header - TCP Header = 1500 - 20 - 20 = 1460 字节。TCP 在三次握手的第一个 SYN 消息中有一个选项(option 4),用于通告双方的 MSS。如果一方的 MSS = 1460 字节,而另一方的 MSS = 8960 字节,则会选择较小的一方,即 1460 字节作为该 TCP 连接的 MSS:
M S S = min { M S S s , M S S r } MSS = \min \{ {MSS}_s,\; {MSS}_r \} MSS=min{MSSs,MSSr}
因此,
M S S = min { 1460 , 8960 } = 1460 MSS = \min \{ 1460, 8960 \} = 1460 MSS=min{1460,8960}=1460 字节
这样,双向通信都可以避免因 IP 包过大而引起的分片。然而,MSS 是否能完全避免 IP 分片呢?答案是否定的。
为什么 MSS 不能避免分片?
需记住,MSS 仅解决了源主机和目的主机第一跳(first hop)的 MTU 问题,从而保证第一跳不分片,但这种方式无法克服路径中存在更小 MTU 而造成的分片。
那么,还有什么更好的方法呢?
2. 路径 MTU 发现(Path MTU Discovery)
仍以第一个例子为例,IP 包 = 1500 字节,从源主机发送出来后,在互联网上逐跳传输,突然到达一台路由器,需要从一个接口发送出去,而该接口的 MTU 仅为 1000 字节。由于 IP 包 1500 字节 > 1000 字节,该 IP 包必须分片才能发送。那么,是否可以让这台路由器不分片呢?答案是可以的。记得 IP 头中有一个标志位 DF(Don’t Fragment),如果 DF = 1,则表示该 IP 包在传输过程中不能分片。如果该 IP 包大于物理接口的 MTU,则直接丢弃,并发送消息告知源主机。发送什么消息呢?
ICMP 协议中有 type 字段和 code 字段,发送 type = 3,code = 4,MTU = 1000 字节的消息即可。当该 ICMP 消息到达 IP 包的源主机后,源主机将知道 IP 包过大,那么最大可以发送多大的包呢?ICMP 消息中已经给出了答案,即 MTU = 1000 字节。因此,源主机发送小于或等于 1000 字节的包即可避免在传输路径上的分片。那么,读者可能会问,如果 IP 包 = 1000 字节在传输过程中遇到更小的 MTU = 500 字节怎么办呢?很简单,重复上述步骤即可。
有细心的读者可能会问,如果 ICMP type = 3,code = 4 无法到达源主机,会发生什么情况呢?显然,IP 包将被默默地丢弃,TCP 连接因超时而中断。ICMP 为何无法到达?通常是因为被防火墙或路由器的访问控制列表(ACL)无情地拒绝通过。如果可以管理配置这些设备,只需允许 ICMP type = 3,code = 4 通过即可。否则,只能关闭路径 MTU 发现(Path MTU Discovery)功能。虽然分片可以通信,但不分片则完全无法通信,这是一种无奈的选择。
源主机的 IP 包被丢弃后由谁重传?
如果是 UDP 应用,则由应用层进行重传;如果是 TCP 会话,则由 TCP 进行重传。先明确这一前提,再分析因 IP 包过大被中途丢弃所引起的一系列动作:
- IP 包 = 1500 字节 > RouterX 出接口 MTU = 1000 字节,DF = 1。于是,RouterX 丢弃该包,并发送 ICMP 消息给源主机,其中 type = 3,code = 4。ICMP 消息中还包含五元组:源 IP、目的 IP、源端口、目的端口、IP 协议号(6,即 TCP),以及 RouterX 出接口的 MTU 值,即 1000 字节。
- 假定 ICMP 消息幸运地到达了源主机,IP 层解开该包后得到以下信息:
a. 五元组;
b. RouterX 的 MTU = 1000 字节。
IP 层通过五元组确定这是哪个 TCP 连接,即刻修改 [源 IP,目的 IP] 这条路径的 PMTU 值 = 1000 字节。IP 层向 TCP 会话发送两个通知:
a. 包丢失;
b. PMTU 缩小至 1000 字节。
当 TCP 会话得知包丢失后,先发送重传队列,显然该队列仍会被丢弃。当接收到 PMTU 缩小至 1000 字节的通知后,相应地修改 MMS_S = 980 字节(maximum send transport-message size,包含 TCP 头),对新生成的 TCP 分段则使用 960 字节,最终 IP 包为 1000 字节。
3. TCP Adjust-MSS
有时,企业网的设计者为了防止在传输路径上发生分片,会采用这一功能。例如,在分公司出口网关的 WAN 接口上启用该功能,检查 TCP SYN 消息中的 option 4,即 MSS,可以将双向的 MSS 修改为更小的值,例如 1380 字节。这样,即使该 IP 包可能会通过 GRE Tunnel 或 IPsec VPN Tunnel,被加上几十个字节的新 IP 头信息或 GRE Tunnel 头信息,也不会发生分片。
该功能仅适用于 TCP 连接,不适用于 UDP 应用。此外,这是 Cisco 的私有实现,并非标准。在此提及该功能,旨在加深对 MSS 的理解。
二层交换机的 MTU
二层交换机接口下也有 MTU,默认值通常为 1500 字节。如果有一个帧(1600 字节)需要从该接口发送出去,通常会直接丢弃,而不会发送任何 ICMP 消息。那么,如果是一个 1508 字节的帧呢?是转发还是丢弃?我们称这种帧为“baby giant”帧,通常是由于加入了 MPLS 标签造成的。具体到不同的产品,行为可能不同,有的会直接丢弃,有的则会原封不动地继续转发。提及这些仅作为参考,并无太多现实意义。不过,心中有这些概念,在面对特定平台时,可以提前做好准备。
数据中心为何常用 > 8192 字节的 MTU?
曾在实验室中进行实验,将一台路由器设备的进出接口 MTU 设置为 9218 字节,然后使用各种尺寸的包进行流量测试,以测试系统的数据吞吐量。结果表明,包越大,系统的吞吐量越大,即传输效率越高。因此,使用更大的 MTU 可以提供更高的数据传输能力。
NFS 网络服务器之间的数据读取和存储的最小单位是磁盘扇区,而服务器扇区通常使用 8192 字节。为了避免分片,发送这些扇区数据的 IP 包的 DF 标志位设置为 1,即不允许分片。因此,最好的办法是将数据中心全网的 MTU 设置为 > 8192 字节。由于还需要考虑 IP 头、UDP 头和文件系统头,通常选择 9000 字节左右即可满足需求。
MTU 与 IP MTU 的区别
得闲饮茶 013 于 2019-11-06 发布
1. MTU(最大传输单元)
MTU 是一个二层的概念。以太网的最大 MTU 为 1500 字节(不包含二层头部,加上头部后为 1518 字节)。具体来说,以太网帧的头部结构包括:
- 2 字节的以太网类型
- 6 字节的目的 MAC 地址(DMAC)
- 6 字节的源 MAC 地址(SMAC)
- 4 字节的帧校验序列(FCS,也称为 CRC 校验部分)
每个以太网帧的最小大小为 64 字节,最大不超过 1518 字节。
注:
- 小于 64 字节的数据帧通常是由于以太网冲突、线路干扰或损坏的以太网接口产生的“碎片”。
- 大于 1518 字节的数据帧被称为“Giant 帧”,通常是由于线路干扰或损坏的以太网接口产生的。
- Ethernet II 的最大数据帧为 1518 字节,包括 14 字节的帧头(DMAC、SMAC 和 Type 域)和 4 字节的帧尾 CRC 校验部分。
2. IP MTU
IP MTU 是一个三层的概念,它包括三层头部及所有载荷。根据下层为上层服务的原则,IP MTU 的变化范围虽然很大(68-65535 字节),但仍需考虑以太网 MTU 的限制。网络层 IP 协议会检查每个从上层协议下来的数据包的大小,并根据本机 MTU 的大小决定是否进行“分片”处理。
3. MSS(最大报文段长度)
MSS 是 TCP 中的一个概念,表示 TCP 数据包每次能够传输的最大数据分段,不包含包头部分。它与 IP MTU 的关系如下:
- IP MTU = TCP MSS + 20 字节(IP 包头)+ 20 字节(TCP 包头)
如果传输过程中还承载其他协议,还需加上相应协议的头部。
注:
为了达到最佳传输效能,TCP 协议在建立连接时通常会协商双方的 MSS 值。TCP 协议在实现时通常用 MTU 值减去 IP 数据包报头的大小(20 字节)和 TCP 数据段的包头(20 字节)来确定 MSS 值,因此 MSS 通常为 1460 字节。通信双方会根据双方提供的 MSS 值的最小值确定本次连接的最大 MSS 值。
MTU 是最终发送出去的报文总大小,MSS 是需要发送的数据大小。例如,在 PPPoE(以太网上承载 PPP 协议)环境中,PPPoE 包括 6 字节的头部和 2 字节的协议 ID 号。由于以太网的 MTU 值为 1500 字节,因此上层 PPP 负载数据不能超过 1492 字节。此时,PPPoE 环境下的 MTU 为 1492 字节,MSS 为 1452 字节(1492 字节 - 20 字节 - 20 字节)。
关键概念对比
术语 | 包含内容 | 不包含内容 |
---|---|---|
MTU | 帧头后的所有负载 | 帧头 |
IP MTU | IP 头及后续所有负载 | 帧头及其他协议头 |
TCP MSS | TCP 载荷数据 | TCP 头 |
说明:
- MTU (最大传输单元): 链路层最大数据单元,不包含帧头(如以太网帧头)。
- IP MTU: IP 头及后续负载。
IP MTU = MTU - 帧头 - 其他协议头
(若存在)。普通以太网中,IP MTU = MTU - 帧头
。 - TCP MSS (最大报文段长度): TCP 载荷数据,不包含 TCP 头。
TCP MSS = IP MTU - IP 头 - TCP 头
。
常见头部大小:
头部类型 | 字节数 |
---|---|
帧头 (以太网) | 18 字节 |
IP 头 | 20 字节 |
TCP 头 | 20 字节 |
GRE 头 | 4 字节 |
PPPoE 头 | 8 字节 |
MPLS 标签 | 4 字节 |
重要事项:
当存在 GRE、PPPoE 或 MPLS 等中间协议时,计算 IP MTU 和 TCP MSS 需要从 MTU 中扣除相应的中间协议头部大小。
示例:
MTU = 1500 字节,以太网帧头 = 18 字节,存在 GRE 头(4 字节):
- IP MTU = 1500 - 18 - 4 = 1478 字节
- TCP MSS = 1478 - 20 - 20 = 1438 字节
Difference between interface mtu and ip mtu
接口 MTU 与 IP MTU 的区别
sebastan_bach 09-13-2006 10:18 AM
a.kiprawih 09-13-2006 10:04 PM
Hi,
The main difference is interface MTU defined max packet size supported by an interface, while IP MTU is used to set MTU size of IP PACKET.
主要区别在于接口 MTU 定义了接口支持的最大数据包大小,而 IP MTU 用于设置 IP 数据包的 MTU 大小。
1. Interface MTU - default MTU size for an interface:
接口 MTU - 接口的默认 MTU 大小:
Each interface has a default maximum packet size or MTU size. This number generally defaults to the largest size possible for that interface type. On serial interfaces, the MTU size varies, but cannot be set smaller than 64 bytes.
每个接口都有一个默认的最大数据包大小或 MTU 大小。此数值通常默认为该接口类型可能的最大大小。在串行接口上,MTU 大小会有所不同,但不能设置为小于 64 字节。
Media Type / 媒体类型 | Default MTU (Bytes) / 默认 MTU(字节) |
---|---|
Ethernet / 以太网 | 1500 |
Serial / 串行 | 1500 |
Token Ring / 令牌环 | 4464 |
ATM (Asynchronous Transfer Mode) / 异步传输模式 | 4470 |
FDDI (Fiber Distributed Data Interface) / 光纤分布式数据接口 | 4470 |
HSSI (High-Speed Synchronous Interface) / 高速同步接口 | 4470 |
说明:
ATM (Asynchronous Transfer Mode):
- ATM 是一种面向连接的网络技术,广泛用于广域网和城域网,支持多种服务质量(QoS)级别。
- ATM 的默认 MTU 为 4470 字节,支持较大的数据包传输,适用于高带宽需求的应用。
FDDI (Fiber Distributed Data Interface):
- FDDI 是一种高速光纤局域网技术,通常用于数据中心和关键任务系统。
- FDDI 的默认 MTU 为 4470 字节,支持较大的数据包传输,以提高传输效率。
HSSI (High-Speed Synchronous Interface):
- HSSI 是一种用于高速同步通信的接口技术,通常用于连接高速路由器和交换机。
- HSSI 的默认 MTU 为 4470 字节,支持较大的数据包传输,以适应高速网络环境的需求。
2. IP MTU:
To set the maximum transmission unit (MTU) size of IP packets sent on an interface. Minimum is 128 bytes; maximum depends on the interface medium.
用于设置在接口上发送的 IP 数据包的最大传输单元(MTU)大小。最小值为 128 字节;最大值取决于接口介质。
Changing the MTU value (with the mtu interface configuration command) can affect the IP MTU value. If the current IP MTU value is the same as the MTU value, and you change the MTU value, the IP MTU value will be modified automatically to match the new MTU. However, the reverse is not true; changing the IP MTU value has no effect on the value for the mtu command.
更改 MTU 值(使用 mtu 接口配置命令)会影响 IP MTU 值。如果当前的 IP MTU 值与 MTU 值相同,并且你更改了 MTU 值,IP MTU 值将自动修改以匹配新的 MTU。然而,反之则不然;更改 IP MTU 值不会影响 mtu 命令的值。
Pls rate useful post(s).
请对有用的文章进行评分。
Rgds,
此致,
AK
View solution in original post
via:
车小胖谈网络:MTU 与 MSS_wan mss-CSDN博客
https://blog.csdn.net/Scythe666/article/details/51967606ip-mtu 与 mtu 的区别 - 知了社区
https://zhiliao.h3c.com/questions/dispcont/67716已解决:接口 mtu 和 ip mtu 的区别 - Cisco 社区
https://community.cisco.com/t5/vpn/difference-between-interface-mtu-and-ip-mtu/td-p/650311