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

该机器有两个网卡,因此我开始使用另一个网卡并开始遇到相同的问题。

我可以用两个网卡ping我的设备,所以我认为我的C#代码一定做错了,但是我不确定是什么。在Windows XP上使用UdpClient的.NET 4中,您可以做错什么导致此问题吗?

最佳答案

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


无论如何,UDP协议(protocol)defines the checksum as optional和零都是校验和的有效值。这是为了允许处理能力低的设备跳过校验和计算。校验和通常将由处理该数据包的第一个网络节点(例如路由器)填充。即使它保持为零,您的设备仍应接受该数据包,因为它是有效的。

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

09-26 22:26
查看更多