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
これは親ノードと子ノードに分類して、親ノードを経由して子ノードのポート使用状態を他のノードに通知させることである。ただし、親ノード間がメッシュ構造になっていたり、子ノードが複数の親ノードに結びつける事等が検討されていないので、研究すればもっと面白いことになるかもしれない。
「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
初めまして。SUNETを作ったSunoと申します。SUNETのご紹介ありがとうございます(^^)
どうやら間違えてすごい勢いでトラックバックしてしまったようで、すみません。
目障りでしたら消してしまってください。
本当にすみませんでした。
Posted by: suno | 2004.05.04 at 11:13 PM
ごろ猫さん:
コメントありがとうございます。回答はごろ猫さんのBLOGへ致しましたので、よろしくお願いします♪
Posted by: Tomo | 2004.04.24 at 11:15 PM
skypeと同じようなアプリケーションを作ってみたいと思っています。まずは、P2Pの実装ですね。紹介していただいた日本語のページは読みました。英語で書かれたページを後回しにするのは駄目だと思っていますが、やはり時間がかかるので後回しになりますね。毎回注意されるのですが(v_v;;)TRUNでは3wayハンドシェイクが行われた後に外部からのポートフォワーディングが行えるのでしょうか。それとも内部からのACKパケットのみで透過できるのでしょうか。実際やってみたいと思います。もしかすると紹介していただいたHPに書いているかもしれませんね。
Posted by: ごろ猫 | 2004.04.24 at 09:11 PM