解决方案 »

  1.   

    1  在实际使用过程中,看到过wireshark抓包中tcp checksum错误的情况,但是实际是正确的。
    2  你使用的什么网卡,只有一些特别的网卡很识tcp 计算tcpchecksum,照理应该由协议栈计算tcpchecksum。看了一下你的两个报文的截图,也有可能是你的第二个报文的帧长度小于60导致的。正常情况,如果报文长度不足60(带链路层的长度),要补上一些字节到60.而你的syn ack报文有60,没有具体的报文,你可以将报文发给我看一下。
      

  2.   

    始终也没看明白你是在client端还是server端offload的offload 后,本机外发的包的校验和会由硬件计算并填充,本机收到的包自然不会重算校验和并填充,如果是那样的话,天下就没有错包了。收到的包的处理流程是算校验和,然后和包中的校验和对比,不匹配则抛弃。offload只影响本机外发的包
      

  3.   

    1.针对这种情况,应该是关闭了wireshark中的TCP校验功能,所以可能显示校验错误,而实际是正确的,因为他可能本来就没有进行相关计算
    2.按照实际项目中的情况,网卡确实应该是计算了,因为后来关闭此功能后问题修复了
    3.对于你说的SYN+ACK包的长度有60,而普通的ACK包没有达到60,这个对TCP协议栈是否进行校验和有影响么?这方面有没有具体的协议说明啥的,麻烦分享下,谢谢啦~
      

  4.   

    这个是在Server端的offload,现在的问题是从现象上看是Server端的网卡对SYN+ACK包进行了TCP校验和的计算,而对ACK包没有进行计算,导致client侧一直接受不到正确的ACK,我想知道的是为什么同是由Server往外发的包,一个校验正确一个错误,这个是我的疑惑,不过还是感谢回复啦~