P2PとIPアドレスとの関係


さて、先ほどインスタントメッセンジャー(IM)の代表格Windows Messenger を説明したので、このソフトに深く関係あるP2PとIPアドレスの関連について 説明しましょう。

自宅のパソコンからインターネットを繋ぐ場合、ADSLや光ファイバーで接続 している人が多いと思います。その際にルータを使って接続している人が 増えています。しかしながら、ルータとP2Pでは相性が悪い場合があります。 それはどうしてでしょうか?

まず、下記のネットワーク構成で説明します。今、ブロードバンドルータ があり、その下部にPCが2台ついています。ちなみにルータより プロバイダ側については大きなエリアでネットワーク構成を組んでいるので WAN側,一方PC側はLAN側と呼ぶ事が多いです。 今、ルータでWAN側ポートをWAN_R,LAN側ポートをLAN_Rとします。

さて、ルータがプロバイダーと接続すると、ルータのWAN_Rにはプロバイダー から通信するために必要なIPアドレスを受け取ります。 このIPアドレスをグローバルアドレスと呼び、世界に一つしか ないユニークなアドレスです。

一方LAN側というと、こちらはルータやPCがあるルールを基に 勝手に設定するIPアドレスです。これをプライベートアドレス と呼びます。なお、プライベートアドレスを設定できるアドレス範囲には 制限があるので注意しましょう。

ここで一つ疑問があります。ルータのWAN側にグローバルアドレスが 与えられるのだから、PCにもグローバルアドレスを与えてもいいのでは? ということです。技術的にはそれは可能ですが、問題があります。 通常使うIPアドレスはIPv4と呼ばれ、資源が限られています。 今、世界中にある全てのパソコンにグローバルアドレスを割り当ててしまうと IPアドレスが無くなってしまいます。 そこで、インターネットと接続するポイントはグローバルアドレス を付け、その他のポイントはプライベートアドレスを使う事で IPアドレスを有効に使おうということになったのです。

ところで、また疑問が生まれてきます。先ほど、PCにはプライベート アドレスを付けると言いました。ところが、プライベートアドレスは いろいろな人が勝手に付けれる事ができるので同じプライベート アドレスが複数ある可能性があります。そこでサーバがPCの プライベートアドレスを知っていてもPCを特定することができず、 結果的にサーバとPCで通信ができなく なってしまうのでは? という心配です。これを解決するためにプライベートアドレスと グローバルアドレス を変換するシステムが必要となったのです。これを 「NAPT」あるいは「IPマスカレード」と呼びます。


(注意)ルータではNAT機能と書いて実際にはNAPTあるいはIPマスカレード の機能を指す場合が多いです。
それではIPマスカレードの説明をしましょう。 今、PC Aがルータを通してサーバのWEBコンテンツをブラウザで見ようと しています。この通信模様を説明したのが下の図です。

まず、PC AはサーバAと通信するのですからIPアドレスの送信元は自分自身 であるPC_A、送信先はサーバAとなります。またポートとはサービスを 表わします。今WEBを見るためのプロトコルであるhttpを使うので、 送信先のポートはhttpを表わす80番ポートとなります。また送信元 ポートはPC_Aが勝手に決めていいので今は1000とすることにしましょう。

ではこの通信がルータを通るとどうなるのでしょうか? まず、IPの送信元がPCでなく、ルータのWAN側アドレスWAN_Rとなることが わかるでしょう。 ルータのWAN側アドレスWAN_Rはグローバルアドレスなので、サーバはルータと 通信することができます。(プライベートアドレスとグローバルアドレス 間を直接通信することはできません。)送信元ポートも変わることが わかりますね。

では、今度はサーバAからPCに通信が帰ってきたところを考えて見ましょう。 今と全く逆の手順にすればよいことがわかります。詳しくは下図を 見て下さい。


(注)なお、NATはポートまでは変換しません。ではなぜIPマスカレード が世の中に普及しているのでしょうか?もしLANにPCがN台あった場合、 NATを使うとルータはN個のグローバルアドレスを取得する必要があります。 しかしIPマスカレードではポート番号まで変換することができるため、 グローバルアドレスが一つで充分なのです。これはN台のPCが 同じサーバの同じポートにアクセスする例を考えるとわかります。
さて、これでルータに良く使われるIPマスカレードの説明が終わりました。 ではなぜIPマスカレードはP2Pと相性が悪いのでしょうか?

その一つの理由は データにIPアドレスを書き込んでしまうアプリケーションがあることです。 確かにIPマスカレードでルータはPCのプライベートアドレスをグローバル アドレスに変換することができました。しかしPCは自分自身に付けられた プライベートアドレスしか知りません。そのアドレス情報をデータ内容部分に 入れたらどうでしょうか?データ内部にはプライベートアドレスが書き込まれる ことになります。そしてルータはデータ内容に 書かれているプライベートアドレスを グローバルアドレスに変換してくれません。そこで通信がうまくいかなくなるのです。 Windows Messengerではこのようなデータ部分にアドレス情報を埋め込む ために、ルータによっては作動しないことが起きます。

これを解消するには、ルータに付与されているグローバルアドレス をPCが知る事ができるようにすればいいのです。それを行うのが UPnPです。UPnP対応ルータはルータに付与している グローバルアドレスをPCに教える機構があります。そのため、Windows Messengerを 利用する事が可能なのです。Windows Messengerユーザがルータを買う時には きちんとUPnP対応であることを確認しましょう。

さて、もう一つP2PとIPマスカレードと相性が悪い理由があります。 それは、ルータ外部からPCに対して通信を始めることができないことです。 確かに、先ほどの説明の通りIPマスカレードを使ってもPCからサーバへ通信を 行うことは可能でした。しかしながら PCのアドレス自体はルータによって隠蔽されているので、外部から PCへ通信がしたい!と思ってもそれをすることはできないのです。


(注)一部のブロードバンドルータは外部からPCに接続するため「DMZ」 という機能を備えています。ルータのWAN側についているIPアドレス に外部から接続した通信を強制的に内部のPCに転送する機能です。 これはセキュリティでよく使われるDMZとは 機能が違うために注意して下さい。

(※追記※)
なお、外部の通信のうち、一部のポートの通信を指定したPCに転送することをポートフォワーディング と呼びます。これはルータのIPマスカレード機能によってP2Pアプリケーション がうまく通信できない時に良く使われる機能です。たとえばWinMXと通信させたい ためにはTCPの6699とUDPの6257をポートフォワーディングする必要があります。 一方Winnyではポートの割り当てがランダムに決まるため、各自調べて その割り当てられたポートに対してポートフォワーディングする必要があります。
DMZとポートフォワーディングについては下記のページが参考になるでしょう。
http://www.atmarkit.co.jp/fpc/special/bbrouter_desc/portforward_dmz.html


さてこのようにルータ(IPマスカレード)はP2Pには不向きであることが わかりました。それを解消するにはどうすればいいのでしょうか? その一つの解がIPv6を使う事です。IPv6の世界ではIPアドレス が潤沢にあるため、もはやプライベートアドレス、グローバルアドレスの 区別を意識する必要がありません。そのためIPマスカレードも不要なのです。

ところが、P2PでIPv6を使うと問題が生じます。それはP2Pの相手の IPアドレスが丸見えになってしまうことです。IPアドレスが分かると いうことはDOSアタックがされたり、相手が加入している組織がわかって しまうなどセキュリティ的に不安があります。そのため、P2Pでも相手 にIPアドレス等を知らせない匿名通信路の研究が盛んにされています。 P2Pの匿名通信路については後の章で説明します。

IPv6の世界になるとあらゆるの家電と通信ができたり、モバイル機器への 通信など興味深いことが考えられます。IPv6のP2Pへの応用については また後日説明します。

それではP2Pと帯域の関係について説明します。



NEXT

TOPページに戻る