2010-02-03 36 views
1

我遇到了套接字编程作业问题。我写了一个通过套接字/网络流发送命令的TCP客户端。我使用Wireshark来查看通过电线的原始数据。每次我发送一个“命令”(意思是Flush()网络流),Wireshark应用程序告诉我TCP报头中的校验和不正确(说“它应该是0x2440,但是是0x0000)。 我不明白为什么在应用程序层我不得不关心TCP头,这是不对的 有人会知道为什么我得到这个“错误”。是否有设置我是不知道呢? 我使用.NET 2.0插槽和TCP。 谢谢。使用.NET进行TCP编程

回答

8

您是否在寻找一个Wireshark的距离正在发送数据的机器倾倒?如果是的话,它可能只是校验在Wireshark看到它的堆栈中没有被计算出来,现在很多网卡都有TCP Checksum Offload,w这里的校验和是由硬件完成的,所以校验和字段在出路时为零(Wireshark在将数据包发送到硬件之前获取数据包)。由于你收到ACK,接收端显然很酷。另外,如果你正在与本地主机通话,你的堆栈可能根本不会受到校验和的困扰(它们对于主机自身来说不是必须的)。

+0

感谢您的解释。我不知道。既然你对这些东西很熟悉,我可以问一下如何使用Wireshark来理解发送的字节流?根据专有协议,我正在实现包含文本的数据包。但是,当我尝试解码数据包时,我只会听到乱码。再次感谢。 – John 2010-02-03 07:12:19

+0

@John:不知道你在看哪个协议,我们无法确定。如果您在Wireshark中执行“遵循TCP流”,它是否不会显示任何有用的数据? – 2010-02-03 07:14:16

+0

@Jon:这是标准的TCP流媒体。 “Follow TCP Stream”是否会以某种方式将数据包粘在一起。我应该收到的数据是一个纯文本文件。我会更多地关注Wireshark。谢谢。 – John 2010-02-03 07:25:16