可以看到 TCP 的包体数据大小为 1448,因为TCP 头部里包含了 12 字节的选项(Options)字段,头部大小从之前的 20 字节变为了 32 字节,所以 TCP 包体大小变为了:
1500(以太网 MTU) - 20(IP 固定表头大小) - 20(TCP 固定表头大小) - 12(TCP 表头选项) = 1448
08:32:21.763805 IP node2.60050 > node1.webcache: Flags [.], seq 3473564928:3473567824, ack 2740428445, win 115, options [nop,nop,TS val 186183458 ecr 111187312], length 2896
08:32:21.764056 IP node1.webcache > node2.60050: Flags [.], ack 3473567824, win 61, options [nop,nop,TS val 111187313 ecr 186183458], length 0
node2->node1;
这就要说到 TSO(TCP Segment Offload)特性了,TSO 特性是指由网卡代替 CPU 实现 packet 的分段和合并,节省系统资源,
因此 TCP 可以抓到超过 MTU 的包,但是不是真正传输的单个包会超过链路的 MTU。
node1:/root/test#ethtool -k eth1 | grep tcp
tcp-segmentation-offload: on