Windows下如何通过编程为网络套接字设置TOS/DSCP标记?
如何通过C#编程为UDP套接字设置TOS/DSCP标记
我尝试用C#给UDP数据包标记Type of Service(TOS)/DSCP字节,当前的实现代码如下:
UdpClient udpClient = new UdpClient(); string ipAddress = "xxx.xxx.xxx.xxx"; int port = 3999; udpClient.Connect(ipAddress, port); udpClient.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.TypeOfService, 8); Console.WriteLine(udpClient.Client.GetSocketOption(SocketOptionLevel.IP, SocketOptionName.TypeOfService)); // 输出值为8 udpClient.Send(Encoding.ASCII.GetBytes("Hello World!")); udpClient.Close();
虽然控制台输出显示TOS设置成功(返回值为8),但用Wireshark捕获到的数据包DSCP值始终是0。我已经尝试过以下注册表修改:
- 在
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\QoS路径下,将Do not use NLA的DWORD值设为1 - 在
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters路径下,将DisableUserTOSSetting的DWORD值设为0 - 在组策略编辑器中修改“高级QoS设置”,允许应用程序覆盖策略设置
我需要的是纯编程实现的解决方案,不需要用户手动修改组策略,方便通过程序UI进行控制。
内容的提问来源于stack exchange,提问作者jlwilson
相关产品推荐
相关产品推荐

