- 締切済み
ネットワークプログラミング
ネットワークプログラミング初心者です。 簡単な接続型チャットプログラムを作ったのですが、なぜかうまいことつながりません。 ネットワークの設定が間違っているのかと思い、デスクトップ遠隔操作ツールを使ってみたところ、realVNCはつなぐことは出来なかったのですが、 LogMeInを使ったら遠隔操作をすることが出来ました。 このような状況からどこが間違っているかわかりますでしょうか? どなたかご教授お願いします。 <環境> Windows Vista HomePremium
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
>私の利用しているプロバイダは固定グローバルIPアドレスサービスと言うものを提供しており、 >先日それに申し込みグローバルIPを取得したのですが、その場合でもルータをいじらなければいけないのでしょうか? そうです。「ルーターの内側は別世界」です。 因みに「グローバルIPアドレスサービス」と言うのは「プロバイダに再接続しても、ルーターのWANアドレスに、常に同じIPアドレスが割り振られる」と言うサービスです。 このサービスを利用しない場合「プロバイダに再接続すると、接続のたびに空いているグローバルIPアドレスを割り振られるので、再接続するたびに、毎回異なるIPアドレスが割り振られてしまう」と言う状態になり、色々と困るのです。(プロバイダに再接続するたびに新しいIPアドレスを相手に教えないとならなくなるので困る) このサービスは「ルーターの外側のWANアドレスが常に一定になる」と言うだけのサービスで「ルーターの内側のローカルIPアドレスは、相手に判らない」のは同じです。
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
通常、ルーターの内側は「IPアドレスがローカルIPになっている為、外から見えない」ので、ルーターの外からルーター内のPCに対してコネクションを確立する事は出来ません。 コネクションの確立は「常に、ルーターの内側にあるPCが、外に対して行う」のです。逆は出来ません。 >LogMeInを使ったら遠隔操作をすることが出来ました。 LogMeInは、LogMeIn社のサーバが「橋渡し」をするので「まるで、ルーターの外からルーター内のPCに対してコネクションを確立しているかのような動作をする」ようになっています。 ルーターの内側同士のPCが通信する場合の事を、良く考えてみてください。 全世界から見えているIPアドレスは「ルーターのWAN側IPアドレス1つだけ」です。ルーターの内側にPCが2台あって、それぞれが192.168.0.2、192.168.0.3と言うローカルIPアドレスになっているとします。このPCを、それぞれ「PC1」「PC2」としましょう。 また「別の場所のどこか」も、ルーターがあって、同じように、ルーターの内側にPCが2台あって、それぞれが192.168.0.2、192.168.0.3と言うローカルIPアドレスになっているとします。このPCを、それぞれ「PC3」「PC4」としましょう。 ここで「PC3とPC4がP2Pで通信する」とします。両方は同じローカル・ネットワーク上に居ますから「192.168.0.2から192.168.0.3にコネクション確立を要求するだけ」で済みます。 では「PC1とPC3がP2Pで通信する」と言う場合は? 2台は別々のローカル・ネットワークに居て、どっちもローカルIPアドレスは「192.168.0.2」です。 片方が「相手のルーターのWANアドレスを知っている」としても、その内側に「192.168.0.2、192.168.0.3と言うローカルIPアドレスのPCが2台居る」のまでは知る事が出来ません。 せいぜい出来るのは「相手のWANアドレスに対して、つまり、ルーターに対して、コネクションの確立を投げる」くらいが関の山です。 で、ここで「IPマスカレードの静的ポートマッピングNAT」ってのが威力を発揮します。 例えば、ルーターに「外からポート番号○○○でパケットが飛んできたら、全部、PC3に、つまり、ローカルIPアドレスが192.168.0.2のPCに丸投げしろ」と設定したとします。 ここでPC1が、PC3が繋がったルーターのWANアドレスに対し「ポート番号○○○でコネクション確立したいです」と、PC3が繋がったルーターにパケットを投げます。 すると、PC3が繋がったルーターは、外からポート番号○○○でパケットが飛んできたら、全部、PC3に丸投げするので、PC3に対して「PC1から飛んできた、コネクションの確立要求が届く」事になります。 それに対するPC3からPC1への返答は、ルーターの通常のNAT機能により、ローカルアドレスとグローバルアドレスの変換が行われ、相手に届きます。 このようにして、両方のルーターで「任意の特定のポートを、IPマスカレードの静的ポートマッピングNATに設定する」ことにより「異なるネットワーク上のPC2台が、任意の特定のポートを使って、P2Pを確立する事が出来る」のです。 なお「単にポートを開放しただけ」では、どうにもなりません。ポートの開放だけでは、ルーターが「外から来たコネクション確立要求を、内側に居る誰に渡せば良いのか悩む」ので、内側にいるPCにパケットは届きません。たとえ、内側にPCが1台しか居なくても、です。
- mtaka2
- ベストアンサー率73% (867/1179)
通信したい二台は別々にインターネットに繋がっているということでしょうか? だとしたら、ルーターなどのファイヤーウォール機能などによって、 PCから外部への通信(コネクション確立)はできるから、 外部からPCへの通信(コネクション確立)はできない ようになっているのだと思います。 TCP/IP のクライアント(connect する側)はこういう通信環境でも問題ありませんが。 サーバ(listen する側)がこういう通信環境の場合、そのままではまったくコネクションの確立ができません。 LogMeIn は、NAT traversal と呼ばれる種類の技術を使って、 そういった「外から通信できない」はずのPC同士での通信を実現しています。 http://ja.wikipedia.org/wiki/Hamachi NAT traversal では、基本的に、最初の通信確立時には、 「外部からの接続を受け付けるサーバ」が通信の仲立ちをしますので、 そういう別サーバを用意できない場合は使えません。 あとは、出来る手段は UPnP を使って、ルータに外部からの通信確立を許可させるぐらいでしょうか。 http://ja.wikipedia.org/wiki/UPnP
お礼
ご回答ありがとうございます。 ファイヤーウォールの設定が間違っているということですね。 ポート解放チェックサイトにおいて使用するポートが開いていることは確認済みなのですが、 それだけでは不十分なのでしょうか? ポートさえ開いていればOKじゃないかと素人考えながら思っているのですが…。
お礼
お返事ありがとうございます。 私の利用しているプロバイダは固定グローバルIPアドレスサービスと言うものを提供しており、 先日それに申し込みグローバルIPを取得したのですが、その場合でもルータをいじらなければいけないのでしょうか? お暇がありましたら教えてください。