SS P2P Node Controllerは, P2Pファイル共有プログラム(Tinny)や独自ブロックチェーンシステム(miya_core)などのネットワークモジュールとして開発された, UDPベースの全自動P2Pオーバーレイネットワーク構築・管理ライブラリです.
- P2Pオーバーレイネットワーク構築 : ノード探索からルーティングテーブルの構築・維持・拡大まで自動化
- Peer間データ転送 : Boost.Asioによる非同期・イベント駆動でのメッセージ送受信
- DHT : Churn耐性が高い分散ハッシュテーブル(Kademlia)を採用
- 使いやすいインターフェース : Socketライクなネットワーク抽象化インターフェースを提供
すべての通信処理はBoost.Asioの非同期I/Oで実行されており, 複雑なネットワーク管理を開発者の手間なく実現します。 データを送受信に関しては同期的に実行することも可能です.
- NAT下のPeerに対してグローバルIP:ポート番号を通知
- 双方がNAT越えに失敗した場合, 中継サーバーとしてデータを中継
本ライブラリでは, すべてのPeerがSTUN/TURN機能を持ちますが, TURNの動作には別の最適化があります. 具体的には:
- ダミーパケット送信の指示
- 接続先Peer同士がNAT下にいる場合、どちらか一方のPeerにダミーパケット送信を依頼
- NAT穴あけ情報の共有
- ダミーパケット到達元のアドレス情報を取得し、もう一方のPeerへ通知
- P2P直結
- データ本体は中継せず、事前にNATに穴をあけることで効率的な通信を確立
Kademliaは, P2Pネットワーク上でキーとバリューのペアを効率的に格納・検索するための分散ハッシュテーブルです.
Kademliaで管理された各Peerは一意なノードID(通常は160bit)を持ち, このID空間全体にデータを分散して配置・検索できます. Peer間の距離はXOR距離によって定義されます.
Kademliaは高Churn耐性(ノードの頻繁な参加・離脱に対して安定性を保つ能力)を有しています.
- 160ビットの固定長
distance(x, y) = x ⊕ y; // ビット単位の排他的論理和powered by GitDiagram
1. Object instantiation and initialization of the node controller
(共通) 1. ノードコントローラーのオブジェクト化と開始
ss::node_controlelr n_controller( boost::asio::ip::udp::endpoint self_endpoint, std::shared_ptr<boost::asio::io_context> io_context );
n_controller.start( std::vector<boost::asio::ip::udp::endpoint> boot_eps ); // 既知のノードをブートノードとして幾つか(>0)与える- Waiting for messages from a specified peer
(単一ピア) 指定ピアからのメッセージ受信待機
auto peer = n_controller.get_peer( boost::asio::ip::udp::endpoint peer_udp_endpoint );
auto recved_msg = peer.receive( std::time_t timeout_s ); // 指定無しでメッセージが到着するまでブロッキング- Waiting for incoming messages from multiple peers
(多数ピア) ホストに流入してくるメッセージ受信待機
auto &message_hub = n_controller.get_message_hub();
message_hub.start( std::function<void(ss::peer::ref, ss::ss_message::ref)> receive_handler );※ ss_message
struct ss_message
{
json body;
struct
{
ip::udp::endpoint src_endpoint;
std::vector<ip::udp::endpoint> relay_endpoints;
std::time_t timestamp;
} meta;
}- libtorrent
- P. Maymounkov and D. Mazières, "Kademlia: A Peer-to-Peer Information System Based on the XOR Metric," in Peer-to-Peer Systems, Lecture Notes in Computer Science, vol. 2429, P. Druschel, F. Kaashoek, and A. Rowstron, Eds. Berlin, Heidelberg: Springer, 2002, pp. 53–65.
本製品には、OpenSSL Toolkit で使用するために OpenSSL Project で開発されたソフトウェアが含まれています (https://www.openssl.org/) Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
