3

Kademlia Distributed Hash Tableは、信頼性が低いにもかかわらず、UDP をネットワーク トランスポート プロトコルとして使用するのはなぜですか?

4

5 に答える 5

11

主な理由は、以前に接続を確立したことがなく、ルックアップ中に二度と表示されない可能性がある多くのノードを迅速にクエリすることです。

Kademlia のルックアップは反復的です。つまり、リクエストは転送されません。転送 DHT は、長期にわたる TCP 接続により適しています。

つまり、トラフィックの大部分は、潜在的に数百万に及ぶ可能性があるネットワークのノード間の要求と応答の短期間の交換で構成されています。何千もの TCP 接続を迅速に確立するためのオーバーヘッドは、非常に大きくなります。

于 2012-04-28T10:58:21.720 に答える
5

なぜ UDP なのか? それは、シンプルで効果的で低コストのプロトコルだからです。パッケージの配信を保証するものではなく、常時接続を確立する必要もありません。これらすべての機能により、UDP は複数の受信者への高速データ配信に適しています。P2P アプリケーションに必要なのはこれだけです。

Kademlia の設計仕様から引用:

Kademlia の設計者は、UDP の代わりに IPv6 アドレスまたは TCP/IP を使用することや、Kademlia ノードが複数の IP アドレスを持つ可能性を考慮していないようです。

于 2012-04-21T01:42:09.697 に答える
3

私はこの製品を使用していないことを認めなければなりませんが、それを調査すると、これに答えることができると思います.

それは最終的には首尾一貫したシステムのようです。また、高性能システムのようにも見えます。これを考えると、udpは機能します。tcp のようなハンドシェイクがないので高速です。修正メカニズムもあるため、プロトコルからの破損の可能性が処理されます。

于 2012-04-21T01:47:51.530 に答える
2

私たちのバージョンの Kademlia (OpenKad) は、TCP または UDP のいずれかを使用できます。

Kademlia は高レベルのルーティング プロトコルであるため、両方のトランスポート レベルのプロトコルで同じように機能します。Kademlia の展開でのルックアップ時間は、パケットのドロップやタイムアウトの失敗により、あまり良くありません。したがって、パフォーマンスは最良の答えではありません。

于 2014-05-13T10:27:36.143 に答える
0

これが多くの議論をもたらす可能性が高いことは承知していますが、UDP は特に信頼性が低くなるように設計されているわけではなく、信頼性を高める機能が欠けているだけです。上位レベルの見通し (ソケット プログラミングなど) から見ると、UDP と TCP は非常によく似ていますが、実際には比較できません。TCP は、ほとんどのトランスポート関連の問題をすぐに処理できるように設計されています。UDP は、ポート ヘッダーとチェックサムを基礎となる IP パケットに追加するだけであり、プロトコルとしてほぼ完全に機能します。

当然、両方のプロトコルを構築して拡張することができます。通常、UDP の拡張は適切なソリューションではありません。これは、TCP がネットワークで必要なすべてを処理することが多いためです。ただし、TCP の接続モデルが制限されすぎている場合は例外です。これは p2p ネットワーキングの場合です。TCP は、基本的に 2 つのエンドポイント間で排他的な 1 対 1 のパイプをエミュレートするように設計されているためです。p2p 接続は通常、より多くの全対全の性質を共有します。

簡単に言うと、UDP に「信頼性」を追加するか、全対全 TCP 実装を作成することによって、この時点で「車輪を再構築」することになります。

あなたの質問の本質に答えるために(KademliaでUDPを使用する理由)仕様が実際にUDPを使用する理由(またはTCPを使用しない理由)を説明しているとは思わないため、信頼できる答えはないと思いますが、私の推測は作成者は、UDP を構築することで、特に設計されていない方向に TCP を拡張しようとするよりも柔軟性が増すという意見を持っていました。言い換えれば、実質的にあらゆる形式の機能を欠いているライブラリにVSを追加したり、別の既存の機能を拡張したりします。

于 2014-12-27T04:07:23.823 に答える