P2PとNAT(メモ)
近日中にファイアウォールとP2Pの記事を書くので、これはそのメモという位置づけである。
最近、P2P-VoIPにおいてskypeが人気がある。これはNAT越しでも設定不要と言う便利なソフトである。一体どのような仕組みになっているのだろうか?今回はその仕組みに焦点を当てていく。
まず、ファイアウォールのNAT変換の方式として4つの方法がある。これを説明したのが次の資料である。
第1回 IPv6接続をさらに透過するTeredo
NATにはCone NAT,Restricted cone NAT,Port-restricted cone NAT,Symmetric NATがあることがわかる。
さて、一番難しいP2P通信は両者がどちらもNATの内側にある場合である。それを解決する手段がUDP hole punchingである。下はそれを図解したものである。TCPでなく、UDPを使う事に注目。
NAT and IPv6
より詳しい資料はこれである。
P2P communication across middleboxes
英文だが平易な文章で書かれていのでチャレンジして欲しい。
良く知られた技術がSTUN - Simple Traveral of User Datagram Protocolであり、これはRFC資料となっている。
STUN RFC3489
さて、この書類を見ると、Symmetric NATはなかなか通過させるのが難しいことがわかる。ただし、現在Symmetric NATを通過させる事を検討中である。それがSymmetric NAT Traversal using STUNである。また同じくSymmetric NATを通過する方法でTURNが挙げられる。
STUNとTRUNについて
STUNを代表するUDP hole punchingをする際には通常サーバが必要である。これをグローバルIPをもつノードで代用しようとするのが、次の資料。なかなかわかりやすい。
SUNET
これは親ノードと子ノードに分類して、親ノードを経由して子ノードのポート使用状態を他のノードに通知させることである。ただし、親ノード間がメッシュ構造になっていたり、子ノードが複数の親ノードに結びつける事等が検討されていないので、研究すればもっと面白いことになるかもしれない。
*NATについては下記にさらに新しい情報を記載しています。是非ご覧ください。
| 固定リンク
「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)
この記事へのコメントは終了しました。
コメント
初めまして。SUNETを作ったSunoと申します。SUNETのご紹介ありがとうございます(^^)
どうやら間違えてすごい勢いでトラックバックしてしまったようで、すみません。
目障りでしたら消してしまってください。
本当にすみませんでした。
投稿: suno | 2004.05.04 23:13
ごろ猫さん:
コメントありがとうございます。回答はごろ猫さんのBLOGへ致しましたので、よろしくお願いします♪
投稿: Tomo | 2004.04.24 23:15
skypeと同じようなアプリケーションを作ってみたいと思っています。まずは、P2Pの実装ですね。紹介していただいた日本語のページは読みました。英語で書かれたページを後回しにするのは駄目だと思っていますが、やはり時間がかかるので後回しになりますね。毎回注意されるのですが(v_v;;)TRUNでは3wayハンドシェイクが行われた後に外部からのポートフォワーディングが行えるのでしょうか。それとも内部からのACKパケットのみで透過できるのでしょうか。実際やってみたいと思います。もしかすると紹介していただいたHPに書いているかもしれませんね。
投稿: ごろ猫 | 2004.04.24 21:11