【网络实验】IP identification字段与TSO,GRO

本文探讨了TSO(TCP Segmentation Offload)技术如何影响IP头中的Identification值的变化规律,特别是在大包发送场景中。通过分析发现,Identification值的变化与包大小及MTU密切相关,并揭示了TSO技术对IP分片的影响以及内核如何处理IP和TCP校验和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IP头的identification的值由IP层维持的计数器产生,每产生一个数据包,计数器就加1,,并赋值给ID。ID并不是序号,因为IP是无连接服务。在IP分片(fragmentation)时,此值将被复制到各个片的ID,这样能使各个片最终能被重新组装为原来的数据包。

一 、在开启TSO后,内核每次发送大包,观察到连续两个大包的ID值和MTU、大包大小有关。Iperf TCP发包如下图所示:



ID值增加了5,考虑Frame 44的包长为7340,它能其实能拆分成5个MTU=1500的包。计算如下:7340 - 20(IP头) - 20(TCP头) = 7300. MTU为1500时,实际TCP payload最大为1500 - 20 - 20 = 1460. 而7300 / 1460 = 5.

假如此时关闭了接收方的GRO,那么将收到拆分后的小包,可以观察到ID每次加1的小包。


下图Frame号加2是因为应答上图那个包消耗了一帧。


再看一张。


二、发送方的TSO大包大小也有规律,每次变化为1460*N字节,其中N为正负整数。


三、开启TSO后,发送方内核栈仍然计算了正确的IP头校验和,但不计算TCP校验和。这是因为IP的校验和只关心IP头,TSO分包后IP头的校验和没变。但TCP的校验和与整个TCP包有关(伪首部涉及的少量IP头字段对这里没有影响),所以没必要计算。具体可以查看内核代码验证。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值