web-dev-qa-db-ja.com

TCPはUDP経由で実装できますか?

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

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

7層については漠然と覚えていますが、プロトコルが層の1つであったかどうかわからず、TCPがネットワーク全体でUDPを使用するときに完全にシミュレート/実装することが不可能であるかどうかわかりません。そのようなプロジェクトに関するアイデアや情報はありますか?

29
user34537

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

TCPをUDPで実装できるかどうかを尋ねている場合、答えは「いいえ」です。最初に、 TCPパケット および DPパケット 互換性のない形式です。次に、TCPとUDPには異なるプロトコル番号があります( IPヘッダー に表示されます)。つまり、TCP宛先がトラフィックUDPポートの場合、正しい上位層プロトコルに渡されません。

20
mpontillo

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

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

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

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

15
Viktor Latypov

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

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

5
Qinjin

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

または、[オープンソース] UDPベースのファイル転送システムが必要な場合は、 [〜#〜] udt [〜#〜][〜#〜] uftp [〜# 〜]Tsunami-UDP 、さらにはGoogleの [〜#〜] quic [〜#〜]

3
Pierz

アプリにTCP=が必要で、LANにソフトウェアセットアップがあり、海岸の反対側にある別のデータセンターと通信できるようになっています。ソフトウェアセットアップの端にあります。実際のデータをUDP経由で送信することは可能ですか? TCP両端をシミュレートするよりも?

いいえ。UDPソケットは、TCPソケットとは別の名前空間にあります。UDPを一端で書き込み、TCP TCPとUDPはピアプロトコルです。どちらもIPの上の層に存在します。一方を使用して他方を偽装することはできません。

3
user207421

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

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

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

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

両端でソフトウェアを制御していて、独自のプロトコルを構築するのが費用対効果が高い場合、UDPは多目的に使用できます。

3
Nathan Goings

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

遭遇する最大の問題は、UDPは、一部のパケットがもう一方の端に到達しない場合でも気にしないという考えで設計されていることです。

これは、いくつかの詳細情報を含むリンクです。

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

私見、UDP経由でファイルを送信することは良い考えではありません。

1
user978122

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

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

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

つまり、あなたはcould実装TCP UDPの上にアルゴリズムを実装しますが、そうしたくないでしょう。

1
Seth Noble

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

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

0
glglgl