数据包捕获显示大于 MTU 的数据包

网络工程 包分析 mtu
2022-03-01 03:32:02

我一直在对位于本地网络中的两台 CentOS 计算机进行一些测试,但我不明白结果。我们有一个简单的应用程序,其中客户端 (xyz204) 将文本字符串发送到服务器 (xyz205)。一些捕获的数据包的有效负载大于 MTU:

x.y.z.205:~/ tshark -i br0 "host x.y.z.204"
Capturing on 'br0'
   [...]
   10 0.000357812 x.y.z.204 ? x.y.z.205 TCP 7306 40866 ? 1234 [ACK] Seq=6793 Ack=1 Win=29312 Len=7240 TSval=1462059169 TSecr=875693118
   [...]

具体来说,第 10 帧为 7306 字节(7240 字节的 TCP 数据 + 32 字节的 TCP 头 + 20 字节的 IP 头 + 14 字节的以太网头)。

但是,网络接口似乎不支持大于 1500 字节的 MTU。这由接口配置指示:

x.y.z.204:~/ ip link list
   [...]
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 00:xx:18:yy:6c:zz brd ff:ff:ff:ff:ff:ff
   [...]

或者通过 ICMP 测试:

x.y.z.204:~/ ping -M do -s 7240 x.y.z.205
PING x.y.z.205 (x.y.z.205) 7240(7268) bytes of data.
ping: local error: Message too long, mtu=1500
^C 

如果接口配置或 ping 测试表明 MTU 为 1500 字节,我们怎么可能捕获 7240 字节的数据包?

1个回答

当 TCP 卸载处于活动状态(大接收卸载 LRO)时,可能会看到类似的效果 - NIC 的卸载引擎将多个 TCP 段聚合到单个虚拟段和数据包中,从而减少主机处理开销。

背景:https ://en.wikipedia.org/wiki/TCP_offload_engine