UDPクライアントが100Mbitサーバーに1Gbitで送信するのはなぜですか?

UDPクライアントが100Mbitサーバーに1Gbitで送信するのはなぜですか?

Linuxユーザースペースで作成した単純なUDPクライアント/サーバーアプリケーションでは、UDPクライアント(1Gbitイーサネットインターフェース)が100MbitイーサネットインターフェースUDPサーバーにのみ1Gbitのデータを送信していることがわかりました。もちろん、これはサーバー側で多くのパケット損失を引き起こします。

クライアント側で、次の手順を実行してNIC設定を調整する必要がありました。

ethtool -s eth0 スピード 100 デュアル完全自動調整オン

なぜ私はこれをするべきですか?自動的に処理してはいけませんか?

答え1

UDPプロトコルこれは「実行後に忘れてしまう」送信方法なので、パケットが送信された後に何が起こっても構いません。これは、宛先への経路の特性にかかわらず、ソースシステムの送信速度で送信できることを意味する。ソースインターフェイスがネットワークが処理できるよりも速くパケットを送信すると、明らかにパケット損失が発生します。

これを自動的に処理する必要がある場合は、TCPまたはSCTPに切り替える必要があります。あるいは、UDPの上に独自のエラー処理プロトコルを構築することもできます。

特定の場合、宛先に到達するために100 Mbits / sを使用できる場合は、すべてのトラフィックを100 Mbits / sインターフェイス速度に制限するよりも、クライアントでトラフィック調整を使用する方がよいでしょう。

答え2

Stephenがすでに指摘しているように、UDPは望む手段を欠いています。

アプリケーションが見た目ほど愚かな場合は、ipipホスト間で仮想インターフェイスを設定し()、トラフィック調整を使用して()使用される帯域幅を制限することで速度を減らすことができます。ip linktc

答え3

他の回答で正しく指摘したように、UDPフロー制御はレイヤ7で管理する必要があります。

あなたがアプリケーションの唯一の作者である場合は、そのアプリケーションのオプションを定義できます。

  • 1秒あたりに送信されるメッセージの数を定義します。
  • または、将来のリリースへのトラフィックをどれだけ早く生成するか。
  • または、マルチキャストでない場合は、より多くのデータを送信するためにクライアントからの一種の承認を待ちます。

関連情報