Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
libp2p
Search
wshino
May 23, 2019
Technology
7
1.2k
libp2p
wshino
May 23, 2019
Tweet
Share
More Decks by wshino
See All by wshino
Past, Present and Future
wshino
1
390
Superiority of Rust
wshino
3
340
Try Cross Compile Then Fail
wshino
0
140
GORMOS - A high performance and scalable design for decentralized applications -
wshino
4
1.7k
DAppのデプロイ戦略 / DApp Deployment Strategy
wshino
3
1.7k
Sharding
wshino
4
1k
Plasma Debit
wshino
2
1.8k
ブロックチェーン技術の登場とスマートコントラクト化する社会
wshino
5
5.2k
Truffle + Drizzle と、Ethereumの概況について
wshino
2
1.2k
Other Decks in Technology
See All in Technology
AWSコンテナ本出版から3年経った今、もし改めて執筆し直すなら / If I revise our container book
iselegant
15
3.9k
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
21
3.4k
Autify Company Deck
autifyhq
1
39k
生成AIの強みと弱みを理解して、生成AIがもたらすパワーをプロダクトの価値へ繋げるために実践したこと / advance-ai-generating
cyberagentdevelopers
PRO
1
180
MAMを軸とした動画ハンドリングにおけるAI活用前提の整備と次世代ビジョン / abema-ai-mam
cyberagentdevelopers
PRO
1
110
ガチ勢によるPipeCD運用大全〜滑らかなCI/CDを添えて〜 / ai-pipecd-encyclopedia
cyberagentdevelopers
PRO
3
200
AWS re:Inventを徹底的に楽しむためのTips / Tips for thoroughly enjoying AWS re:Invent
yuj1osm
1
540
ネット広告に未来はあるか?「3rd Party Cookie廃止とPrivacy Sandboxの効果検証の裏側」 / third-party-cookie-privacy
cyberagentdevelopers
PRO
1
120
Apple/Google/Amazonの決済システムの違いを踏まえた定期購読課金システムの構築 / abema-billing-system
cyberagentdevelopers
PRO
1
210
日経電子版におけるリアルタイムレコメンドシステム開発の事例紹介/nikkei-realtime-recommender-system
yng87
1
480
いまならこう作りたい AWSコンテナ[本格]入門ハンズオン 〜2024年版 ハンズオンの構想〜
horsewin
9
2k
事業者間調整の行間を読む 調整の具体事例
sugiim
0
1.1k
Featured
See All Featured
It's Worth the Effort
3n
183
27k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Why Our Code Smells
bkeepers
PRO
334
57k
Producing Creativity
orderedlist
PRO
341
39k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
A better future with KSS
kneath
238
17k
Documentation Writing (for coders)
carmenintech
65
4.4k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Navigating Team Friction
lara
183
14k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Designing for Performance
lara
604
68k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.1k
Transcript
libp2p Powered by DMM Blockchain Labs 1
自己紹介 - About me @ DMM.com Shinohara Wataru ・DMM.com Blockchain
Engineer ・I really love Roller Coasters. @shinanonozenji_ 2
書籍紹介 - Publishing @ DMM.com 3
libp2pとは @ DMM.com • p2p分散アプリケーションを作るフレームワーク • 元々はIPFSのプロトコル • 今はIPFSから独立したプロジェクト 4
多言語での実装 @ DMM.com • Rust • Go • JavaScript •
Java • Haskell • Python 5 substrate-network-libp2p
p2pおさらい 6
p2pとは @ DMM.com • 対等の者同士が対等な立場で相互にやり取りをおこなう ◦ 対等の者(Peer = Node) •
ネットワークの参加者はクライアント、サーバー両方の役割を担える • システムの中心となる存在がいない ◦ ≠ クライアント/サーバーネットワークモデル • ノードが停止しても一台さえあればサービスが止まることはない 7
p2pの代表的なサービス @ DMM.com • Blockchain • Skype • WebRTC •
BitTorrent 8
p2pのメリット @ DMM.com • 参照性能の向上 ◦ 状態を持つ処理はまた別の困難が存在 • 耐障害性 ◦
一部のノードが障害を起こしてもシステムは停止しない • Overlay Network ◦ 異なるネットワーク間でも同一ネットワークとして通信可能 →中央管理者がいらない 9
p2pアプリケーション開発の問題 @ DMM.com • 実現するために必要な機能が多い ◦ Transport ◦ Discovery ◦
Peer Routing ◦ NAT Traversal(UDP Hole punching...) ◦ and more. 10
NAT Traversal 11
NAT Traversalとは @ DMM.com ネットワークの中から他のネットワークの中へ通信する技術 12 private IP global IP
private IP
NAT Traversalの用語説明 @ DMM.com • NAT ◦ private IP ←→
public IPの変換 • STUN ◦ 外から見た自分のアドレス(Refrective Addrress)を返す • UDP ホールパンチング ◦ STUNで得られたアドレスを使ってコネクションを張る 13
NAT Traversalの用語説明(2) @ DMM.com • ICE(Interactive Connectivity Establishment) (WebRTCで使う) ◦
ホールパンチしてくれる ▪ vanilla(ホールパンチの結果をまとめて送信) ▪ trickle(ホールパンチの結果を逐次送信) • 早くコネクションを張る可能性がある 14
NAT Traversalの困難 @ DMM.com NATは統一規格がない • full cone NAT •
address restricted cone NAT • port restricted cone NAT • sequential port symmetric NAT • random port symmetric NAT ホールパンチができないものもある 15
NAT Traversalの用語説明(3) @ DMM.com • TURN ◦ ホールパンチングができない場合にデータ中継をリレーする 16 TURN
libp2p 17
libp2pは何を解決するか @ DMM.com p2pアプリケーションを実現するために必要なモジュールを提供する 18
• p2pアプリケーション、通信以外の全て • そこは実装しよう libp2pは何を解決しないか @ DMM.com 19
• 効率性 • 可用性 • 発展性 libp2pの主な特徴 @ DMM.com 20
libp2pの主な特徴 @ DMM.com • 効率性 ◦ 基礎となるトランスポートの効率的使用 ◦ 接続の再利用性(ソケットの効率的な利用) ◦
ピア間の通信を1つのコネクションで多重化する ▪ ハンドシェイクのオーバーヘッド回避 ▪ ポートの枯渇回避 21
libp2pの主な特徴 @ DMM.com • 可用性 ◦ ネゴシエーションプロセスで、ピア間でマルチプロトコルとそれぞれの バージョンを使用可能 ◦ 後方互換性
現状のLinuxなどで動作する ◦ 現在のネットワーク技術の全機能を使用可能 22
libp2pの主な特徴 @ DMM.com • 発展性 ◦ NAT Traversal ◦ 接続中継
▪ Relay ◦ 暗号化 23
モジュール @ DMM.com • 必要な機能をモジュールを選択することで実現する • プロトコルの修正があってもモジュールでアップデートできる 24
Relay Protocol @ DMM.com • 暗号化されたTURN ◦ NAT越えできないノードを中継ノードででつなぐ ◦ 通信は暗号化されて身元確認(identity)がある
• 通信間のノードが中間者攻撃できない ◦ secioでend-to-endで暗号化している • 許可すれば他のアプリケーションのlibp2p通信のrelayになれる 25
レイヤー @ DMM.com 26 Application Stream Multiplex Encryption Transport
Transport @ DMM.com • transportでコネクションを確立してconnectionを作成する 27 dial listen connection確立 Connection
Transport
あらゆるプロトコルに対応 @ DMM.com 暗号化されてないプロトコル • TCP • UDP • SCTP(ストリーム処理)
• UDT(UDPベースのデータ転送) • uTP(torrentでデータ転送に使ってる) 28 uTP https://www.bittorrent.org/beps/bep_0029.html
あらゆるプロトコルに対応 @ DMM.com 暗号化されたプロトコル • TLS • QUIC(TCP and TLS
+ HTTP/2 over UDP) • CurveCP(楕円曲線を使った通信) • SSH • Noise ◦ lightning networkのBOLT仕様で利用 29 CurveCP https://curvecp.org/ Noise http://noiseprotocol.org/
自己記述アドレス(マルチアドレス) @ DMM.com • /ip4/90.46.231.22/udp/25000 ◦ IPv4の90.46.231.22でUDP 25000 • /ip6/fe80::0202:b3ff:fe1e:8329/udp/1567/quic
◦ IPv6のfe80::0202:b3ff:fe1e:8329でUDP 1567でQUICを使う 30 QUIC UDP : 1567 IPv6 : fe80::0202:b3ff:fe1e:8329 multiaddr transport
暗号化 @ DMM.com • secio ◦ 通信の暗号化をサポート ◦ 暗号化してないプロトコルも暗号化して通信する ◦
そのうちTLS1.3になるのかな? 31 Application Stream Multiplex Encryption Transport
Stream(仮想双方向チャネル) @ DMM.com • connection自体を使うのではなくその上にstreamを作成する • streamは複数作成できる • connectionを使い回すため 32
stream stream stream Stream Multiplex
Stream Multiplex(多重化、逆多重化) @ DMM.com 複数のstreamを一つのコネクションにまとめる • SPDY • mplex(バックプレッシャーなし) •
yamux(バックプレッシャー付き) 33 stream stream stream Application Stream Multiplex Encryption Transport
Streamの選択 @ DMM.com • streamのプロトコルをmultistreamで複数定義する • 接続の際にmultistream-selectでプロトコルを選択 ◦ 相手がそれにOKしたら接続完了 34
sshです echoです
Swarm @ DMM.com • 複数Transportの管理 • 複数Connectionの保持 • Peerの情報管理(Peer Store)
• ConnectionとStreamのハンドラ 35
Discovery @ DMM.com • 起動時のノード探索 ◦ bootstrapを使用 • ローカルのノード探索 ◦
mDNS(multicast DNS)を使用 • その他 ◦ Kademliaの分散ハッシュテーブルを使用 36 Application Stream Multiplex Encryption Transport
PubSub @ DMM.com • FloodSub ◦ 簡易実装 ◦ 全てのsubscriberにpublishするので帯域を圧迫する可能性 •
GossipSub ◦ メッシュ内に伝播してメッシュ外はgossipプロトコル ◦ gossipはrandomなので到達の不確実性がある(気がする 37
独自プロトコルの作成 @ DMM.com 例えば以下のような独自プロトコルを定義できる • bbq on BBQ Birch test
net on Substrate • dot on Polkadot 38
話さなかったこと - I did not speak @ DMM.com • Network
Layer • Swarmの詳細 ◦ Dial Synchronization System • 諸々のシーケンス 39
総括 - Conclusion @ DMM.com • Network Layer理解不足 • これあればアプリが作れる、アプリ間も繋げやすいぞ
• モジュールを各レイヤーでプラガブルに利用できるのは面白い • コネクション一つを使い回すのは良い ◦ streamの詰まりは起きないのだろうか? • 抽象化が過ぎる 40
参考 @ DMM.com 41 https://github.com/libp2p/specs https://github.com/libp2p/js-libp2p https://qiita.com/kikuchi_kentaro/items/1cfcb8 65b97cd2b309aa https://github.com/multiformats/multiaddr https://www.slideshare.net/iwashi86/webrtcic
e https://www.parity.io/why-libp2p/ https://github.com/libp2p/js-libp2p-floodsub https://github.com/libp2p/go-libp2p-secio/issu es/7 http://www.wata-lab.meijo-u.ac.jp/file/seminar /2006/2006-Semi2-Shoichi_Kuzuya.pdf http://tutorials.jenkov.com/p2p/peer-routing-ta ble.html
Thank you for the attention. Powered by DMM Blockchain Labs
42