Cisco MTU和IP MTU

在 Cisco IOS 中我们可以使用MTUIP MTU对接口的 MTU 值进行修改:

    • MTU命令用于修改二层 MTU
    • IP MTU命令用于修改三层 MTU

https://www.cisco.com/c/dam/en/us/support/docs/ios-nx-os-software/ios-xr-software/116350-trouble-ios-xr-mtu-01.jpg

根据数据包封装顺序的先后我们可以看出二层 MTU 决定了数据包的最大值,三层 MTU 必须小于或等于二层 MTU 的值。常见的二层封装有 Ethernet,PPP,HDLC,常见的三层封装有 IPv4,IPv6 等。我们用最常见的 Ethernet 来深入探索一下 MTU 的取值因素。

一个标准的 Ethernet 帧有 14 bytes,而一个带有 802.1Q VLAN Tag 的 Ethernet 帧有 18 bytes (802.1Q Tag 有 4 bytes)。当然还有其他的情况例如 QinQ,这里不讨论。

以一个标准的 Ethernet 帧为例,如果想让 payload 里的数据包达到 1500 bytes (即三层 MTU)那么二层 MTU 的值应该设置为 1514 bytes (1500+14)。

在 Cisco IOS 中 MTU 命令及对应的 show 命令设置和显示的 MTU 值是不包含 14 bytes 的二层 Ethernet 包头的。

Router#show interfaces fastEthernet 0/0 | include MTU
MTU 1500 bytes, BW 100000 Kbit/sec, DLY 100 usec,

通过抓包我们可以看见真正的数据包大小为 1514 bytes (1460 bytes 的 TCP payload + 20 bytes 的 IP 包头 + 14 bytes 的 Ethernet 包头)。

需要注意的是在 Cisco IOS XR 中 MTU 命令及对应的 show 命令设置和显示的 MTU 值是包含 14 bytes 的二层 Ethernet 包头的。

如果 IOS 和 IOS XR 连接在一起,IOS 的 MTU 设置为 x,那么 IOS XR 的 MTU 应该设置为 x+14。

ip mtu,ipv6 mtu,mpls mtu 在 IOS 和 IOS XR 中的用法相同,其设置的 MTU 值都包含了三层包头。

更详细资料可以参考 Cisco MTU Behavior on Cisco IOS XR and Cisco IOS Routers (Document ID:116350)。

发表评论

电子邮件地址不会被公开。