P2P型アプリケーション用ライブラリ SUNET
Download
Report
Transcript P2P型アプリケーション用ライブラリ SUNET
P2P型アプリケーション用ライブラリ
SUNET
B3 suno
アウトライン
背景・問題
STUNの説明
SUNETの概要
システム構成
動作フロー
デモ
まとめ・感想
背景
家庭のネットワーク環境
ブロードバンド化
ルーター
多くのコンピュータがプライベートなネットワークへ
P2Pアプリケーション
集中負荷がかからない
クライアントの能力の有効活用
例
ファイル交換
VoIP、ビデオチャット
問題
多くのコンピュータプライベートアドレスを
持っている
直接通信が行えない
今のP2PソフトはグローバルなIPアドレスを持つノ
ードを経由している
帯域の限界
遅延の発生
STUNとは?
Simple Traversal of UDP through NATs
RFC 3489
NAT内の端末同士が直接通信できるようにする
Suno家ネットワーク
Quno家ネットワーク
ルーター
yyy.yyy.yyy.yyy
ルーター
xxx.xxx.xxx.xxx
Sunoマシン
192.168.0.2
STUN
Qunoマシン
192.168.0.2
何故直接通信できるか
サーバー
ルーターがポート51を開いて
サーバーのポート50へ送る
Suno家ネットワーク
Quno家ネットワーク
ポート50からサーバーのポート50に送信
ルーター
xxx.xxx.xxx.xxx
Sunoマシン
192.168.0.2
ルーター
yyy.yyy.yyy.yyy
Suno家のルータのポート51に送ると
sunoマシンのポート50にに届く
ルーターの種類
Full Cone
Restricted Cone
Port Restricted Cone
Symmetric
高スループット
高セキュリティ
SUNETの概要
STUNを利用したP2Pのライブラリ
ユニキャスト
ブロードキャスト
あて先にメッセージを送れる
参加者全員にメッセージを送れる
直接通信
STUNを用いた直接通信が行える
従来のP2PソフトではGlobalなIPアドレスをもったノードを
経由していた
帯域と遅延の問題が解決
ノードのタイプ
親ノード
グローバルなIPアドレスを持っている
他の親ノード全てと繋がっている
子ノード
プライベートなIPアドレスを持っている
親ノードのうち一つと繋がっている
システム構成
親
親
親
親
子
子
子
子
子
動作フロー(参加)
参加ノードに初期親ノードを与える
初期親ノードから親ノードのリストを受け取る
ルーターのタイプをチェック
参加ノードがGlobalなIPを持っている場合親ノードとして参加
参加ノードがPrivateなIPを持っている場合子ノードとして参加
初期ノード:suno.net
リストくれ
?
親
あいよ
子
親
親
suno.net
ルーターチェックさせて
親
動作フロー(ユニキャスト)
Sunoとはつながってないから
別の親ノードに送ろう
Sunoにメッセージを
送りたい!
親
Sunoとはつながってるぞ!
送ってやろう。
親
親ノード
子
子
子
Suno
親
メッセージキター!!
Sunoとはつながってないな。
メッセージは破棄しよう
子
動作フロー(ブロードキャスト)
つながってるみんなに
送るぞー
みんなにメッセージを
送りたい!
親
つながってる子ノードに
送るぞー
親
親ノード
子
子
子
親
つながってる子ノードに
送るぞー
子
動作フロー(直接通信)
133.27.170.YのB番に接続してちょうだい
133.27.170.XのA番に接続してちょうだい
親
親
子
133.27.170.YのB番
133.27.170.XのA番
親
開いたUDPポートと
マッピングされている
ルーターのIPとポートは?
開いたUDPポートと
マッピングされている
ルーターのIPとポートは?
直接通信確立
子
デモ
サンプルアプリケーション
P2P型共有お絵かきボード
2つのノードで同じお絵かきボードを共有
まとめ
P2P型アプリケーション用ライブラリ
SUNETを作成した
ユニキャスト
ブロードキャスト
直接通信
帯域・遅延問題の解消
感想
時間がなくて設計がいまいち
親ノード間のトポロジーがいまいち
クラスをより適切に定義すべきだった
今のままだとスケールしない
P2Pのルーティングは大変だ
Jxta使えばよかった・・・