[DHT]P2P分散プロキシの検討:その1
さて、これから数回に分けてDHTを用いたP2Pプロキシについて解説を行う。
進め方として大きく分けて
・P2P分散プロキシの実現方法の概略と実装時の注意点
・P2P分散プロキシの匿名性の議論(DHT-P2PプロキシはTorを超えられるか?)
・P2P分散プロキシの将来性
について書いていく予定だ。
さて、DHTによるP2P分散プロキシは既にHPで実現方式を書いてある。
分散ハッシュテーブルのP2Pアプリへの応用:その2
簡単に書くと、ノードAがブラウザでURL=url1を見たいときにはNode_ID=hash(url1)となるノードXにアクセスすれば良い。このときに、ノードAがノードXを検索するために介在するノードP1,P2.....PZをプロキシとすれば、ノードAはノードXに対して、多重プロキシを介することになり、結局誰がURL=url1を見ようとしているのかわからないといことになる。匿名性を薄めたければ多重プロキシを無効にすればよい。
ここでノードXのように直接ターゲットとなるWEBサーバあるいはストリーミングサーバにアクセスするノードをGWノードと定義しよう。
では、実際にP2P分散プロキシを実現するための注意点を書いていこう。
まず、ノードXはhash(url1)となっているが、このときにurl1にアクセスが集中するとノードXは当然負荷が重くなる。
負荷を分散する方法を考えよう。
簡単な分散方法として、url1にアクセスする時には、乱数をrand()として、Node_ID=hash(url1+rand())となるノードにアクセスすれば良い。こうすれば、特定ページに人気があっても、あるノードに負荷が集中する事はない。
次に今はNode_ID=hash(url1)のようにURL毎にGWノードを変えると、DHTのNW負荷が高くなることが考えられる。これはURLが異なる毎にGWノードへのルーティングを計算しないといけないからだ。またこのルーティングによってページの表示に遅延が出ることが考えられる。
これを克服するには、ある時間毎にGWノードを変えることも考えられるだろう。すなわち、Node_ID=rand()+Time()のような関数で、Time()は一定時間毎に値が変化する関数である。このNode_IDとなるノードにアクセスすべきURLの情報を渡す事になる。こうすれば、NW負荷はNode_ID=hash(url1)の時よりも大分減るだろう。
ストリームを受信するときには注意を要する。ストリーミングサーバからクライアントがストリームを受信する際、クライアントのIPアドレスが変化すれば、当然ストリームは中断してしまう。ということは、少なくともストリームが流れている間はストリーミングサーバ⇔GWノードのセッションは維持しないといけない。
一つの解として、ストリーミングを受けている間は、間にかますプロキシノードが変化しないと言う事が考えられる。それだと匿名性が薄まると懸念する人は、Node_ID=rand()+Time()となるノードを中間プロキシノードとして指定して、GWノードは固定するという手がある。こうすれば、GWノードから見ると誰から受信しているかサッパリわからないということになる。ストリーミングを受信して他方に渡す技術はP2Pストリーミングの技術が確立しているから可能であるだろう。
次回はP2P分散プロキシとしてDHTを使うと果たしてどの程度まで匿名性を高められるか検討してみる。
そしてP2P分散プロキシにおける匿名性と非匿名性のバランスについても議論する予定である。
「P2P」カテゴリの記事
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(2011.10.30)
- TwitterをP2Pで実現する方法をもう少し考えてみる(2010.05.03)
- オフィスツアー(ビットメディア)を振り返る(2009.10.25)
- [開催日変更]オフィスツアー(株式会社ビットメディア)参加者募集のご案内(2009.08.14)
- [NAT]NAT越え入門1-NATとは何か?(2009.04.11)

Comments
コメントありがとうございました。
A1:
GateWayの略です。Ringochや新月のゲートウェイノードに引っ掛けています。
つまりノードAから「仮想的に」インターネット⇔DHTネットワークの境界に見えるノードZを意味します。
A2:
NetworkのNとWです。
通信業界ではよくゲートウェイをGW、ネットワークをNWと略します。
あとはファイアウォールをFW,スイッチをSW(L3SW,L2SWとか)、ルータをR、ロードバランサをLBとか略しますね。
Posted by: Tomo | 2005.05.20 at 01:44 AM
■質問(その1)■
GWノード(直接ターゲットとなるWEBサーバあるいはストリーミングサーバにアクセスするノード)のGWは何の略ですか?
■質問(その2)■
"こうすれば、NW負荷はNode_ID=hash(url1)の時よりも大分減るだろう。"の"NWは何の略ですか?
NetworkのNとwですか?
Posted by: Kiyoshi | 2005.05.19 at 11:21 AM