3

UDP に基づく大規模なシステムで通信を最適化しようとしています。最適化とは、パケットの損失を最小限に抑えることを意味します。(はい、UDP の固有の制限を知っています。別のプロトコルを提案しないでください) それぞれ複数のスレッドを持つ複数の .exe があり、使用します

setsockopt with SO_SNDBUF  & SO_RCVBUF to increase to bufers. 

多くのソケットに非常に大きなバッファーを設定すると、全体的なパフォーマンスが低下する (パケット損失が増える) ことを経験しましたが、これらの増加したバッファー サイズの影響を監視するにはどうすればよいでしょうか? . 特に受信側では、バッファ不足のためにメッセージが破棄されたポートがあるかどうかを確認したいと思います。

これを行う方法を提案してください(ユーザーまたはカーネルモードでのWindbg、特別なプログラム、何かを自分で考えて)

編集: @EdChum: 私はすでに WireShark を使用しています。はい、ワイヤ上のパケットとアプリケーションが受信したパケットを関連付けるのは面倒です。また、パケットがネットワーク上にある (Wireshark によってキャプチャされた) が、アプリケーションによって受信されない場合も何度か見てきました。失われたこれらのパケットは通常、マルチキャスト宛先への小さなパケットであり、大きなユニキャスト パケットの後に非常に短い時間間隔で送信されます。ユニキャストの受信者はマルチキャストを失いますが、他の受信者はそれを受信します。

私の疑惑は、XP が NDIS または IP レイヤーのどこかでバッファ不足に悩まされることがあり、そのためパケットを静かにドロップすることです。どこかにカウンターがあれば、これを確認できます。

4

1 に答える 1

1

WinDbg を使用してこれを行う方法はわかりませんが、NetMonまたはWireSharkのいずれかを使用してパケットを監視し、破棄されているかどうかを確認します。再現がどれほど簡単かによっては苦痛になるため、パケットをフィルタリングする方法を学ぶ必要があります。興味のあるものをディスプレイに表示できるようにしますが、両方のアプリのヘルプは非常に便利です。

パケットを監視するには、ループバック アドレスではなく、物理ソケットをリッスンする必要があります。

于 2012-07-05T15:42:50.370 に答える