5

我正在尝试将 UDP 数据报从 Windows XP 上的 UdpClient 发送到设备,但它没有响应。当我查看 Wireshark 中的流量时,我发现我的出站数据包很糟糕,因为它们的所有 IP 标头校验和都是 0x0000。

这台机器有两个网卡,所以我开始使用另一个网卡并开始遇到同样的问题。

我可以用两个网卡 ping 我的设备就好了,所以我认为我的 C# 代码一定有什么问题,但我不确定是什么。在带有 UdpClient 的 Windows XP 上的 .NET 4 中,您是否可以做错什么事情来导致这种情况?

4

2 回答 2

8

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

在此处输入图像描述 在此处输入图像描述

在任何情况下,UDP 协议都将校验和定义为可选,并且零是校验和的有效值。这是为了让处理能力较低的设备跳过校验和计算。校验和通常由处理数据包的第一个网络节点(例如路由器)填写。即使它保持为零,您的设备仍应接受有效的数据包。

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

于 2012-07-11T13:46:26.440 回答
4

看起来是驱动问题。尝试在驱动程序属性中关闭校验和卸载。

或者,如果您在同一台机器上运行 Wireshark,则可能是校验和卸载工作正常,而 Wireshark 没有报告校验和,因为它是在 Wireshark 看到数据包后计算的。

要确认在单独的框中运行 wireshark 以确认校验和为零或不为零。

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

于 2012-07-11T13:42:12.843 回答