libp2p
P2Pアプリケーションの開発を可能にするネットワークフレームワーク 「他のピアを見つけて接続することはP2P Networkにおける重要な課題である」
Libp2pの特徴
Protocol IDs
一意な文字列識別子があり、接続が最初に開かれたときのprotocol negotiation(交渉)で使われる
/my-app/amazing-protocol/1.0.1
Hundler function
接続を受け付けるためにLibp2pアプリケーションはスイッチやgoのHostインターフェースのような上位のインターフェースで、protocl IDを使ってHandler functionを登録する
Binary streams
Libp2p protoclが伝送する"medium"は以下の特徴を持つ
双方向で信頼の高いバイナリデータの配送
両側でいつでもStreamの読み取りと書き込みが可能
データは書き込まれたのと同じ順序で読み込まれる
"half-closed"、書き込み用にclosed, 読み取り用にopen、書き込み用にopenもできる
Backpressureに対応
読み手は熱心な書き手に殺到することはない
Common patterns
Ping
Peerが他のPeerがオンラインであるかどうかをすばやく確認するためにしようできる(生存チェック)
Identify
Peer同士が互いについての情報、特に公開鍵と既知のネットワークアドレスを交換することを可能にする
Remote peerは新しいstreamをopenするとIdentify protobuf messegeに自分自身に関する情報を入力する
Identify/push
Identifyのちょっとしたバリエーションである
had-dht
Peer touting, Content routing昨日の基盤として使用している
Circuit Relay
2つのPeer間で直接接続できない場合に、Relay peerを経由してTraffic(渋滞)をtunnelingするためのプロトコルを提供する