pingが他のpingコマンドパケットを受信したのはなぜですか?

pingが他のpingコマンドパケットを受信したのはなぜですか?

Cでpingの実装について学んでいます。問題は、パケットを受信するために生のソケットを使用していることです。すべてのパケットに識別値がありますICMP header

複数の端末で動作していますping

たとえば、私はping google.com3つの端末のうち3つを実行しています。

最初のpingのID値は23456、2番目のpingのID値は34564、3番目のpingのID値は98763です。

私の問題は、2番目のpingがパケット34564のIDを受け取る必要があり、ID値23456を受信することです。

各 ping に新しい生のソケットが作成されます。しかし、別のpingパケットを受信します。

他のpingパケットを受信する理由を説明できる人はいますか?

答え1

デフォルトでは、rawソケットはすべてのICMPパケットをキャプチャします。引用した内部番号は、現在のプロセスでパケットを識別するのとまったく同じです。 ICMPには、プロトコルスタックが各ソケットを逆多重化できるようにするポート番号はありません。

あなたの意見に答えるなら、パケットを受け取ったら失われたのではないでしょうか? pingなどのすべてのソケットは一致するすべてのパケットのコピーを取得するため、実行中のすべてのpingは受信したすべてのICMPパケットのコピーを取得します。

関連情報