2012-07-11 90 views
4

我想从Windows XP上的UdpClient发送UDP数据报到设备,但它没有响应。当我查看Wireshark中的流量时,发现我的出站数据包不好,因为它们的IP头校验和都是0x0000。什么会导致UDP数据报不能计算IP头校验和?

机器有两块网卡,所以我开始使用另一块网卡并开始出现同样的问题。

我可以用两个网卡ping我的设备就好,所以我认为必须有一些我的C#代码做错了,但我不知道是什么。有没有什么事情可以在Windows XP中使用UdpClient在.NET 4中做错?

回答

7

由于Windows正在执行校验和计算的硬件卸载,因此您会看到空的校验和。它将由网络接口​​卡(NIC)处理器执行。使用数据包嗅探器捕获数据包将在数据包被NIC处理之前显示数据包。您可以关闭设备管理器下,从设备的属性页卸载:

enter image description here enter image description here

在任何情况下,UDP协议defines the checksum as optional,零是校验和的有效值。这样可以让处理能力较低的设备跳过校验和计算。校验和通常由处理分组的第一网络节点(例如路由器)填充。即使它仍然为零,您的设备仍然应该接受数据包,因为它是有效的。

编辑:我刚刚意识到你说的是IP头,而不是UPD头。这适用于两者,但IP标头校验和不是可选的(并且将由您的NIC计算)。

+1

我想我会选择有图片的答案。 – John 2012-07-11 18:23:44

4

看起来像一个驱动程序问题。尝试关闭驱动程序属性中的校验和卸载。

或者,如果您在同一台计算机上运行wireshark,则可能是校验和卸载工作正常,并且Wireshark不报告校验和,因为它在Wireshark看到该数据包之后正在计算。

确认在单独的盒子上运行wireshark以确认校验和为零或不为零。

如果校验和毕竟是确定的,那很可能是防火墙问题。确保本地计算机上有防火墙规则,允许返回流量。

+0

感谢您的回答。 Upvoted为正确。 – John 2012-07-11 18:24:15

+0

@john,谢谢,哪一个是正确的 - 防火墙还是驱动程序问题? – Ben 2012-07-13 19:50:20

+0

卸载校验和 – John 2014-01-11 19:44:45