web-dev-qa-db-ja.com

UDPでマルチパケット転送はどのように機能しますか?

私はUDP接続について調べてきましたが、UDP送信は「ベストエフォート」であることを理解しています。データは受信されるかもしれませんが、受信されないかもしれません。受信されている場合は、故障している可能性があります。私が情報を見つけるのに苦労しているのは、UDPを介して送信しているデータが、複数のパケットを介して送信する必要があるほど大きい場合はどうなりますか?たとえば、3つのパケットを介して送信されるバイトストリームがあるとします。

<--data_packet_1 <--data_packet_2 <--data_packet_3

TCPこれらのパケットは、配信され、同じ順序で送信されるように保証されます。ただし、UDPの場合はそうではありません。そのため、何かが発生し、3つのうち2つのパケットのみが送信された場合:

<-- data_packet_1 <--data_packet_3

3つの個別のパケットで構成されるバイトストリーム全体が破棄されますか?または、それらは通過し、アプリケーション層で処理する必要があります(つまり、バイトストリームに必要な形式が含まれていない場合は無視してください)。

2
nullReference

UDP接続について読んでいます

「UDP接続」というものはありません。 UDPは connectionless プロトコルであり、そもそもそもそもそれが存在する理由です。

したがって、何かが発生し、3つのうち2つのパケットのみが送信される場合:

どうやってそれを知っていますか? UDPにはシーケンス番号はなく、すべてのデータグラムはそれ自体で独立しています。そもそも3つのデータグラムがあるはずだったことを知る方法はありません。受信者の観点からは、2つのデータグラムを受信しました。限目。

UDPが最初に発明された理由は、「正しい」データを取得するまでできないできないアプリケーションや、できるアプリケーションがあるためです不完全なデータを処理する余裕があります。 UDPはもともとテレフォニーアプリケーション用に作成されたものであり、すべてのサンプルを修正するよりもレイテンシを低くすることが重要です。人々は、アナログ電話からのドロップアウト、クリック、およびパチパチ音に慣れています。彼らは何を使っていないしていないし、はしません受け入れるのは少し待っています破損したパケットが再送信されます。

通常、このようなアプリケーションでは、高レベルのアプリケーションプロトコルは、ある種のシーケンス番号またはタイムスタンプを使用して、失われた(または順序が正しくない、そのようなアプリケーションでは失われたものと同じ)データグラムを検出できるようにします。代わりに、ミリ秒の無音(オーディオストリーム内)または空白行(ビデオストリーム内)を挿入します。ストリーミングプロトコルではなくバルクデータベースのプロトコルの場合、データを「遅延」データグラムから失われたものとして扱うのではなく、データモデルに再統合する場合があります。アプリケーションが不完全なデータモデルに対応できない場合は、データを再度要求する可能性があります。ただし、これはアプリケーションレベルの決定であり、UDPとは関係ありません。

たとえば、ビデオおよびオーディオストリームの場合、SMPTE 2022-7シームレス保護スイッチングと呼ばれる放送ビデオおよびオーディオの専門組織であるSMPTEによる仕様があります。これは、同じビデオ/オーディオストリームデータを複数のストリーム間で同時に、受信者がそれらの複数の同一のストリームから元のストリームを再構築する方法。大まかに言えば、データグラムにはタイムスタンプが付けられ、受信者は正しいタイムスタンプを持つストリームから最初のデータグラムを取得します。 (もちろん、実際よりもはるかに複雑です。)これは、再送信の代わりにネットワークの冗長性を使用して信頼性を向上させる方法です。つまり、帯域幅の半分を浪費しますが、信頼性が高まり、遅延とジッターを低く抑えられます。 (実際のアプリケーションでは、さまざまなストリームが送信機のさまざまなネットワークポートによって送信され、受信機のさまざまなネットワークポートによって受信され、ネットワークを介してさまざまなルートを取り、さまざまなスイッチとさまざまなスイッチを介して送信されるように配置します最大の冗長性を得るためにケーブルなど)。

7
Jörg W Mittag

アプリケーション層は、順不同のパケットや欠落したパケットを処理できる必要があります。しかし、UDPでは(少なくとも、私が使用した実装では)、バイトストリームとして扱う傾向はありません。これは、単一のメッセージまたはペイロードではありません。ペイロードを開いてそれを実行するのはアプリケーション次第です。これは、それを脇に置いて、同じデータセットの他のペイロードと照合したり、無関係なデータを破棄したりする場合があります。

1
Thomas Owens