ピアツーピアはインターネット上でどのように機能しますか?


15

私が理解していることから、ルーターが採用しているルーティングメカニズムを知らない限り、ネットワークの外部からローカルネットワークのコンピューターにパケットを送信する方法はありません。

次のようなセットアップがあると仮定します。

  1. コンピューターA、IP 192.168.1.2(デフォルトゲートウェイ192.168.1.1)

  2. コンピューターB、IP 192.168.1.3(デフォルトゲートウェイ192.168.1.1)

  3. Router-C、IP 192.168.1.1(外部IP 1.1.1.1)

  4. Router-D(外部IP 2.2.2.2)

Computer-A、Computer-B、およびRouter-Cは同じローカルネットワークに属します。Router-DはデータをComputer-Aに送信したいのですが、Router-Cを経由せずにこれを行うことはできません。

今ルータ-Cは、宛先ポートが1000であれば、コンピュータ-Aにパケットを転送し、宛先ポートが2000であれば、コンピュータ-Bにパケットを転送しますが、確かに、これを知っている唯一のデバイスのルーティングメカニズムは、ルータ-Cそのものです!コンピューターAもコンピューターBもそれを知らないでしょう?

それで、Router-Dは、ポート1000を介してRouter-Cにパケットを送信する場合、Computer-Aにパケットを送信できますが、Router-Dは、ポート1001ではなく、ポート1000を介してパケットを送信することをどのように知るのですか?

Bittorrentのようなピアツーピアプログラムはどのようにしてこの問題を解決しますか?私が考えることができる唯一の解決策は、ルーターDがすべてのポートを介してルーターCにパケットを送信することです。そのため、パケットはコンピューターAに転送されますが、より良い解決策はありますか?

回答:


9

混乱は、いくつかの誤った仮定に起因しています。

しかし、確かに、このルーティングメカニズムを知っている唯一のデバイスはRouter-C自体です!コンピューターAもコンピューターBもそれを知らないでしょう?

なに、なぜ‽そして、なぜそれらのポートをそれらのIPに転送するようにルーターが構成されたのですか?特定のポートを使用するようにP2Pクライアントをセットアップしてから、対応するようにルーターをセットアップする必要があります。

しかし、Router-Dは、ポート1001でなく、ポート1000を介してパケットを送信することをどのように知るのでしょうか。

特定のポート(そのプロトコルの標準または非標準)を使用するようにP2Pクライアントを構成するため。

私が考えることができる唯一の解決策は、ルーターDがすべてのポートを介してルーターCにパケットを送信することです。そのため、パケットはコンピューターAに転送されますが、より良い解決策はありますか?

それよりもずっと簡単です。クライアントがピアに接続すると、使用するポートが指定されるため、ピアはそのポートでデータを送信します。

うーん、しかしBittorrentはルーターの動作を変えませんか?superuser.com/a/187190/78897で示されているように、一部のルーティングメカニズムは動的である可能性があるため、Computer-Aはどのようにそれを知ることができますか?

クライアントはルーターに直接影響しませんが、ルーターはクライアントの動作に適応するように十分に構成/インテリジェント化できます。ルーターとクライアントの両方でUPnPを有効にして接続を自動的に構成でき、ほとんどのルーターはポート転送メカニズムの一部としてステートフルインスペクション機能を備えています。

まとめると、接続はランダムなポートで動的に確立でき、ルーターはすべてをランダムな無意味な接続として表示する代わりに、発生していることを追跡できます。このように、必要に応じて接続を転送できます。これは、たとえば、発生したばかりの他の接続への応答であるためです。

問題は、同じプログラムを使用する複数のシステムがある場合に発生します。複数のシステムを同じルーターに接続し、同じIPを共有し、動的ポートを使用すると、すぐに管理できなくなり、ステートフルインスペクションを使用しても、正しく動作させることは不可能ではないにしても困難です。その場合、静的ポート(デフォルトまたはそれ以外)を使用する必要があります。


SmartSniffTCPView などのプログラムを使用して接続を監視する場合、P2P接続には通常、着信接続の宛先として設定したポート(またはクライアントのデフォルト)があり、デフォルトまたはカスタム/送信元の場合はランダムポート、発信接続の場合はその逆。


うーん、しかしBittorrentはルーターの動作を変えませんか?superuser.com/a/187190/78897で示されているように、一部のルーティングメカニズムは動的である可能性があるため、Computer-Aはどのようにそれを知ることができますか?
12

ポート転送。事前に設定してください。
ユタジャーヘッド

@Pacerierルーターとp2pアプリの両方がUPnPを使用する場合、ポート転送は動的に実行できます。この場合、はいBittorrent ルーターの動作を変更します。
zero2cx

@ zero2cx、とにかくルーターの動作を変更せずにピアツーピアを行う方法はありますか?
12

@ Pacerier、NAT(接続を共有する複数のシステム)が必要な場合、接続を行う場所を知るために何らかの方法でルーターを構成する必要があります(技術的には、提案されたようにすべての接続をすべてのポートに吐き出すことができますが、それはせいぜい、恐ろしいことです)。これは、静的に(IPとポートを構成)または動的に(UPnP)行うことができます。
Synetech

4

あなたの質問は、インターネットの中心であり、ルーティングの定義そのものです。例では、ルーターDは2つの施設に基づいてコンピューターAにデータを送信します。

  • データをコンピューターAに送信するように指示されています。
  • コンピューターAからのデータは既に処理されています。

あなたのシナリオは最初のオプションを想定しているようです-ルーターDはコンピューターAに送信したいのですが、どうやってそこに到達しますか?これは、ルーター間で共有されるルーティングテーブルを使用して行われます。

ルーターCは、ルーターDを含む-「192.168。*」ネットワークを「知っている」ことを知っているすべてのルーターに定期的に更新を送信します(実際には、ネットワークがルーティングされないため、これは起こりません-プライベートと見なされます)それを無視してください。)そのため、ルーターDはルーターCがそのネットワークを知っていることを既に知っています。

そのため、データがコンピューターA宛ての場合、最初にネットワークによってアドレス指定されます。ルーターDは、「192.168。*ネットワークを見つける必要があります。それを知っていますか?いいえ、知っています。他の誰かを知っていますか?はい。ルーターCは知っています。ルーターCに行くにはどうしますか? 2.2インターフェース。」

次に、ルーターDがルーターCにデータを送信します。ルーターCがそれを取得し、「ルーターDからのデータはありますが、192.168ネットワークのものです。そのネットワークを知っていますか?はい、192.168.1.1ネットワークを介して」転送します。

IPとMAC​​のアドレス指定を解決するために行うべき他の作業がいくつかありますが、ARPとローカルネットワーキングではなく、ルーティング自体を扱います。

最初の仮定-リモートルーターはルーティングメカニズムを知っている必要がある-がここで作用しないことに気付くでしょう。ルーターDは、ルーターCがEIGRP、RIP、RIPv2、OSPFなどを使用しているかどうかを気にしません。気になるのは、更新プログラムを取得したことだけです。(もちろん、更新をどのように取得するは、2つの同期を保つために重要です。しかし、これもまた別の問題です。)

2番目の仮定-ポート番号はルーティングの要因である-も間違っています。ルーターは(一般的に)ルーティングを決定するためにポート情報を必要としません。(これは、いくつかの新しいネットワークテクノロジーのためにわずかに変更されており、主にファイアウォールとプロキシに適用されますが、それでもより広い仮定は「真の」ルーターに適用されます。)

例を続けると、ルーターCは(シナリオごとに)ポート1000でデータを転送します。これは、コンピューターAに特定のポートのデータを予期するサービスがある可能性があるためです。ただし、ルーターDがポート1000で送信したため、実行することだけがわかっています。データの発信者がそのポートでルーターDに送信したため、ルーターDはそのポートでのみ送信します。

BitTorrentまたはP2Pプログラムを含めることは、あなたが尋ねる質問を反映しているとは理解していません。同じ説明が当てはまります。特定のデバイス(またはIP)を特定のポートに関連付けるポートトリガーを使用してルーターを構成することもできます。そのため、トラフィックがポート1234に到着すると、ルーターはデータをデバイスABCDに送信することを認識します。これは通常、発信TCPポートに関連付けられています。つまり、ポート7890でトラフィックを送信する場合、ルーターは着信トラフィックがポート1234にあることを認識して送信します。

ただし、ポートトリガーは(リモート)ルーティングの決定に関連付けられていません。代わりに、ルーターがLANに使用する内部MAC / IPテーブルに関連しています。

更新/編集:コメントにさらに回答して詳しく説明します。ルーターDは、IPアドレス(192.168.2.2)によってのみコンピューターAを認識します。ただし、ルーターCはIPアドレスとMACアドレスによってコンピューターAを認識しています。MAC(Media Access Control)は、国際標準で定義されている一意の(通常...)48ビット識別子です。LAN(有線および無線)に接続されているすべてのデバイスは、一意のMACアドレスを持つことになっています。

ルーター(ルーターC)は、IPアドレスとMACアドレスをテーブル(MACアドレステーブル)に関連付けます。そのため、トラフィックがルーターCに着信し、ルーターがその「ローカル」を認識すると、MACアドレステーブルのルックアップを実行します。次に、ルーターはフレームアドレス情報を文字通り変更します。

レイヤー2の宛先情報を再構築(書き換え)して、コンピューターAの宛先MACアドレスを取得しますが、IPアドレス情報(レイヤー3)は同じままにします。

ルートがMACアドレスを知らない場合。または、テーブルにIP-MAC関係がない場合、ARP(アドレス解決プロトコル)と呼ばれる処理を実行して、「このネットワーク上の全員、このMACアドレスを持っていますか?」と尋ねます。または時々-「皆さん、MACアドレスは何ですか?」)。適切なデバイスが応答し、ルーターがIP-MACテーブルを作成します。


それで、Router-Dはポート60000(事前構成済み)を介してRouter-Cにパケットを送信し、Router-Cはパケットを受信しますが、このパケットがComputer-Aに転送されることをどのように知るのですか?
12

1
ルーターDは、最終的な宛先-コンピューターAを既に知っています。それ(ルーターD)は、IPアドレス192.168.2.2によってのみコンピューターAを知っています。しかし、ルーターCは、IPアドレス(192.168.2.2)とMACアドレスと呼ばれる2つの方法でコンピューターAを知っていることを知っています。私はより多くの情報で答えを更新します。
ジョン

2

ポートトリガー。Webサーバーは、要求後にWebページをどのように送信しますか?あなたがそれを要求したからです。あなたがそれを要求するとき、ルータは応答を期待することを知っていて、それを受け取るとき、適切なPCにそれを転送します。一部のプログラムは、特定のPCからの信号を見越して開始するように作成されています(実際に進行中でない場合でも)。

一部のモデルには、基本的な通信に使用される中央サーバーがあります。例えば:

  • Client1は、双方向通信のためにサーバーにサインインします。
  • Client2は同じものにサインインします。

サーバーは、Client1とClient2にあるすべてのファイルを認識するようになりました。

  • Client2は、「Client1からファイルXが欲しい」とサーバーに言います。
  • サーバーは、Client1に「Client2にはXファイルが必要です」と伝えます。
  • クライアント1は、ごみデータをクライアント2のパブリックIPに送信し、ポートトリガーをオフにして、クライアント2からの応答用にポートを開きます。
  • Client2は、初期信号をClient1のパブリックIPに送信します。

Client1はルーターをだましてClient2のポートを開放しました。

BitTorrentや元のNapster(iirc)など、場合によっては、ルーターのポートを転送して最適に機能させる必要があります。

最初に接続するポートを知っている他のクライアントに関する限り、それはクライアントが使用するポートをswarmまたはサーバーに伝えたためです。BitTorrentはトラッカーを頻繁に使用し、どのクライアントがどのポートを使用しているかを追跡します。


使用するポートを知っている限り...特定のポートでリッスンするようにクライアントを構成します。クライアントは、(BitTorrentの場合のように)使用しているポートをswarmに通知するため、他のクライアントは接続先を知ることができます。あなたのPCは彼らに言った。
ユタジャーヘッド

私の最初の補遺が書かれている間にあなたは答えたと思います。正しい?
ユタジャーヘッド

しかし、それがルータである場合、PCはどのようにしてルーティングメカニズムを知るのでしょうか いくつかのメカニズムが示されているようにダイナミックされている可能性がsuperuser.com/a/187190/78897
Pacerier

いいえ、ルーティングを知る必要はありません。ほとんどのP2Pクライアントが正常に機能するには、ルーターでポート転送を適切に構成する必要があります。これがないと、最初に会話した他のクライアントとのみ通信できます。会話を開始できません。私の答え(最後から2番目から2番目)でこれについて簡単に触れました
-UtahJarhead

しかし、ポートフォワーディングは、管理者が、それはあなたがビットトレントのことを言うことを意味するか...事前設定があった場合のみ可能である再構成し、当社のルータ?
12
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.