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

プロクシモード

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

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

5.3 Distributed Traversal of UDP through NATs の設計

5.3.7 プロクシモード

ここまで説明してきたプロトコルは,Cone NAT下にあるノード,もしくはグローバ ルアドレスを持つノードに対して適用されるプロトコルであった.Symmetric NATの場 合,外部からのデータをパッシブに受信することが難しいため,Symmetric NAT下にあ るノードがサービスネットワークが提供するDHT のルックアップを行う場合,DTUN ノードをプロクシとした代理問い合わせを行う必要がある.本提案では,このような,

Symmetric NAT下にあるノードがDTUNノードを介したサービスネットワークを利用

する方式をプロクシモードと呼ぶ.

Symmetric NAT DTUN Nodes

find node reply

...

find node(dest = ID1)

registerd nodes register

proxy register, ID1, nonce

register (src = ID1)

DTUN Node

proxy register reply, ID2 , nonce

2 D I 1

D I : e d o N

proxy IP and Port

of ID2’ s Node

5.13 プロクシ登録

DHTのルックアップを行う場合,Symmetric NAT下にあるノードがDTUNノードへ proxy find valueメッセージを送信する.proxy find valueメッセージを受信したDTUN ノードは,代理で find valueを行い,得られた結果をSymmetric NAT下にあるノード に返信する.また,DHTへのstoreDTUNノードを介して行う.

DHT のルックアップ等はこのようにして行うことが出来るが,その他のノードから Symmetric NAT下にあるノードにデータの送信を可能にするため,Symmetric NAT下 にあるノードは,DTUNノードに対してproxy registerメッセージを発行する.図 5.13 は,Symmetric NAT下にあるノードがproxy registerメッセージを発行している様子を 表している.proxy registerメッセージを受信したDTUNノードは,図 5.11で説明した

registerメッセージを代理で発行する.ただしこのとき,ソースID に自身のIDを利用

せず,Symmetric NAT下にあるノードのIDを用いる.このようにすると,Symmetric NAT下にあるノードのIDに対して送信されたメッセージは,全てDTUNノードが代理 として受け取るようになる.DTUNノードが代理として受け取ったメッセージは転送さ れ ,Symmetric NAT下にあるノードへ配信される.

Symmetric NAT

Node 1: ID1 DTUN Node 2: ID2 Node 3: ID3

datagram, ID3, ID1, Data forward, ID2, ID1, Data

ID3, IP(Node 3) Port(Node 3)

advertise, ID1, ID3, Nonce

cache request add

advertise reply, ID3, ID1, Nonce

5.14 IPアドレスとポート番号の通知

Symmetric NAT下にあるノードがメッセージの送信元のノードに対して,自身のIP

アドレスとポート番号を伝えることによって,DTUNノードを介さない対称通信による 直接通信が可能となる.図 5.14は,Symmetric NAT下にあるノードが送信元ノードに 対して自身のIPアドレスとポート番号を伝える,advertiseメッセージを発行している様 子を示している.

通常,メッセージを送信する場合,リクエストキャッシュに登録されているID対IP アドレスとポート番号の情報を元に登録を行う.このリクエストキャッシュは,5.3.6節 で説明したように request メッセージ等を受信した際に更新される.前述したように,

Symmetric NAT下にあるノードは,代理でregister メッセージを発行してもらってい る.そのため,Symmetric NAT下にあるノードに向けて送信されたメッセージは,一旦 DTUNノードへ配信されることになる.

DTUNノードはSymmetric NAT下宛のメッセージを受信したら,そのメッセージの

送信元ノードのIPアドレスとポート番号をつけて,Symmetric NAT下にあるノードへ 向けて転送しなければならない.直接通信のメッセージを受け取ったSymmetric NAT 下にあるノードは,送信元ノードに対して,advertiseメッセージを発行する.advertise メッセージを受け取ったノードは,自身のリクエストキャッシュの更新を行う.これに

よって,以降のSymmetric NAT下にあるノードに対する直接通信メッセージは,DTUN ノードを介さず送信される.

ただし,advertiseメッセージを受信できるノードは,グローバルアドレスを持つノー

ドか,Restricted又はPort-Restricted 以外のCone NAT下にあるノードである.従っ て,Symmetric NAT下にあるノードは,advertise replyメッセージが受信できなかった ノードの情報を保持しておき,以降はそれらノードに対しては,advertiseを行わないよ うにする.

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