• 検索結果がありません。

第 4 章 Kademlia のルーティングテーブルとデータ構造 23

5.7 結論

P2Pネットワークは,参加しているノード同士が相互に通信してリソースを共有し合 うサービスモデルである.そのため,P2P ネットワークでは,任意のノード同士で相互 に通信を開始し合うことが出来る事が必要である.構造化P2Pネットワークにおいても,

全く同じような仮定がされており,構造化P2Pネットワークが正しく動作するためには,

任意のノード同士で相互に通信を開始できる必要がある.

しかし,現在のインターネット環境では,任意のノード同士で相互に通信を行うことは 容易ではない.その最も大きな理由として,NATの存在が挙げられる.NATが介在する 場合,NAT下に居るノード同士のみでは通信を開始することが出来ない.そのため,グ ローバルアドレスと持つノードが通信を仲介する必要がある.仲介を行う方法としては UDP Hole Punchingを用いたSTUNや中継方式を用いたTURNが存在するが,これら はいずれもサーバ型のサービスであり,P2Pネットワークに適しいているとは言えない.

そこで本研究では,分散型のNAT 越え手法であるDTUNを提案した.DTUNでは,

グローバルアドレスを持つノードのみからなる DTUNネットワークと,DTUNネット ワークを利用してDHTなどのサービスを実現するサービスネットワークに分けて,構造 化P2Pネットワークを実現する方式である.

NAT には,大きく分けて UDP Hole Punching 可能な種類の Cone NAT と,Hole Punching不可な種類のSymmetric NATが存在する.DTUNでは,外部観測的にNAT 種別の判別を行い,UDP Hole Punching可能なNAT の場合はDTUNノードを介して 直接通信を行いサービスネットワークが提供するサービスを利用する.一方,UDP Hole

Punching不可なNATの場合は,DTUNノードがデータの中継を行って,サービスネッ

トワークを利用する.

さらに,NATが原因となる問題として,多段NATの問題もある.1段のNAT の場 合,NAT箱自体にポートマッピングの設定を行えばインターネットからの接続を受け付 けることは可能であった.しかし,多段NATの場合,1段目のNAT箱にポートマッピ ングの設定を行っても,それより上位にあるNAT箱の設定を正しく行わなければ,接続 を受け付けることは出来ない.Large Scale NAT などが介在する環境では,基本的に多 段NATとなり,インターネットの出口側のNAT箱はユーザが自由に設定することは困 難となる.そのため,P2Pネットワークアプリケーションは多段NAT下でも動作可能な ように設計する必要がある.DTUNでは,外部観測的に NATとUDP Hole Punching 不可の判別を行い,NAT下の場合は自動的にNAT越えを行うため,多段NAT下のノー ドでも正しくP2Pネットワークのための通信を行うことができる.

このように,DTUNを用いることで,NAT や多段NAT が介在する環境でもHole

Punchingや中継方式を用いて,構造化P2Pネットワークを構築しDHTなどのサービス

を実現することが出来るようになった.

6

Churn と大規模環境下の性能

基本的に,P2Pネットワークはエンドノード同士が相互に接続しあってネットワーク を形成している.そのため,ルータやスイッチ等から形成されるインターネットなどと 違い,P2Pネットワークはエンドユーザの行動に応じて常に変化するという特徴を有す る.したがって,P2Pネットワークにはネットワークの変化に対応可能なトポロジ維持 や,ルーティングの安定化を行う方法が必須となる.このような,ネットワークの状態が 一定の定常状態に収まらずに常に撹拌されている状態はChurn [43]と呼ばれる.

Churnの最適な対策手法は設計や実装によって異なるが,大きく分けてルーティング

アルゴリズム部分での Churn 対策と,DHT などサービス部分での対策に分けられる.

libcageでは,Kademliaのルーティング部分に対するChurn対策と,DHT部分での対策 の両方を行った.6.1節では,ルーティング部分に対する対策手法を,6.2節では,DHT 部分に対する対策手法について述べる.さらに,6.3節では,Churn下で10,000ノード 規模でDHTの値取得に必要となった遅延時間と,値取得の成功確率を測定した.

ドキュメント内 JAIST Repository https://dspace.jaist.ac.jp/ (ページ 78-81)