我试图将 UDP 数据报从 Windows XP 上的 UdpClient 发送到设备,但它没有响应。当我在 Wireshark 中查看该流量时,我发现出站数据包很糟糕,因为它们的所有 IP 标头校验和都是 0x0000。
该机器有两个网卡,因此我开始使用另一个网卡并开始遇到同样的问题。
我可以用两个网卡对我的设备执行 ping 操作,所以我认为我的 C# 代码一定有什么问题,但我不确定是什么。在 Windows XP 上的 .NET 4 中,使用 UdpClient 是否会做错什么导致出现这种情况?
您看到的校验和为空,因为 Windows 正在执行校验和计算的硬件卸载。它将由网络接口卡 (NIC) 处理器执行。使用数据包嗅探器捕获数据包将在 NIC 处理数据包之前显示该数据包。您可以从设备管理器下的设备属性页面关闭卸载:
无论如何,UDP协议将校验和定义为可选 http://en.wikipedia.org/wiki/User_Datagram_Protocol#IPv4_PSEUDO-HEADER,零是校验和的有效值。这是为了允许处理能力较低的设备跳过校验和计算。校验和通常由处理数据包的第一个网络节点(例如路由器)填写。即使它保持为零,您的设备仍然应该接受有效的数据包。
EDIT:我刚刚意识到您正在谈论 IP 标头,而不是 UPD 标头。这对两者都适用,只是 IP 标头校验和不是可选的(并且将由您的 NIC 计算)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)