3

私のアプリケーションは、ビデオ データをフレームごとにサーバーからクライアントに送信する必要があります。TCP と UDP のどちらを使用するか迷っています。

私のテストから、次の結果がいくつかわかりました。

TCP: 実装は非常に簡単です。

UDP: フレーム (約 50KB) をクライアントに送信するために、フレームごとに 1 つの UDP パッケージを作成すると、送信で常にフレームが失われます。そのため、各フレームを多数の UDP パッケージに分割する必要があります。UDP プロトコルではパッケージが失われる可能性があり、パッケージが順不同で配信される可能性があるため、これにより私のアルゴリズムはより洗練されたものになります。さらに、各 UDP パッケージ内のデータの長さが大きいと、簡単に失われます。

いくつか質問があります:

  1. このタイプのアプリケーションには TCP または UDP を使用する必要がありますか?

  2. UDP を使用して転送を高速化したい場合、転送中に簡単に失われない各パッケージの適切なデータ長を決定する方法を教えてください。(これはおそらくネットワーク帯域幅に属します)?

  3. あなたの経験から、TCP が UDP よりも何% 速いかを見積もることができますか?

投稿で多くの質問をして申し訳ありませんが、アプリケーションで TCP と UDP のどちらを使用するかを決定する前に、詳細を知る必要があります。

4

3 に答える 3

5

アプリケーションがビデオをストリーミングするので、おそらく UDP が必要です。TCP と UDP (この場合) の大きな違いの 1 つは、UDP は TCP のように失われたパケットを回復しようとしないことです。時間がかかるため、フレームがスキップされるたびにビデオをリロードする必要はありません。代わりに、UDP は失われたフレームをスキップします。(Youtube ビデオを右クリックすると、ビデオのストリーミング中にドロップされたパケットの数を確認できます)

于 2012-06-18T13:57:21.713 に答える
3

あなたの場合、UDP パケットを手動でフラグメント化して再構築する実際の経験がなく、コードで導入されたオーバーヘッドを維持する意思がない限り、TCP を使用します (バッファを再構築して制御するなど)。これが意味するレイテンシ)。

さらに、対象となるネットワークを考慮する必要があります。ローカルホストのみ、LAN、WAN、またはインターネットのいずれかです。ネットワークに対する制御が少ないほど、ラウンドトリップ時間、遅延、パケット損失などの点で TCP を優先する影響が大きくなります。制御とは、交差するネットワーク セグメント (#routers) の数の上限または推定値を意味します。さまざまな構成 (QoS、帯域幅リミッター、MTU など) など。

経験則として、瞬時に必要なすべてのデータ (以下で定義) が 1 つのパケットに収まる場合、UDP は優れています (MTU は IPv6 で 1280 であることが保証されています)。インスタントは、時間内の短いスナップショットであり、通常は往復時間の寿命を持つものです。UDP は、クエリと応答の両方が小さなエンティティである会話にも適しています。

したがって、この意味で、DNS (短いクエリ、短い回答)、または金融取引データ (1 ラウンドトリップ時間の寿命内に非常に多くしかない)、またはプロトコルメタデータなどに UDP を使用します参加しているクライアントの数または ID ハッシュ (クエリ/応答が短く、往復時間内にほんの一握りしかない)。

お役に立てれば。

編集:
あなたの質問に答えるために

  1. UDP (上記の制限事項)
  2. IPv6 はパス mtu 検出を提供します。単純に PMTU を使用します。IPv4 の場合は、独自にロールする必要があります。
    • IP_DONTFRAGソケットオプションを設定する
    • 通過すると想定するパケットを送信する
    • パケットが完全に受信されたかどうかを受信者が通知できるようにする簡単なプロトコルを考えてください。
    • いいえの場合 -> サイズを小さくし、はいの場合 -> サイズを大きくします
    • 数回のピンポンの後、PMTU の安全な見積もりが得られます (もちろん、ペイロード データを送信することもできます)。
  3. ネットワークの性質が安定しており、安定している場合、 UDP は TCP よりも大幅に優れています。(逆に)ネットワークの性質が変化し続ける場合 (遅延の変動、パケット損失の確率の変化など) には TCP は勝てません一部の中間セグメントで使用されます (「その他」のものより多かれ少なかれ既知の TCP サービスを優先するように構成された QoS。

いくつかの図とインスピレーションについては、udtをチェックしてください。

于 2012-06-18T14:01:03.800 に答える