2013-07-15 58 views
0

我目前正在使用VisualBasic.NET中的項目,並正在使用原始套接字來構建通過套接字發送的數據包。這是因爲我必須在IP數據包的標頭中設置服務類型字段,而在現代版本的Windows中,Winsock是不可能的。我無法使用Diffserv,因爲應用程序正在與之交談的嵌入式設備要求我使用完整的TOS字段。Microsoft .NET原始套接字類型的服務字段

當前的代碼實現相當簡單,並且工作得非常好 - 但只能在Windows 8中運行。如果代碼在任何其他Windows操作系統(XP或7)上運行,則TOS字段將被覆蓋爲0,無論如何需要爲我正在使用的設備設置爲2)。

我已經瀏覽了互聯網上的所有關於此的提示,並且發現了幾個註冊表更改(所有這些都試圖無效)以及組策略編輯。其中大部分是爲了使得能夠在Winsock中設置TOS字段,該字段僅適用於XP。

我被引導認爲這個問題是由於Windows操作系統的網絡層設置發生了一些變化而引起的,但很難準確地確定發生了什麼變化。

任何幫助,將不勝感激。

+0

作爲更新,我們已經確定它是明確擁塞通知被清零。當嘗試更大的TOS值時,高位被設置,但低位被Windows清除。 – euantorano

回答

0

經過很多調查,我們發現了幾件事情。

  • 您可以通過下面的註冊表更改正確設置在Windows 8 TOS字段:

    [HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \服務\ TCPIP \的QoS] 「不使用NLA」=」 1"

  • 可以正確設置使用的WinSock XP中通過進行下面的註冊表變化的TOS字段:

    [HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \服務\ TCPIP \參數] 「DisableUserTOSSetting」= dword:00000000

  • 不能貌似改變了Windows 7中的TOS字段。我們嘗試了幾種不同的代碼和Windows 7版本,但都沒有成功。

我不知道爲什麼上面的陳述是真實的100%,但它們是什麼,我們已經發現了大約一個月的各種不同的設備和操作系統的變體測試。