1

我遇到了套接字编程工作的问题。我编写了一个通过套接字/网络流发送命令的 TCP 客户端。我正在使用Wireshark查看通过电线的原始数据。每次我发送“命令”(意味着我 Flush() 网络流)时,Wireshark 应用程序都会告诉我 TCP 标头中的校验和不正确(说“它应该是 0x2440,但是是 0x0000)。我确实收到了 ACK .我不明白为什么在应用程序层我必须关心 TCP 标头。这是不对的。有人知道我为什么会收到这个“错误”。有没有我不知道的设置? 我正在使用带有 Tcp 的 .NET 2.0 套接字。谢谢。

4

1 回答 1

8

您是否正在查看发送数据的机器上的 Wireshark 转储?如果是这样,则可能只是在 Wireshark 看到它的堆栈中没有计算校验和。现在许多网卡都有 TCP Checksum Offload,校验和由硬件完成,因此校验和字段在输出时将为零(Wireshark 在数据包发送到硬件之前获取数据包)。由于您收到了 ACK,因此接收端显然很酷。此外,如果您正在与 localhost 对话,您的堆栈可能根本不会受到校验和的困扰(对于主机与自身对话来说,它们并不是绝对必要的)。

于 2010-02-03T07:03:46.280 回答