私は分散Javaアプリを書いていますが、ネットワークの面で困惑しています。何らかの理由で正しく機能していません。ipconfig/allで取得したIPアドレスにLANの外部からアクセスできないためだと思います。ヒントやアドバイスをいただければ幸いです。
2 に答える
概要
一般に「NATトラバーサル」またはICEとして知られているものが必要です。今日インターネットで使用されている2つの主要なプロトコルはTCPとUDPです。TCPソケットには、大量のセッション状態情報が含まれています。したがって、UDPよりもP2Pに使用するのは非常に難しいプロトコルです。
UDPトンネリング
次のリストは、 UDPNATトラバーサルに基づくP2Pサービスを実装するために使用できるより一般的なSTUNプロトコル(RFC 5389)の簡略化された概要です...
- パブリックアドレスを使用してUDPサーバーを展開し、クライアントからのUDPパケットのリッスンを開始します。クライアントは、サーバーに送信されるUDPパケット内にプライベートIPアドレスを埋め込みます。(ランダムパケットスキャナーではなく)有効なクライアントから接続を取得していることを確認するために、何らかの形式の認証を実装することをお勧めします。
- サーバーは、UDPデータグラムからプライベートIPアドレスがパブリックIPアドレスにどのように変換されたかを読み取ります。
- 特定のユーザー間で接続を確立する場合は、クライアントからサーバーに送信されるパケット内にもこの情報を埋め込みます。サーバーは、クライアントUDPソケット情報をユーザー名(ピアが接続を試みる)に関連付けるためにユーザー名ディレクトリを実装します。
- UDPサーバーは、対応する情報を他の関連するピアに送り返す必要があります。
- 現在、ピアは、UDPデータグラムをこれらの変換されたアドレスに送信することによって直接通信できます。これらのパケットは、問題のUDPポートが許可され、このプロトコルによって導入された遅延がNATデバイスの状態タイムアウトをトリガーしない限り、パス内のクライアントNATデバイスを通過します。
UDP接続を確立した後、OpenVPNなどを使用して2つのクライアント間にUDPSSLVPNを形成できます。これにより、クライアント間のTCP接続を開始するための簡単なチャネルが提供されます。ただし、この接続モデルで考慮すべき重要なセキュリティと信頼の問題があります。インターネット上のランダムなユーザー間で役立つ可能性は低いです。
TCP
TCP接続が必要な場合は、このインターネットドラフトMMUSIC-ICE-TCP:Interactive Connectivity Establishment(ICE)を使用したTCP候補を参照することをお勧めします。
一部のIPアドレスはルーティングできません:http://en.wikipedia.org/wiki/IP_address-それらの1つがある場合、LANの外部から直接アクセスすることはできません。そのLAN上にあるアドレスからLAN上の他のアドレスにアクセスできます。
LANの外部にいる場合、LAN上の特定のマシンへのtcp接続を開始することはできませんが、そのマシンはあなたとの接続を開始できます:http: //en.wikipedia.org/wiki/Network_address_translator