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使えばよかった・・・