P2Pと聴くと不慣れなために抵抗感があったので、理解補助のためにTorrentの仕組みを調べてました。
すると、この資料を発見。
ここまでP2Pの仕組みをわかりやすく書いてくれたkyorohiro++
ということで、理解したことを1ページにまとめるエントリ。
ざっとまとめてみると…
- Torrent file
- UPnP
- Tracker
- DHT(分散ハッシュテーブル)
サーバ・クライアント方式でない方式。特徴は以下3点。
・Peerは受け取ったInfoHashをもとに、その対応データを持ちそうなPeerを紹介する
・Peerどうしはお互いの距離を知っている
・Peerは自身に近いPeerの情報を多く持っている- TorrentのDHT機能
・DHTの名前は「Kademila」
・XORでPeer間の距離を計算
・UDPでPeerどうしが通信を行う - RoutingTable
・kBucketのRootingTableでPeerの一覧を管理(※kBucket:K個のPeer情報を格納する入れ物、Peerの識別子はKID)
・RootingTableは、0〜160までの161個のkBucketを保持する事ができる
・RootingTableを所持しているPeerとのXORを計算し、その値をもとにどのkBucketに追加するかを決める - FindNode
・FindNodeクエリとFindNodeレスポンスでDHTネットワークを構築する
・FindNodeクエリを利用すると、指定したKIDにもっとも距離が近いNodeを教えてもらえる
・リスポンスを受けたらRootingTableを更新する - GetPeer/AnnouncePeer
・GetPeersメッセージを利用して、データを所持しているPeerまたは最も近いPeerを探すことができる
・GetPeerを繰り返して、上位K個のNodeが固定されたら、AnnounePeerメッセージを利用してデータを記録する
- TorrentのDHT機能
さらに簡略して、Torrentの仕組みを3行で書くなら…
- Torrent fileをもとにPeer間でデータ送受信
- リモートデバイスと通信するにはNAT越えが必要で、UPnPでリモートデバイスのGlobalIPを取得
- クライアント・サーバ方式であればTrackerを、Trackerを介さない方式であればDHT(分散ハッシュテーブル)でP2Pを実現
UPnPでGlobalIPを取得する、Peer間のデータ受け渡しは分散ハッシュテーブルで実現されるという箇所が、技術の要のようでした。
■補足
UPnP(Universal Plug and Play):UPnPは、機器を通信ネットワークに接続すると、複雑な設定作業を行わなくても他機器と通信したり、その機能を利用できるようにするプロトコル。