第 4 章 Kademlia のルーティングテーブルとデータ構造 23
5.1 既存研究
5.1.1 NAT の種類
192.168.0.1:1000 172.16.0.1:2000
0 0 6 : 3 . 0 . 6 1 . 2 7 1 0
0 4 : 2 . 0 . 6 1 . 2 7
1 172.16.0.2:500
1 2
3
under NAT Cone NAT
図5.1 Cone NAT
192.168.0.1:1000 172.16.0.1:2000
172.16.0.3:600 172.16.0.2:500
172.16.0.1:2001
under NAT Symmetric NAT
図5.2 Symmetric NAT
ここで,NAT下にあるノードにデータを送信するパターンとして,
1. NAT 下 に あ る ノ ー ド が 過 去 に 送 信 し た 宛 先 か ら の 送 信 (172.16.0.2:400 → 172.16.0.1:2000)
2. NAT下にあるノードが過去に送信した先と同じ IPアドレスであるが違うポート
番号からの送信 (172.16.0.2:500 →172.16.0.1:2000)
3. NAT下にあるノードが過去に送信していない宛先からの送信(172.16.0.3:600 → 172.16.0.1:2000)
があり,このパターンのうちどれをフィルタリングするかで,Cone NATはさらに細か い種類に分けられる.すなわち,1. 2. 3全てのデータをNAT 下のノードに配信するよ うなNATをFull Cone NAT,1. 2. のデータのみを配信するNATをRestricted Cone NAT,1. のデータのみを配信するNATをPort-Restricted Cone NATと分類する.
図5.2は,Symmetric NATによってソースアドレスが変換されている様子を示してい る.この図のようにSymmetric NAT では,送信先アドレスが違う場合,異なるソース
SW
NAT
The Internet
150.65.1.1
192.168.1.1 192.168.1.2
Port: 7000 192.168.1.2:5000 under NAT
2
3 1
図5.3 ヘアピンルーティング
アドレスに変換される.そのため,NAT下にあるノードは,過去に通信を行っていない ノードからのデータを受信することが出来ない.
NATのヘアピンルーティング
次に,本節ではNATの大きな特徴の一つであるヘアピンルーティング [27]に関する問 題について説明する.ヘアピンルーティングとは,同じローカルネットワークに存在する ノードへ,NAT を中継して行う転送方式のことである.いくつかのNATでは,このヘ アピンルーティングはサポートされず,P2P ネットワークアプリケーションで問題とな る場合がある.
図 5.3は,ヘアピンルーティングを行なっている様子を示している.ここでは,NAT は150.65.1.1というグローバルなIPアドレスを持っており,このNATの下に2台のホ ストが存在する.なお,これらホストには,それぞれ 192.168.1.1と192.168.1.2という プライベートなIPアドレスが割り振られており,グローバルアドレスの150.65.1.1:7000 と,192.168.1.2:5000というアドレスがNATによって関連付けられている.
いま,192.168.1.1のホストから,192.168.1.2:5000へとデータを送信したいとする.
この時,宛先アドレスに150.65.1.1:7000を選択した場合のパケットの転送方法が,ヘア ピンルーティングとなり,これは図 5.3の1で示される経路で表されている.ヘアピン ルーティングは,このように,ローカルネットワークの内側にあるホストに対して,グ ローバルアドレスを宛先としてデータを送信した場合に発生する.もしも,NATが正し くルーティングを行っているのならば,図 5.3の1で示されるように,パケットは正しく 192.168.1.2:5000 へと転送されるはずである.
ところが,実際には,図 5.3の2で示されるように,正しいルーティングを行わずに,
パケットを破棄してしまうNATが存在する.このようなNATはヘアピンルーティング 不可のNATや,単純にヘアピン不可NATなどと呼ばれ,P2Pネットワークアプリケー ションでは問題となる場合がある.
しかしながら,多くの家庭で用いられるNATでは,図5.3の3で示されるように,ロー カルのアドレスである192.168.1.2を宛先として指定すれば問題無く通信が出来る.ロー カルネットワーク内にあるサービス発見としては,zeroconf [23]とMulticast DNS [24]
を用いたBonjour [4]・Avahi [2]や,UPnP [17]などがあり,P2Pネットワークアプリ ケーションにこれらを用いれば,ヘアピン不可のNATであっても正しく通信ができる.
一方,Large Scale NAT [58]などに代表される,ISPレベルでのNATは図 5.3の3で 示すような,ローカル同士の通信は行えない.しかしながら,これらの場合はヘアピン ルーティングが可能となっているので,P2P ネットワークアプリケーションとしては問 題にならない.