巨大的巨型框架?

巨大的巨型框架?

我有一台 2960g cisco 交换机和两台服务器,每台服务器有 4 个 NIC,配置为 lacp 模式。我在网络上启用了巨型帧(9000 字节)。我测试了文件传输,它以全速运行(100Mb/s,而没有巨型帧时约为 80Mb/s。我知道从一个 IP 到另一个 IP 的 tcp 传输只会使用 lacp 提供的 4 个链接中的 1 个。)

我捕获了其中一个网卡,惊讶地发现帧有 17966、26914 甚至 44810 字节......大多数帧只有 9018 字节,这是理所当然的。但是这些 40kb 的巨型帧是怎么/为什么/是什么?我甚至没想到这是可能的......

这是 lacp 的副作用吗?请注意,无论我从绑定接口还是实际传输数据的从属接口捕获这些帧,我都能看到它们。或者这是通过 tcpdump 以某种方式进入的伪影?还是我需要换眼镜?

谢谢,

文森特

答案1

它可能是 TCP 传输分段卸载 (TSO),也可能与大型接收卸载 (LRO) 结合使用。

您是在进行测试的其中一台机器上捕获的,而不是在独立的观察机器上。因此,您实际上并没有看到线路上的情况,您看到的是主机的网络堆栈与其以太网 NIC 之间的情况。当 NIC 为其主机提供 TSO 和 LRO 等服务时,主机与其 NIC 之间的数据包比 NIC 实际在线上发送/接收的数据包大得多。

如果设置单独的嗅探器和端口镜像太不方便,您可以禁用 TSO 和 LRO,以便您看到更像实际在线上的内容。

例如,如果您的服务器运行的是 OS X,您可以使用这些 sysctl 来禁用 TSO 和 LRO:

sudo sysctl -w net.inet.tcp.tso=0 net.inet.tcp.lro=0

当然,如果这样做,您可能会获得更高的 CPU 利用率和更低的吞吐量,但至少您的数据包捕获看起来会更加合理。

相关内容