5

Windows XP の UdpClient からデバイスに UDP データグラムを送信しようとしていますが、応答しません。Wireshark でそのトラフィックを確認すると、発信パケットが不良であることがわかります。これは、すべての IP ヘッダー チェックサムが 0x0000 であるためです。

マシンには 2 つのネットワーク カードが搭載されているため、もう一方のネットワーク カードを使用し始めたところ、同じ問題が発生し始めました。

両方のネットワーク カードを使用してデバイスに問題なく ping を実行できるので、C# コードに何か問題があるに違いないと思いますが、何が原因かはわかりません。Windows XP の .NET 4 で UdpClient を使用すると、これを引き起こす可能性がありますか?

4

2 に答える 2

8

Windows がチェックサム計算のハードウェア オフロードを実行しているため、空のチェックサムが表示されます。これは、ネットワーク インターフェイス カード (NIC) のプロセッサによって実行されます。パケット スニファーを使用してパケットをキャプチャすると、NIC によって処理される前のパケットが表示されます。デバイス マネージャーの下にあるデバイスのプロパティ ページからオフロードをオフにすることができます。

ここに画像の説明を入力 ここに画像の説明を入力

いずれの場合も、UDP プロトコルはチェックサムをオプションとして定義しており、ゼロはチェックサムの有効な値です。これは、処理能力の低いデバイスがチェックサム計算をスキップできるようにするためです。通常、チェックサムは、パケットを処理する最初のネットワーク ノード (ルーターなど) によって埋められます。ゼロのままであっても、デバイスは有効なパケットを受け入れる必要があります。

編集:UPDヘッダーではなく、IPヘッダーについて話していることに気づきました。これは両方に適用されますが、IP ヘッダーのチェックサムはオプションではありません (NIC によって計算されます)。

于 2012-07-11T13:46:26.440 に答える
4

ドライバーの問題のようです。ドライバーのプロパティでチェックサム オフロードをオフにしてみてください。

または、同じマシンで Wireshark を実行している場合、チェックサム オフロードが正しく機能している可能性があります。Wireshark がチェックサムを報告していないのは、Wireshark がパケットを確認した後に計算されているためです。

別のボックスでwiresharkを実行して、チェックサムがゼロかゼロでないかを確認します。

結局、チェックサムが OK であれば、ファイアウォールの問題である可能性があります。リターン トラフィックを許可するファイアウォール ルールがローカル マシンに設定されていることを確認してください。

于 2012-07-11T13:42:12.843 に答える