p2pソフトを作りたいです

9657c2c0 白帽子 2009-10-07 16:55
P2Pは二つの接続を使い分ける。
1、基本ネットワーク
  検索やメッセージの送受信などに使う、常時張る接続。
2、ダイナミックP2Pアクセス
  必要なときにデータのあるノード/ピアへ接続する。

ダイナミックP2Pアクセスのときなんかに使う
NAT/ファイアーウォール越えの技術についても知っておくほうが良いかと。
あればどこでも接続できる可能性が高くなりますから。
LimeWireやCabosはファイアーウォール設置ノード間の通信ができるようになっていますのでいい例かもしれません。
1、逆向き接続
  要求側→受付側ではなく、受付側→要求側へTCP接続を張る。
  これはTCPのどちらから通信を開始しても双方向にデータを流せる
  性質を使っています。基本ネットワークをつかって受付側に
  メッセージをおくり、接続してもらえばいいのです。
2、UPnP
  わざわざ手動でルーター/NATの設定をしなくても、
  命令を送って自動的にポート開放させる技術。
  バージョンが複数あるそうなので注意。
3、UDP Hole Punching
  NAT越え技術。
  まず、NAT内部のノードAから外のノードBに対しUDPパケットを送る。
  するとNATはしばらくの間、BからきたUDPパケットをAに転送してくれる。
  これにより「NATに穴を開けて」通信を開始すればいい。
4、STUN
  UDP Hole Punchingをもう少し進めて、NAT設置ノード間
  でも通信できるようにする技術。
  STUNサーバが必要。(個人的にはP2Pサーバントにこの機能をつければ、
  初期ノードリストの中のひとつを選んでそこに担当させることができる
  のではないかと思っている。あくまでも提案ですよ。)
  STUNサーバはNAT内部のノードからUDPパケットがきたときに
  そのNATのインターネット側(WAN側)のIPアドレスとポート番号を
  教えるサーバだ。まずは、
  STUNサーバと通信しその情報を接続したいノードBに伝える。
  (スーパーノードなどに情報を登録するとか、
  基本ネットワークで伝えるとか、プログラムによってやり方は違う。)
  すると接続したいノードBが自分AのNATに対しUDPパケットを送信してくる。
  BのNATのWAN側のIPアドレスとポート番号の情報を調べ、
  そこに自分からUDPパケットを送信。
  これをおこなうとP2P通信ができるようになる。
  詳しいことは自分で調べてください。
5、HTTPカプセル化
  P2PのパケットをHTTPでラップする。
  するとHTTP用にファイアーウォールにあけてある80番ポートを安心して通過できるようになる。
  ファイアーウォールの中にはプロトコルをチェックする機能があるので
  このようにしないとはじかれる。
  このHTTPカプセル化の機能および技術は、HTTPゲートウェイ、
  HTTPブリッジとも呼ばれる。
6、中継
  NAT/ファイアーウォール設置ノードA-B間で第三者ノードを介して通信する。
  ここでは第三者ノードをリレーノードと呼ぶことにする。
  NATがあると内向き接続が使えない。そこで、
  ノードAとノードBがリレーノードに接続し、間接的に接続してもらえれば
  いいのである。

Top of this page. | <<last 0 1 2

limit: 15360KB

(p2pソフトを作りたいです/254/0.0MB)


Powered by shinGETsu.