「分散ハッシュシステムでのNAT超えの考察」に対する質問について
以前当ブログにて「分散ハッシュシステムでのNAT越えの考察」という記事を書きましたが、@Sn0wNightさんから質問を頂きましたので、ここでお答えしたいと思います。
質問はTwitter経由で3つ頂きました。
【質問1】
P1がNext(Hash_P2)を使うことに関わり、どのようにしてP2のハッシュを見つける事ができるか?
⇒ChordではIPアドレスをハッシュとして使うことが一般的ですが、必須ではなかったはずです。ここではP2を何らかの識別子の名前空間(例えば氏名など)から取得します。その識別子をハッシュすることにします。
【質問2】
P2のハッシュをP1が把握しているにも拘らず、P2がG2に対してIPアドレスをポートを通知する理由とは?
⇒P2とP1はお互いプライベートIPアドレス空間のため、UDP hole punchingなどを行っても直接通信できない可能性があります。そのため、P2はG2経由で他のプライベートなIPアドレスの通信をする場合があります。
つまり、多くの場合UDP hole punchingでP2/P1はお互いのプライベートアドレスを知り直接通信ができる。(UDPの場合)、しかしながら一部のNAT状態では何らかのグローバルIPアドレス空間のノードと中継しないと通信ができない。そのためにはP2は自らのプライベートIPアドレスだけでなく、中継を肩代わりしてくれるG2のグローバルIPアドレスを相手に伝える必要があります。UDP hole punching及びグローバルなノードを使ってNAT越えをする手法はICEと呼ばれIETFで標準化されています。
詳細は私が過去「P2Pネットワーク実験協議会」にてNAT越えについて解説したプレゼン資料をご覧ください。
【質問3】
P1からG2経由でP2への接続要求があった場合、G2からP2へどのようなタイミングでリクエストを転送するのでしょうか?
⇒P2とG2は定期的に通信していますが、これはP2とG2のリンクが確立しているかを確認する目的だけです。(※プライベートIPアドレスのノードがグローバルIPアドレスのノードとリンクを絶えず成立することにより、他のノードからの各種リクエストを受け入れる状態を取れるようにする)
P2とG2はTCPで接続が絶えず確立しており、G2からP2へのリクエストがあった場合は、即時にP2に流すように設計します。このため、P2とG2はWebsocketあるいはSIPのように1つのTCPコネクションで両ノードがクライアント-サーバのように振舞います。
Blogの記事等で質問がある場合は@toremoro21までお気軽にご連絡ください。
| 固定リンク
「P2P」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント