NAT トラバーサルを使用してユーザーをパッシブ モードで接続する

この記事は、次のエントリの 1 つを無償翻訳したものです。 DC++ 開発者ブログ.

著者の許可を得て(わかりやすくするためと興味を引くため)、リンクで色を付け、個人的な調査で補足しました。

導入

この時点では、接続ペアの少なくとも 1 人のユーザーがアクティブ モードになっている必要があります。 NAT トラバーサル メカニズムは、どちらの側でもアクティブ モードが設定されていない場合に役立ちます。これは通常、ファイアウォールまたは NAT デバイスが受信接続をブロックしていることが原因です。

両方のクライアントがアクティブ モードの場合

開始クライアントは、自身の IP アドレスとポートを含むコマンドを送信します。 $ConnectToMe 別のクライアントに。コマンドを受信したクライアントは、このデータを使用してイニシエータとの接続を確立します。

いずれかのクライアントがパッシブ モードの場合

ハブ経由、パッシブクライアント A コマンドを送信します $RevConnectToMe アクティブなクライアント Bその後、コマンド $ConnectToMe で応答します。

NAT トラバーサルを使用してユーザーをパッシブ モードで接続する
サーバーとして S 上記の場合は DC ハブがあります

両方のクライアントがパッシブ モードである場合、 ADCハブ

異なる NAT の背後にあるクライアント A и B ハブに参加しました S.

NAT トラバーサルを使用してユーザーをパッシブ モードで接続する
クライアント側からハブへの接続がどのように見えるかは次のとおりです。 A

ハブはポート 1511 での接続を受け入れます。 クライアント A は、プライベート ネットワークからポート 50758 経由で発信接続を行います。ハブは、NAT デバイスのアドレスを確認し、それを操作して、識別子に従ってクライアントにブロードキャストします。

クライアント A サーバーに送信します S クライアントとの接続について助けを求めるメッセージ B.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991

パッシブモードでも、クライアントは Bこのコマンドを受信した は、NAT 経由でハブに接続するために使用されるプライベート ポートを報告する必要があります。

Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991

この情報を受け取った後、クライアントは A すぐにクライアントとの接続を確立しようとします B そして独自のプライベートポートを報告します。

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

何に興味があるのですか?重要なのは、既に使用されているプラ​​イベート ポートを介してパブリック アドレスへの新しい接続を作成することによって、同じ接続のエンドポイントを移動することです。

NAT トラバーサルを使用してユーザーをパッシブ モードで接続する
ビンゴ!

もちろん、この場合、クライアント NAT B クライアントからの最初の接続要求を拒否するあらゆる権利を有します A、しかし、まさにそのつながりによって生じた「穴」に彼自身の要求が突入し、つながりが確立されます。

NAT トラバーサルを使用してユーザーをパッシブ モードで接続する
プロセス全体に適したイラストですが、次の点に注意してください。 プロトコル セッションによって開かれたパブリックポートを使用しません NAT-S、プライベートアドレスも同様です。

フィナーレ

(元の) 記事の執筆時点では、DC クライアントの約半数がパッシブ モードで動作しています。これは、可能なすべての接続の 4 分の 1 が確立できないことを意味します。

さらに DC++ は NAT をバイパスできるようになります既存の接続を使用する A-S и B-S クライアントとクライアントの直接接続を確立するには、 A и B パッシブモードになっています。

出所: habr.com

コメントを追加します