34

私は奇妙な考えを持っていました。私の理解では、UDP を使用してファイルを転送し、TCP パケットに見られるオーバーヘッドを削減するソフトウェアについて聞いたことがあります。

私のアプリがTCPを必要とし、私のLANが海岸の反対側にある別のデータセンターと通信するように設定されたソフトウェアを持っている場合、彼らの側でソフトウェアを設定します。UDP 経由で実際のデータを送信することは可能でしょうか。ただし、両端で TCP をシミュレートすることはできませんか?

そのようなプロジェクトに関するアイデアや情報を持っている人はいますか?

4

9 に答える 9

27

UDP をLayer 2として使用できるかどうかを尋ねている場合、答えははいです。L2TPIPsec (NAT トラバーサルを使用)など、UDP トランスポートを使用して別のネットワークへのトンネルを作成できるさまざまなプロトコルがあります。アプリケーション層で行うこともできます。

TCP を UDP に実装できるかどうかを尋ねる場合、答えはノーです。まず、TCP パケットUDP パケットには互換性のない形式があります。第 2 に、TCP と UDP のプロトコル番号は異なります ( IP ヘッダーに表示されます)。これは、UDP ポート宛ての TCP トラフィックが正しい上位層プロトコルに渡されないことを意味します。

于 2012-05-21T22:35:27.380 に答える
17

TCP と UDP は両方とも IP の上に構築されますが、TCP は異なるパケット構造を使用し、レイヤ 2 では UDP パケットを使用して TCP を模倣することはできません。

もちろん、送信元と送信先の両方を制御できる場合は、TCP パケットに対して信頼性の高い UDP トンネルを作成できます。これには、UDP パケットの本文に内部情報 (パケット番号、ack/nack フラグ) が必要です。

興味深いプロジェクトがありますhttp://udt.sourceforge.net/

これは、UDP の上に構築されたブロードキャスト対応の信頼できるファイル転送メカニズムです。

于 2012-05-21T06:53:34.750 に答える
6

PseudoTCP は、UDP の上に TCP アルゴリズムを実装するプロトコルです。TCP の NAT トラバーサルは UDP よりもはるかに複雑であるため、導入されました。ただし、一部の P2P アプリケーションでは、ノード間で信頼性の高いデータ転送が必要です。

私の知る限り、PseudoTCP には Libjingle と Libnice の 2 つのバリエーションがあります。libjingle のファイル共有の例を見ることができます: https://developers.google.com/talk/libjingle/file_share。最近では、Chrome デスクトップも信頼できる接続のために libjingle の PseudoTCP 実装を使用しています。

于 2012-06-02T11:29:05.017 に答える
4

はい、TCPをシミュレートするUDPでプロトコルを開発できます。ただし、TCPを完全にシミュレートした場合、技術的にはオーバーヘッドが大きくなります。TCPはパケットとして実装され、シミュレートされたTCPはパケットの本文に実装されるためです。

TCPの1つまたは2つの機能(基本的な順序付けなど)のみが必要な場合は、UDPで実装すると便利です。

Haloは、TCPのさまざまな機能をシミュレートする2〜3(IIRC)UDPプロトコルを使用し、ゲーム状態を初期化するために本格的なTCPを使用します。I Shot You First Networking、GDCの出版物

たとえば、あるケースでは、パケット損失を克服するために3つの重複したUDPパケットを送信します。

両端でソフトウェアを制御し、独自のプロトコルを構築するのに費用効果が高い場合、UDPは用途が広い可能性があります。

于 2012-10-21T23:16:27.613 に答える
4

Linux-3.18+ でこれを行う 1 つの方法は、汎用 UDP カプセル化 ( GUE ) を実装する Foo over UDP (FOU) を使用することです。ここに FOU の良い紹介とip-fouの man ページがあります。

または、[オープン ソース] UDP ベースのファイル転送システムが必要な場合は、UDTUFTPTsunami-UDP、さらには Google のQUICなどがあります。

于 2015-07-15T16:49:53.363 に答える
3

私のアプリがTCPを必要とし、私のLANが海岸の反対側にある別のデータセンターと通信するためのソフトウェアセットアップを持っている場合、彼らの側にソフトウェアセットアップがあります。UDP 経由で実際のデータを送信することは可能でしょうか?ただし、両端で TCP をシミュレートすることはできませんか?

いいえ。UDP ソケットは、TCP ソケットとは異なる名前空間にあります。一方の端で UDP を書き込んで、もう一方の端で TCP を送受信することはできません。TCP と UDP はピア プロトコルです。どちらも IP の上の層に存在します。一方を他方のスプーフィングに使用することはできません。

于 2012-05-21T09:51:15.133 に答える
1

うーん、そう思います。両端でプロキシを使用する必要がありますが、可能です。

あなたが直面するであろう最大の問題は、UDP が、パケットの一部が相手側に到達しなくても気にしないという考えで設計されていることです。

詳細情報へのリンクは次のとおりです。

http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/

私見ですが、UDP 経由でファイルを送信するのは得策ではありません。

于 2012-05-21T06:54:34.770 に答える
1

TCP の問題は、ヘッダーではなくアルゴリズムにあります。

確かに、UDP の上に TCP アルゴリズムを実装できます。これは、UDP データグラム内で TCP データグラムをトンネリングすることと事実上同じです。しかし、これで実現できるのは、各パケットにさらに数バイトのオーバーヘッドを追加し、別のエンドポイントでパケットをアンラップする必要があることだけです。

UDP 自体は、IP 上の薄いシムにすぎません。これは、カーネルに飛び込んだり、ルーターから特別な処理を受けたりすることなく、IP パケット交換ネットワークにアクセスするための便利な方法です。UDP の上に信頼できるトランスポートを実装する主な理由は、より効率的なものを優先して TCP アルゴリズムから離れることです。FileCatalystは、これを行う会社の1つとして上記で言及されており、私の会社Data Expedition、Inc.も同様です。

したがって、UDP の上に TCP アルゴリズムを実装することはできますが、そうしたくはないでしょう。

于 2012-05-23T19:10:17.860 に答える
0

UDP 経由の接続のようなものをシミュレートでき、信頼性チェック、順序付け、再送信などを追加することもできます。-しかし、それでもTCPではなく、そのように動作します。

もちろん、エンドの 1 つは、適応を行う一種の「ハブ」または「プロキシ」にすることができます。次に、2 エンド ソリューションはありませんが、実際には 4 エンド ソリューションがあります。1 つは「実際の」TCP を使用し、もう 1 つは「自己編み」の「TCP」を使用します。これを適切に作成されたプログラムと組み合わせます。 .

于 2012-05-21T06:58:42.177 に答える