1

ping6WinSock2 を使用してプログラムで ICMPv6 エコー リクエスト ( ) を送信しようとしています。ICMPv6 チェックサムは、送信される IPv6 パケット全体に基づいて計算されます。そのため、私が理解していることから、OS(カーネル?)はそれを計算し、パケットを送信するときにICMPv6ヘッダーに書き込むことになっています。

これは SUSE Linux Enterprise Server 11 では非常にうまく機能しますが、Windows XP ではそうではないようです。チェックサムはデフォルトで設定した値 (ゼロ、Wireshark を使用して分析) のままになるため、受信側はそれを破棄し、応答しません。

この WinXP マシンでは IPv6 が正しく設定されています。Wireshark の助けを借りて、まったく同じコードを使用して送信された SUSE Linux サーバーからの ICMPv6 ping に正しく応答することがわかりました。したがって、Windows XP が ICMPv6 をサポートしていないわけではありません。しかし、Windows XP の WinSock2 はそうするのだろうか。

WinSock2 API はIPPROTO_ICMPV6、生のソケットを作成するためのプロトコルを提供します。ICMPv6 チェックサムを自動的に計算するために設定する必要がある特別なソケット オプションはありますか、それとも他のトリックはありますか?

4

1 に答える 1

0

あなたが説明する行動の最も可能性の高い理由はchecksum offloading. つまり、チェックサムの計算がネットワーク ハードウェアに委任される可能性があるため、盗聴されたパケットに正しいチェックサム値が含まれていない可能性があります。http://www.wireshark.org/docs/wsug_html_chunked/ChAdvChecksums.htmlまたはhttp://en.wikipedia.org/wiki/Transmission_Control_Protocol#Checksum_offloadを参照してください。

于 2011-03-10T20:46:19.457 に答える