我正在尝试启用巨型帧。我有一个 Linux 客户端和一个 Windows 服务器。我已经全面标准化了英特尔网卡。在 Windows 服务器上,巨型帧的唯一选择是9014
& 4088
。我研究过是否应该将 Linux 中的 MTU 速度设置为9014
或9000
。谷歌搜索时出现了相互矛盾的帖子,但似乎 可能9000
是正确的数字。当然,我都试过了。
从此开始地点我尝试测试一切是否正常工作。从我的 Linux 客户端来看:ping -M do -s 8972 [destinationIP]
一切似乎都正常工作:
来自文件 ([destinationIP]) 的 8980 字节:icmp_seq=1 ttl=128 时间=0.946 毫秒
来自文件 ([destinationIP]) 的 8980 字节:icmp_seq=2 ttl=128 时间=1.16 毫秒
来自文件 ([destinationIP]) 的 8980 字节:icmp_seq=3 ttl=128 时间=1.02 毫秒
来自文件 ([destinationIP]) 的 8980 字节:icmp_seq=5 ttl=128 时间=0.935 毫秒
但是当它尝试从 Windows 端测试时:ping -f -l 9000 [destinationIP]
正在 Ping <Linux 客户端> 包含 9000 字节数据:
数据包需要分片,但设置了 DF。
数据包需要分片,但设置了 DF。
数据包需要分片,但设置了 DF。
数据包需要分片,但设置了 DF。
在谷歌上搜索后,我看到了关于从 Windows 执行 ping 时应使用多大尺寸的相互矛盾的帖子。所以我试了一下8972 (9000-28)
,但超时了,没有得到任何回应。我甚至试过了,8986 (9014-28)
但还是得到了碎片错误。我以为这是 Windows/Linux 之间的问题,但当我尝试 ping 其他 Windows 服务器(每个服务器都启用了巨型帧)时,我遇到了同样的问题。我发现当我点击8972
它时它开始超时,然后9014
我8973
得到了碎片错误。所以我的问题是:
- 在 Linux 中是否
9000
使用正确的 MTU 速度(因为 Linux 和 Windows 之间存在差异)或者9014
? - 有人知道为什么我
fragmented
从 Windows 端收到这些错误,而从 Linux 端看来一切正常吗?
这是我的转变它显然支持高达9216
答案1
你需要区分:
- 以太网最大帧大小:需要考虑以太网 L2 开销,通常为 18 字节 - 标准为 1518 字节(无标记)
- IP MTU:这是您通常的目标 - 以太网上的标准是 1500 字节,巨型帧通常使用 9000
- 测试的最大
ping
有效载荷:ping 使用 ICMP(8 字节开销)通过 IPv4(20 字节开销) - 因此最大未分段 ping 有效载荷长度为 1472 字节(MTU 1500)或 8972 字节(MTU 9000)
要测试路径 MTU,您需要发送带有自由度位设置。这在 Windows 中由 实现-f
,在 Linux 中由实现-M prohibit
。您的-M do
* 明确启用了分段。测试时,“数据包需要分段但设置了 DF”显示源计算机缺少正确的设置。当 ping 超时时,目标或介于两者之间的某些东西无法正常工作。交换机通常有一个用于超大帧的计数器。
将交换机的最大帧大小设置为比需要的稍大一点不会有什么坏处。但是,请确保您的终端节点和路由器都设置为完全相同的大小:设置 MTU 时为 9000,设置最大 L2 PDU/帧大小时为 9018。
英特尔巨型数据包设置有些误导。帮助文本显示 FCS(4 个字节)不计算在内,因此9014
MTU 9000 帧的正确设置也是如此。