22

さて、私はネットワーキングコースのプログラミングをしていて、UDPを使用してJavaでプロジェクトを実装する必要があります。指定された確率でパケットを破損する「gremlin」関数とともに、HTTPサーバーとクライアントを実装しています。HTTPサーバーは、UDPを介してクライアントに送信するために、アプリケーション層で大きなファイルを複数のセグメントに分割する必要があります。クライアントは、受信したセグメントをアプリケーション層で再構築する必要があります。しかし、私が疑問に思っているのは、UDPが定義上信頼できない場合、なぜここで信頼性の欠如をシミュレートする必要があるのでしょうか。

私の最初の考えは、おそらく私のインストラクターが私たちの場合を考えているからだと思います。クライアントとサーバーの両方が同じマシンで実行され、ファイルはUDPを介しても100%確実に1つのプロセスから別のプロセスに転送されます。同じコンピューター上の2つのプロセスの間にあります。

これにより、サーバーとクライアントが同じ物理マシン上の2つのプロセスであり、厳密にルーティングされることが保証されている場合、UDPが実際にパケットを失ったり、パケットを破損したり、パケットを順不同で配信したりする可能性があるかどうかを最初に疑問視しました。 localhostを介してのみ、ネットワークを介して送信されないようにします。

また、一般的に、特定のパケットについて、かなり地理的に離れた2つのホスト間のオープンインターネットを介した通信を容易にするために使用されているときに、UDPがパケットをドロップ/破損/または順序どおりに配信しないおおよその確率を知りたいと思います。互いに離れている(米国の平均的なブロードバンドユーザーからGoogleのCDNの1つまでのルートに匹敵するものを言う)?私は主に、UDPを介して通信するときに発生する状態の概要を把握しようとしています。それは、パケットの25%程度の何かをドロップ/破損/誤順序付けするのでしょうか、それとも0.001%程度の何かのようなものですか。パケット?

私のためにこれらの質問のいずれかに光を当てることができる人に感謝します。

4

3 に答える 3

11

パケット損失は複数の理由で発生します。主に、個々のリンクのエラーとネットワークの輻輳が原因です。

リンクが正常に機能している場合、リンク上のエラーによるパケット損失は非常に低くなります。0.01%未満も珍しくありません。

輻輳によるパケット損失は、明らかにリンクのビジー状態によって異なります。パス全体に予備の容量がある場合、この数値は 0% になります。ただし、ネットワークがビジー状態になると、この数は増加します。フロー制御が適切に行われている場合、この数値はそれほど高くなりません。通常、2 ~ 3 個のパケットが失われるだけで、誰かが伝送速度を十分に下げて、輻輳によるパケットの損失を止めることができます。

パケット損失が 1% に達した場合は、何か問題があります。輻輳制御アルゴリズムがパケット損失に応答する方法のバグである可能性があります。同じ速度でパケットを送信し続けると、ネットワークが輻輳してパケットが失われると、パケット損失がはるかに高くなる可能性があり、ソフトウェアが誤動作している場合、99% のパケット損失が発生する可能性があります。ただし、これは関連するリンクの種類によって異なります。ギガビット イーサネットはバックプレッシャを使用してフローを制御するため、ソースから宛先へのパスが単一のギガビット イーサネット セグメントである場合、送信側アプリケーションの速度が低下するだけで、実際のパケット損失が発生することはありません。

パケット損失が発生した場合のソフトウェアの動作をテストするには、2 つの異なるシミュレーションをお勧めします。

  1. 各パケットで 10% の確率でドロップし、90% の確率で送信します
  2. 1 秒あたり最大 100 パケットまたは 1 秒あたり最大 100KB を送信し、アプリケーションがそれ以上送信する場合は残りをドロップします。
于 2013-05-25T11:09:05.023 に答える
10

UDP が定義上信頼できない場合、なぜここで信頼できないことをシミュレートする必要があるのですか?

最悪のシナリオをシミュレートし、クライアントとサーバーの両方がそれらにどのように対応できるかをシミュレートするための制御されたメカニズムを持つことは非常に便利です。インストラクターは、システムの堅牢性を実証することを望んでいる可能性があります。

ここでは、パケット損失だけでなく、ペイロードの有効性についても話しています。

これにより、サーバーとクライアントが同じマシン上の2つのプロセスであり、実際のネットワークを介して送信する必要がない場合、UDP、パケットの損失、パケットの破損、または順不同で配信されるかどうかを疑問視するようになりました。

ループバック アダプターでは明らかに可能性は低くなりますが、これは不可能ではありません。

ここここのトピックに関するフォーラムの投稿をいくつか見つけました。

また、地理的に離れた 2 つのホスト間のインターネットを介して実際にパケットが失われたり、破損したり、順序どおりに配信されなかったりする可能性は通常どのくらいあるのだろうかと考えています。

この質問は、おそらく少し絞り込む必要があります。アプリケーション レベル (パケット サイズと頻度) と、パスに沿ったルーターとスイッチの制限/トラフィックの両方にいくつかの要因があります。

これについて具体的な数値は見つけられませんでしたが、かなり低いようです... 5% 未満のようです。

The Internet Traffic Reportや、このようなページに興味があるかもしれません。

于 2013-02-25T06:13:29.860 に答える