如何确定TCP Chimney Offload是否在工作
发布网友
发布时间:2023-06-23 09:02
我来回答
共1个回答
热心网友
时间:2023-07-12 20:40
在使用WireShark等截取数据包时,往往会出现错误的CheckSum,这主要是因为网卡开启了CheckSum Offload(硬件校验和) 功能,系统将CheckSum的计算工作交由网卡去计算,在高速网络交换的情况下可以大大减轻CPU的工作负荷。
在windows系统中的Checksum Offload过程如下:如果网卡支持,在高级选项里可以设置
Checksum Offload是否对Rx(接收端)或Tx(发送端)有效,也可以设置为对两者都有效。
对于Tx,设置Checksum Offload有效之后,Windows的传输层将随机填充TCP校验和,因此在本机上抓取的数据包是Bad CheckSum。然后,网卡会自动计算正确的校验码然后发送,因此对方收到的仍然是正确的TCP包。
对Rx,设置Checksum Offload有效之后,网卡在接收数据时,会填充一个NDIS_TCP_IP_CHECKSUM_PACKET_INFO 结构并设置标志位,由网卡完成数据校验;如果由于某种原因失败,则不设置标志位,由Windows里的TCP/IP协议栈来完成数据校验。
其实就是说,由于开启了硬件校验和功能,传输层并没有计算校验和,而是随机填了个数,所以你抓到的包校验和是错的,而这个错误的校验和在网卡发送出去前会被网卡改正过来,所以接收端收到的包是校验和正确的包,会发回反馈