欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

TCP checksum offload

程序员文章站 2022-03-05 15:48:51
TCP checksum offload   最近进行网络协议分析的过程中发现WireShark里显示本机发出去的一些数据包incorrect Checksum,并提示 mayb...

TCP checksum offload

 

最近进行网络协议分析的过程中发现WireShark里显示本机发出去的一些数据包incorrect Checksum,并提示 maybe caused by “TCP checksumoffload”

Goole上搜索下,发现把系统中的ChecksumOffload的设置改下就可以了。它网卡的一项功能,它可以替代系统的TCP/IP协议栈来计算TCP包的校验和。

 

Window系统中的Checksum Offload 在如下(如果网卡支持):

My Network Places(右键点Properties)— Local Area Connection(右键点Properties) — General(点击Configure…) — Advanced

打开后,就看见旁边有Checksum Offload 点击后,在右边更改为Rx TCP/IP Checksum即可。

 

Checksum Offload的设置有四种:是否对Rx或Tx有效,也可以为对两者都有效。

对于Tx,设置Checksum Offload有效之后,Windows的传输层将随机填充TCP校验和,因此在本机上抓取的数据包是Bad CheckSum。然后,网卡会自动计算正确的校验码然后发送,因此对方收到的仍然是正确的TCP包。

 

对于Rx,设置Checksum Offload有效之后,网卡在接收数据时,会填充一个NDIS_TCP_IP_CHECKSUM_PACKET_INFO 结构并设置标志位;如果由于某种原因失败,则不设置标志位,由Windows里的TCP/IP协议栈来完成数据校验。

 

CheckSum Offload实际上是将传输层的一部分工作交给了硬件完成,以节约系统的CPU资源。微软的测试表明它可以最多节约30%的CPU资源。IBM里AIX的文档则指出:对于PCI接口的千兆网卡来说还不如让400Mhz以上的CPU来计算校验和,而PCI-X的千兆网卡启用此项后可以达到线路速度,从而节约CPU资源