私が理解していることから、使用されているルーティングメカニズムを知らない限り、ネットワークの外部からローカルネットワーク内のコンピューターにパケットを送信する方法はありませんルーターによって。
次のような設定があるとします。
コンピューターA、IP 192.168.1.2(デフォルトゲートウェイ192.168.1.1)
コンピューターB、IP 192.168.1.3(デフォルトゲートウェイ192.168.1.1)
ルーターC、IP 192.168.1.1(外部IP 1.1.1.1)
Router-D(外部IP 2.2.2.2)
コンピューターA、コンピューターB、ルーターCは同じローカルネットワークに属しています。ルーターDはコンピューターAにデータを送信しようとしていますが、ルーターCを経由せずにこれを行うことはできません。
これで、ルーターCは、宛先ポートが1000の場合はコンピューターAにパケットを転送し、宛先ポートが2000の場合はコンピューターBにパケットを転送します。しかし、これを知っている唯一のデバイスルーティングメカニズムはRouter-C自体です! Computer-AもComputer-Bでさえそれを知らないでしょう?
したがって、ルーターDがポート1000経由でルーターCにパケットを送信する場合、ルーターDはコンピューターAにパケットを送信できますが、ルーターDは、ポート1001ではなく、ポート1000経由でパケットを送信することをどのようにして知るのでしょうか。
Bittorrentのようなピアツーピアプログラムはどのようにこの問題を回避しますか?私が考えることができる唯一の解決策は、ルーターDがパケットをルーターCにallポートを介して送信し、コンピューターAに転送されるようにすることですが、より良い解決策はありますか?
混乱は、いくつかの誤った仮定に起因します。
しかし、確かに、このルーティングメカニズムを知っている唯一のデバイスは、Router-C自体です。 Computer-AもComputer-Bでさえそれを知らないでしょう?
なんで、なんで‽では、ルーターがこれらのポートをそれらのIPに転送するように構成されたのはなぜですか。特定のポートを使用するようにP2Pクライアントをセットアップしてから、対応するようにルーターをセットアップする必要があります。
しかし、Router-Dは、ポート10001を経由せずにポート1000経由でパケットを送信することをどのようにして知るのでしょうか。
特定のポート(そのプロトコルの標準または非標準)を使用するようにP2Pクライアントを構成するため。
私が考えることができる唯一のソリューションは、ルーターDがすべてのポートを介してルーターCにパケットを送信し、コンピューターAに転送されるようにすることですが、より良いソリューションはありますか?
それはそれよりずっと簡単です。クライアントがピアに接続すると、クライアントは使用するポートを指定するため、ピアはそのポートでデータを送信します。
うーん、でもBittorrentはルーターの動作を変更しませんか? superuser.com/a/187190/78897に示されているように、一部のルーティングメカニズムは動的であった可能性があるため、Computer-Aはそれをどのようにして知ることができますか?
クライアントは直接ルーターに影響を与えませんが、クライアントの動作に適応するようにルーターを構成/インテリジェント化できます。ルーターとクライアントの両方で PnP を有効にして、接続を自動的に構成できます。ほとんどのルーターは ポートフル転送 の一部として ステートフルインスペクション 機能を備えています機構。
まとめると、ランダムなポートで動的に接続を確立できるため、ルーターはすべてをランダムで意味のない接続として表示する代わりに、何が起こっているかを追跡できます。このようにして、たとえば、これは発生したこの他の接続への応答であるため、必要に応じて接続を転送できます。
同じプログラムを使用する複数のシステムがある場合に問題が発生します。同じルーターに複数のシステムを接続し、同じIPを共有し、動的ポートを使用すると、すぐに管理できなくなり、ステートフルインスペクションを使用しても、正しく機能させることは不可能ではないにしても困難です。その場合、静的ポート(デフォルトまたはその他)を使用する必要があります。
接続を監視するために SmartSniff または TCPView のようなプログラムを使用する場合、P2P接続には通常、構成したポート(または着信接続の宛先として、クライアントのデフォルト)、発信元のデフォルトまたはカスタム/ランダムポートのいずれか、および発信接続の場合はその逆。
あなたの質問は、インターネットの核心とルーティングの定義そのものに触れています。この例では、ルーターDは2つの前提に基づいてコンピューターAにデータを送信します。
あなたのシナリオは最初のオプションを想定しているようです-ルーターDがコンピューターAに送信しようとしています。ルーター間で共有されるルーティングテーブルを使用してこれを行います。
ルーターCは、「ルーターDを含む」が「192.168。*」ネットワークを「認識」していることを知っているすべてのルーターに定期的に更新を送信します(実際には、ネットワークがルーティングされていないため、これは発生しません。プライベートと見なされます。しかし、それを無視してください。)したがって、ルーターDはルーターCがそのネットワークを知っていることをすでに知っています。
したがって、データがコンピューターAに送信される場合、最初にネットワークによってアドレス指定されます。したがって、ルーターDは「192.168。*ネットワークを見つける必要があります。それを知っていますか?いいえ。他の誰かを知っていますか?はい。ルーターCは知っています。ルーターCにアクセスするにはどうすればよいですか?2.2を介して。 2.2インターフェース。」
次にルーターDはルーターCにデータを送信します。ルーターCはそれを取得して、「ああ、ルーターDからのデータがありますが、それは192.168ネットワーク用です。そのネットワークを知っていますか?はい、自分の192.168.1.1ネットワークを通じて」それを転送します。
IPおよびMACアドレッシングを解決するために実行する必要のある他の作業がいくつかありますが、ここではARPやローカルネットワークではなく、ルーティング自体を取り上げます。
最初の仮定-リモートルーターはルーティングメカニズムを知っている必要がある-はここでは機能しません。ルーターDは、ルーターCがEIGRP、RIP、RIPv2、OSPFなどを使用しているかどうかを気にしません。気になるのは、更新されたことだけです。 (もちろん、how更新を取得することは、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アドレスを1つのテーブル(MACアドレステーブル)に関連付けます。そのため、トラフィックがルーターCに入り、ルーターがルーターCへの「ローカル」を実現すると、MACアドレステーブルの検索を行います。その後、ルーターは文字通りフレームのアドレス指定情報を変更します。
レイヤー2の宛先情報を再構築(書き換え)して、コンピューターAの宛先MACアドレスを設定しますが、IPアドレス情報(レイヤー3)は同じにします。
ルートがMACアドレスを知らない場合。または、テーブルにIP-MAC関係がなく、ARP(アドレス解決プロトコル)と呼ばれるものを実行して、「このネットワーク上の全員、このMACアドレスを持っていますか?」または時々-「みんな、あなたのMACアドレスは何ですか?」)。適切なデバイスが応答し、ルーターがIP-MACテーブルを作成します。
ポートトリガー。あなたがそれを要求した後、ウェブサーバーはどのようにあなたにウェブページを送りますか?あなたがそれを要求したからです。あなたがそれを要求すると、ルータは応答を期待することを知っており、それを受け取ると、それを適切なPCに転送します。一部のプログラムは、特定のPCからの信号を見越して開始をトリガーするように作成されています。
一部のモデルには、基本的な通信に使用される中央サーバーがあります。例えば:
これでサーバーは、Client1とClient2が持つすべてのファイルを認識します。
Client1はルーターをだましてClient2のポートを開放しました。
BitTorrentやオリジナルのNapster(iirc)など、場合によっては、ルーターが最適に機能するように、ポートを転送する必要があります。
最初に接続するポートを知っている他のクライアントに関する限り、それは、クライアントが群れまたはサーバーに使用するポートを通知したためです。 BitTorrentはトラッカーを頻繁に使用し、どのクライアントがどのポートを使用しているかを追跡します。