マルチキャスト パケットを継続的に送信しているマルチキャスト サーバーがあります。同じマシン上でこのデータをリッスンしているリスナーが 1 つあります (ループバック マルチキャスト)。リスナーの 1 つのインスタンスのみが実行されている場合、パケットのドロップは見られませんが、複数のインスタンスを実行すると、リスナーの両方のインスタンスによってパケットがドロップされていることがわかります。なぜこれが起こっているのか、この問題に取り組むためのオープンソースのソリューションがあるのか どうか誰かが説明できますか? 前もって感謝します!
2699 次
1 に答える
3
UDP は信頼性メカニズムを提供しません。これは、レイヤ 3 パケットが失われた場合、それを回復する方法がないことを意味します。
localhost 接続では、キューのオーバーフローによってパケットが失われる可能性があります。アプリケーションが一時的にデータを書き込む速度が、OS がキューを処理できる速度を超えた場合、送信キューがオーバーフローする可能性があります。同様に、アプリケーションが十分な速さでデータを読み取らない場合、受信キューがオーバーフローする可能性があります。リスナーが 2 つあると、システムはより多くの作業を行うため、オーバーフローが発生する可能性が高くなります。
Linux では、netstat -su で RcvbufErrors と SndbufErrors が表示されます。これらのバッファのサイズは、setsockopt SO_SNDBUF および SO_RCVBUF を使用して増やすことができます。これらの値は、/proc/sys/net/core/wmem_max および rmem_max によって制限されます。
Windows では、同じソケットが利用できるようで、ここで行うようにデフォルトを変更できます。
于 2015-06-09T22:54:59.973 に答える