0

UDP パケットを受信するためにマルチキャスト グループに接続しようとしています。私が使用しているコードはうまく機能しており、パケットを受信して​​いますが、これまで問題はありませんでした。しかし、マルチキャスト参加メッセージを確認する必要があるスイッチをパケットが通過する必要があるという新しい要件があります。以前はダムスイッチでしたが、これは問題ではありませんでした。

マルチキャスト グループに参加するには、次のコードを使用します。

var LocalAddress = "228.12.12.27";
var LocalPort = 46715;
var LocalEndPoint = new IPEndPoint(IPAddress.Parse(LocalAddress), LocalPort);
var RxSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

RxSocket.Blocking = false;
RxSocket.ReceiveBufferSize = UInt16.MaxValue;
RxSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);

RxSocket.Bind(new IPEndPoint(IPAddress.Any, LocalEndPoint.Port));
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address));
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 50);

RxSocket.Close();

IGMP Join メッセージを生成する行は次のとおりです。

RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address));

そして、IGMP Join メッセージが送信されます。

ただし、Wireshark でネットワークをスヌープすると、IGMP メッセージのチェックサムが正しくないことがわかります。 http://i.imgur.com/6Ct52QG.png

これは私のコードの問題ですか、それとも入力の問題ですか? それとも他に何かありますか?

4

2 に答える 2

0

これは私のコードの問題ですか

いいえ、コードがIPチェックサムを生成していないためです。これは、OSのネットワークスタックによって生成されるか、Nikolai Fetissovが回答で指摘したように、ネットワークアダプターによって生成されます。

ネットワークアナライザがパケットを送信したマシンで実行されており、チェックサムがネットワークスタックではなくネットワークアダプタによって生成される場合、独自のパケットのキャプチャはネットワークスタックによって「それらのパケットをループバック」するため、ネットワークアダプタが送信するパケットをキャプチャするのではなく、キャプチャメカニズム(アダプタが存在する場合はほとんどありません)では、キャプチャされたパケットのIPチェックサムは計算されないため、ほぼ確実にIPチェックサムが不良であるように見えます。

「「IPチェックサムオフロード」が原因である可能性がありますか?」に注意してください。Wiresharkディスプレイで。それがWiresharkが話していることです。

于 2013-03-07T22:06:27.243 に答える
0

これは、ハードウェアでチェックサムを実行する最新のネットワークカードで予想されます。これについては心配しないでください。

于 2013-03-07T19:52:03.843 に答える