ファイアウォールがデフォルトですべての着信接続をブロックする場合、p2pテクノロジーはどのように機能しますか?トレントのように、ファイルを共有するすべての人とどのように接続し、そこから情報を取得しますか?リレーサーバーか何かを通過しますか?
4 に答える
私は一般的なP2P接続技術について話しているので、BitTorrentについてすべてを理解しているわけではありません。通常、P2Pネットワーク内のクライアントは、共通のシグナリングサーバー(SIP、XMPP、トラッキングサーバー、Webサイトなど)でランデブーして、IPアドレス、その他のメタデータ、およびメッセージを交換し、直接接続をブートストラップします。次に、以下のいずれかの手法を使用して、通信セッションを開始します。
両方の側が同時に相互に接続しようとします-一方の側が着信接続を受け入れることができないが、アウトバウンド接続を行うことは許可されている場合。これはファイアウォールシナリオの場合です。
穴あけ(上記と組み合わせて使用)。リレー自体は必要ありませんが、両方のピアが通過するのが難しいネットワークデバイスの背後にある場合に接続を保証するのに役立ちます。UDPホールパンチングとTCPホールパンチングの両方の手法があります。詳細はこちら。
直接接続が不可能な場合は、 TURNサーバーを含むリレーをP2Pネットワークに展開できます。お気に入りのビデオ通話アプリケーションはすべて、これらのシナリオにリレーを導入しますが、リレーのコストを回避するために、ピアを直接接続するために最善を尽くします。
次のトピックについては、Bing:STUN、TURN、ICE(Interactive Connectivity Establishment)、libjingle、pjnath、libnice。
ファイアウォール(NATではなく)が着信接続をブロックすることを意図している場合(通常はブロックしていると思います)、それについてできることは何もありません。あなたが好きなすべての穴あけを試すことができます。これは、対称NATを実装するだけで実現されます。つまり、各ピンホールは、ip、port-quadruple(送信元、宛先ポート、およびIP)専用に開かれています。
BitTorrentは、着信接続を受信できないという理由だけで動作を停止する可能性は低く、パフォーマンスがわずかに低下します。おそらく、群れには接続を受信できる人が少なくとも何人かいて、あなたはそれらに接続するだけです。
これは、ファイアウォールで保護されていることがパフォーマンスの低下を意味するという古い説明です。
編集:
「理由」に対する簡単な答えは、ピアの大部分がファイアウォールの背後にない(NATのみ)ということです。
後世のために:
簡単に言えば、 https://en.wikipedia.org/wiki/Hole_punching_(networking)を介して行われます。
マシン(ルーターとNATの背後にある可能性が高い)からgoogle.comに接続すると、マシンのIPアドレスとNATされたポート番号がGoogleサーバーに送信されます。Googleはこれらの接続情報を使用して、検索結果をマシンに送信します。
グーグルのサーバーは、p2pネットワークの1つのノードに似ていると考えることができます。ルーターが着信接続を受け入れない場合でも、Googleはサーバーからユーザーに「到達」することができました。これは、接続を開始しなかったためです(接続を開始するためのip:NATedportの組み合わせを認識していません)。ただし、マシンはアウトバウンド接続を確立し、ip:NATedportコンボを外部に送信/公開できます。
したがって、p2pの両方のノードは、ip:NATedportコンボをサードパーティのサイトに送信し、この情報を交換して、(最初に情報を取得した人は誰でも)相互に接続を開始します。
F =#ファイアウォールで保護されたノード、O =#着信ポートが開いているノード、T = F + O =ノード
の総数、 P = O / T =ポートが開いているノードの合計の割合、C f =ファイアウォールで保護された各接続の最大数ノードは持つことができ、C o = max#開いている各ノードが持つことができる接続。
次に、
C f = O、∵ファイアウォールノードはオープンノードにのみ接続できます
C o = T -1、∵オープンノードは他のすべてのノードに接続できます(そしてすべてのファイアウォールノードが最初に接続されると
)
C o / C f =(T -1)/ O = 1 / P -1/ O。
Tが大きい場合、Co /
Cf≈1 / P 。
したがって、たとえば、ノードの半分が開いている着信ポートを持っているとしましょう:P =½。次に、
C o / Cf≈2です。これは、オープンノードの接続数がファイアウォールノードの約2倍である
ことを意味します(つまり、負荷がかかりすぎるだけでなく、可視性も高くなります)。
したがって、特定のノードおよびネットワーク全体がP =1である方が適切です。すべてのノードが同じように表示され、同じように負荷がかかります。
P = 0の場合、ネットワークはまったく機能しません∵他のピアへの接続を開始することはできません。