この記事は、次のエントリの 1 つを無償翻訳したものです。
著者の許可を得て(わかりやすくするためと興味を引くため)、リンクで色を付け、個人的な調査で補足しました。
導入
この時点では、接続ペアの少なくとも 1 人のユーザーがアクティブ モードになっている必要があります。 NAT トラバーサル メカニズムは、どちらの側でもアクティブ モードが設定されていない場合に役立ちます。これは通常、ファイアウォールまたは NAT デバイスが受信接続をブロックしていることが原因です。
両方のクライアントがアクティブ モードの場合
開始クライアントは、自身の IP アドレスとポートを含むコマンドを送信します。
いずれかのクライアントがパッシブ モードの場合
ハブ経由、パッシブクライアント A コマンドを送信します
サーバーとして S 上記の場合は DC ハブがあります
両方のクライアントがパッシブ モードである場合、
異なる NAT の背後にあるクライアント A и B ハブに参加しました S.
クライアント側からハブへの接続がどのように見えるかは次のとおりです。 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 B クライアントからの最初の接続要求を拒否するあらゆる権利を有します A、しかし、まさにそのつながりによって生じた「穴」に彼自身の要求が突入し、つながりが確立されます。
プロセス全体に適したイラストですが、次の点に注意してください。
フィナーレ
(元の) 記事の執筆時点では、DC クライアントの約半数がパッシブ モードで動作しています。これは、可能なすべての接続の 4 分の 1 が確立できないことを意味します。
さらに
出所: habr.com