Open3

libp2p-webrtc-調査

fogfog

目的

ゲーム開発に適用可能かlibp2pを調査する.
本Scrapでは,WebRTCに焦点を置く.

libp2pにおけるWebRTC

  • WebRTC

  • WebRTC Direct

    • TLS証明書なしで接続可能
  • HOL Blocking

    • 先頭データが何かしらの形で処理されない場合,後続データも処理されなくなる
    • TCPやメッセージ指向のシステムで問題になりうる
    • WebRTCのDataChannelは、特に信頼性モードかつ順序保証モードの場合、メッセージ指向であるため,HOL Blockingが起きやすい.
      メッセージサイズを慎重に設計する必要がある.
    • SCTP
      • NATにおいて知らないパケットは破棄される可能性が高いが、UDPの上に順番制御を順番に設定できるようにしている
    • libp2pはbyte指向なので影響を軽減できる
  • デフォルトの設定

    • WebRTCでNegotiationされる
    • 順序ありのDataChannel
  • TURNサーバーは不要

    • Cirtuit Relay v2を使用し,中央サーバーに依存しないP2P Networkを構築できる

参考

https://github.com/libp2p/specs/blob/master/webrtc/README.md

https://github.com/libp2p/go-libp2p/pull/2337

fogfog

WebRTCの特徴

  • DTLSの上にSCTPが構築され,その上にDataChannelが実装されている
  • SCTPには本来,Heartbeat Chunkという機能があり,生存確認を行う.これにより通信の切断の検知が行える.
  • しかし,DataChannel上のSCTPでは,この機能は利用されていない.よって切断を検知するまでに数分以上かかる場合がある.
fogfog

AutoNat

  • アドレスごとの到達可能かどうかの確認
  • 到達可能かどうかの検証機能
  • 増幅攻撃 (Amplification Attack) 対策
    • 増幅攻撃とは,DDos攻撃の一種.
    • 大量のトラフィックを発生させる