0

我目前正在 VisualBasic.NET 中的一个项目上工作,并且正在使用原始套接字来构建我的数据包以通过套接字发送。这是因为我必须在 IP 数据包的标头中设置服务类型字段,这在现代版本的 Windows 中使用 Winsock 是不可能的。我不能使用 Diffserv,因为应用程序正在与之通信的嵌入式设备要求我使用完整的 TOS 字段。

当前的代码实现相当简单并且运行良好 - 但仅在 Windows 8 中运行。如果代码在任何其他 Windows 操作系统(XP 或 7)上运行,则 TOS 字段无论如何都会被覆盖为 0(需要设置对于我正在使用的设备,设置为 2)。

我已经在整个互联网上寻找有关此的提示,并发现了几个注册表更改(所有这些我都试图无济于事)以及组策略编辑。其中大部分用于启用在 Winsock 中设置 TOS 字段的功能,该功能仅适用于 XP。

我被引导相信这个问题是由 Windows 操作系统的网络层设置中的一些变化引起的,但很难准确指出发生了什么变化。

任何帮助,将不胜感激。

4

1 回答 1

0

经过更多的调查,我们发现了几件事。

  • 通过进行以下注册表更改,您可以在 Windows 8 中正确设置 TOS 字段:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\QoS] "不要使用 NLA"="1"

  • 您可以在 XP 中使用 WinSock 正确设置 TOS 字段,方法是进行以下注册表更改:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "DisableUserTOSSetting"=dword:00000000

  • 您似乎无法更改 Windows 7 中的 TOS 字段。我们尝试了几种不同的代码变体和 Windows 7 版本,但均未成功。

我不能 100% 确定为什么上述陈述是正确的,但它们是我们在大约一个月的各种不同机器和操作系统变体上的测试中发现的。

于 2013-10-08T10:42:13.030 回答