0

私は現在、VisualBasic.NET のプロジェクトに取り組んでおり、未加工のソケットを使用してソケット経由で送信するパケットを作成しています。これは、IP パケットのヘッダーに Type of service フィールドを設定する必要があるためです。これは、最新バージョンの Windows の Winsock では不可能なことです。アプリケーションが通信している組み込みデバイスでは、完全な TOS フィールドを使用する必要があるため、Diffserv を使用できません。

現在のコードの実装はかなり単純化されており、完全に機能しますが、Windows 8 でのみ機能します。コードが他の Windows OS (XP または 7) で実行される場合、TOS フィールドは何があっても 0 として上書きされます (設定する必要があります)。私が使用しているデバイスの場合は2に)。

これに関するヒントを求めてインターネット全体を調べたところ、いくつかのレジストリの変更 (すべて役に立たなかった) とグループ ポリシーの編集が見つかりました。これらのほとんどは、XP でのみ動作する Winsock で TOS フィールドを設定する機能を有効にするためのものです。

この問題は、Windows OS のネットワーク層の設定が変更されたことが原因であると思われますが、何が変更されたのかを正確に特定することは困難です。

どんな助けでも大歓迎です。

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% わかりませんが、さまざまなマシンや OS バリアントでの約 1 か月のテストでわかったことです。

于 2013-10-08T10:42:13.030 に答える