TCP校验和会影响上层应用吗,为什么我这里校验和出错仍然可以完成HTTP会话?
用wireshark抓包发现,从本机发出去的TCP包都出现校验和出错的问题(checksum offload问题导致)。尽管如此,我仍然可以正常地浏览网页(http连接),这是为什么呢?难道web服务器的tcp协议栈没有进行校验和的检验,而直接忽略这个问题吗?请教请教
[解决办法]
这个问题是现在的操作系统和网卡驱动之间的一个优化。在TCP/IP协议中规定,每个TCP包需要校验和,但是用CPU进行软计算,需要消耗很多CPU的时间。现在很多新的网卡都支持自动计算这些传输协议不同层的校验和,包括传输层、网络IP层和链路层的校验。当发送TCP数据包是,协议栈并不使用CPU计算校验,而是在发送的数据包中填上一个无效校验标示,那么网卡在发送这个数据包时,通过网卡硬件来完成计算并自动填充这个校验报文。这样把CPU的计算任务转给网卡,降低了CPU的负荷。而监视软件正好是在协议栈和网卡之间收到为校验的数据包。所以就发生这种情况。实际通讯是正常的。