Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WebRTCのICEについて知る / WebRTC ICE Internals

iwashi
November 27, 2022

WebRTCのICEについて知る / WebRTC ICE Internals

WebRTCのICEについて、WebRTC Meetup Tokyo #8 で講演したスライドです。
口頭説明含めて確認したい方は、以下からご覧になれます。
https://youtu.be/6v4rvLiUCvM?t=47m17s

iwashi

November 27, 2022
Tweet

More Decks by iwashi

Other Decks in Technology

Transcript

  1. 18

  2. 48 ICE Candidate (候補) is 何? ・IPアドレス ・プロトコル(TCP/UDP) ・ポート番号 ・コンポーネント

    ・タイプ(後述) ・優先度 ・ファウンデーション ・ベース 後述
  3. 55 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 100.1.2.3 udp 50002 200.7.8.9 udp 60000 ICE候補の詳細
  4. 56 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 host 100.1.2.3 udp 50002 srlfx 200.7.8.9 udp 60000 relay ICE候補の詳細 host = ローカルの候補 srlfx = STUNを使って入手した候補 relay = TURNを使って入手した候補 srlfx = Server Reflexive の略
  5. 57 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 host 1 100.1.2.3 udp 50002 srlfx 1 200.7.8.9 udp 60000 relay 1 ICE候補の詳細 ICE(RFC5245)的にいえば RTP = 1、RTCP = 2 なので実は・・・
  6. 58 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 host 1 100.1.2.3 udp 50002 srlfx 1 200.7.8.9 udp 60000 relay 1 10.10.1.2 udp 50003 host 2 100.1.2.3 udp 50004 srlfx 2 200.7.8.9 udp 60001 relay 2 ICE候補の詳細 2倍ある。 だが、SRTPとSRTCPはMUXするので たぶんWebRTCで後者は使われてない
  7. 59 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 host 1 0※ 100.1.2.3 udp 50002 srlfx 1 4 200.7.8.9 udp 60000 relay 1 8 10.10.1.2 udp 50003 host 2 0※ 100.1.2.3 udp 50004 srlfx 2 4 200.7.8.9 udp 60001 relay 2 8 ICE候補の詳細 Foundationはホールパンチを効率化するために利用 「※」はNW特性が類似しておりどっちかやれば十分
  8. 60 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 host 1 0※ 126|32542|255 100.1.2.3 udp 50002 srlfx 1 4 100|31518|255 200.7.8.9 udp 60000 relay 1 8 2|31518|255 10.10.1.2 udp 50003 host 2 0※ 126|32542|254 100.1.2.3 udp 50004 srlfx 2 4 100|31518|254 200.7.8.9 udp 60001 relay 2 8 2|31518|254 ICE候補の詳細 どの候補を一番優先して使うのか 決めるための値 (2^24)*(type preference) + (2^8)*(local preference) + (2^0)*(256 - component ID)
  9. 61 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 host 1 0※ 126|32542|255 10.10.1.2:20001 100.1.2.3 udp 50002 srlfx 1 4 100|31518|255 10.10.1.2:20002 200.7.8.9 udp 60000 relay 1 8 2|31518|255 200.7.8.9:60000 10.10.1.2 udp 50003 host 2 0※ 126|32542|254 10.10.1.2:20003 100.1.2.3 udp 50004 srlfx 2 4 100|31518|254 10.10.1.2:20004 200.7.8.9 udp 60001 relay 2 8 2|31518|254 200.7.8.9:60001 ICE候補の詳細 後述する無駄な候補を省くために利用
  10. 62 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 host 1 0※ 126|32542|255 10.10.1.2:20001 100.1.2.3 udp 50002 srlfx 1 4 100|31518|255 10.10.1.2:20002 200.7.8.9 udp 60000 relay 1 8 2|31518|255 200.7.8.9:60000 10.10.1.2 udp 50003 host 2 0※ 126|32542|254 10.10.1.2:20003 100.1.2.3 udp 50004 srlfx 2 4 100|31518|254 10.10.1.2:20004 200.7.8.9 udp 60001 relay 2 8 2|31518|254 200.7.8.9:60001 ICE候補の詳細 後述する無駄な候補を省くために利用
  11. 63 IP Proto Port Type Component Foundation priority base 10.10.1.2

    udp 50001 host 1 0※ 126|32542|255 10.10.1.2:20001 100.1.2.3 udp 50002 srlfx 1 4 100|31518|255 10.10.1.2:20002 200.7.8.9 udp 60000 relay 1 8 2|31518|255 200.7.8.9:60000 10.10.1.2 udp 50003 host 2 0※ 126|32542|254 10.10.1.2:20003 100.1.2.3 udp 50004 srlfx 2 4 100|31518|254 10.10.1.2:20004 200.7.8.9 udp 60001 relay 2 8 2|31518|254 200.7.8.9:60001  全部 そろったら
  12. 67 IP Proto Port Type 10.10.1.2 udp 50001 host …

    100.1.2.3 udp 50002 srlfx … 200.7.8.9 udp 60000 relay … IP Proto Port Type 10.10.9.9 udp 50001 host … 100.1.9.9 udp 50002 srlfx … 200.7.8.9 udp 60002 relay … 自分のリスト 相手からもらったリスト 2種類のリストが手元に揃う
  13. 68 IP Proto Port Type 10.10.1.2 udp 50001 host …

    100.1.2.3 udp 50002 srlfx … 200.7.8.9 udp 60000 relay … IP Proto Port Type 10.10.9.9 udp 50001 host … 100.1.9.9 udp 50002 srlfx … 200.7.8.9 udp 60002 relay … 自分のリスト 相手からもらったリスト 組み合わせる(Paring up)
  14. 69 Local IP Remote IP 10.10.1.2 … 10.10.9.9 … 100.1.2.3

    … 10.10.9.9 … 200.7.8.9 … 10.10.9.9 … 10.10.1.2 … 100.1.9.9 … … … … … 作成したリストに対して uniq & sort (優先度順)
  15. 74 Local IP Remote IP 10.10.1.2 … 10.10.9.9 … 100.1.2.3

    … 10.10.9.9 … 200.7.8.9 … 10.10.9.9 … 10.10.1.2 … 100.1.9.9 … … … … … お互いにチェックリストを 持ったらついに… Local IP Remote IP 10.10.1.2 … 10.10.9.9 … 100.1.2.3 … 10.10.9.9 … 200.7.8.9 … 10.10.9.9 … 10.10.1.2 … 100.1.9.9 … … … … … 自分 相手
  16. 79 (途中で) 未知との遭遇 Symmetric NAT Cone NAT List List 持ってるリストに記載されていない

    送信元アドレスからSTUNパケットが届くことがある ⇒ Type: Peer Reflexive 候補の発見
  17. 80 Local IP Remote IP 10.10.1.2 … 10.10.9.9 … 100.1.2.3

    … 10.10.9.9 … 200.7.8.9 … 10.10.9.9 … 10.10.1.2 … 100.1.9.9 … … … … … 終わると、成功・失敗がわかる Local IP Remote IP 10.10.1.2 … 10.10.9.9 … 100.1.2.3 … 10.10.9.9 … 200.7.8.9 … 10.10.9.9 … 10.10.1.2 … 100.1.9.9 … … … … … 自分 相手
  18. 84 収集 (初期値) 交換 整頓 穴開 終結 再 開 GETした候補はすぐ送る、すぐ試す!

    (もしかしたら早くつながるかもしれない) 特に違うところ