Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft.NET原始套接字服务类型字段_.net_Vb.net_Sockets - Fatal编程技术网

Microsoft.NET原始套接字服务类型字段

Microsoft.NET原始套接字服务类型字段,.net,vb.net,sockets,.net,Vb.net,Sockets,我目前正在VisualBasic.NET中的一个项目中工作,并且正在使用原始套接字构建通过套接字发送的数据包。这是因为我必须在IP数据包的报头中设置服务类型字段,在现代版本的Windows中,Winsock不可能做到这一点。我不能使用Diffserv,因为应用程序正在与之通信的嵌入式设备要求我使用完整的TOS字段 当前的代码实现相当简单,并且工作得非常好-但仅在Windows8中。如果代码在任何其他Windows操作系统(XP或7)上运行,则无论发生什么情况,TOS字段都将被覆盖为0(对于我正在

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

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

我在互联网上到处寻找关于这一点的提示,并发现了一些注册表更改(所有这些我都尝试过了,但都无济于事)以及组策略编辑。其中大多数用于启用Winsock中设置TOS字段的功能,Winsock仅在XP上工作

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


任何帮助都将不胜感激。

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

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

    [HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\QoS] “不要使用NLA”=“1”

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

    [HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] “DisableUserTownting”=dword:00000000

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


我不能100%确定上述说法的真实性,但这是我们在各种不同机器和操作系统变体上进行了一个月的测试后发现的。

作为更新,我们已经发现,是显式拥塞通知被归零了。尝试较大TOS值时,设置高位,但Windows会清除低位。