Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

WebRTCのICEについて知る

15,578 views

Published on

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

その他誤記指摘等は、twitterの@iwashi86まで。

Published in: Technology
  • Be the first to comment

WebRTCのICEについて知る

  1. 1. WebRTCのICEについて知る WebRTC Meetup Tokyo #8 @iwashi86 1 https://www.flickr.com/photos/aigle_dore/9997830314/in/photolist-getuCJ-rg9FSw-6uBXPM-qwVxdJ-9tAAku-qHWCTA-bxJrqC-dS3syZ-9RJHEB-9Tat6g-brUZ2W-dQiKoY-94RzU2-a3vmK9-ARR9p-9dyqtW-bqP5CT-p1QhWZ-dY6Bc-qZF5JW-pCNaK2-r8RWZ1-e5yb2Y-pPwGje-qFdRn8- bCydpc-oyvuRF-9bGQh8-azfu9R-j84fLK-bCfjjM-j4iWqn-a2tskF-9cMFBB-9vQwHT-javNQn-4mvLq4-9ebMGG-5YXb27-brB37c-qfpb6C-5RkFbC-nbXBRH-dVbBu5-jcL8uM-9et1Uh-7GM2YH-ngBXEo-hw2twQ-qwPYgR
  2. 2. 2 Yoshimasa Iwase @iwashi86
  3. 3. 3 https://www.flickr.com/photos/greenzowie/10543956045/in/photolist-h4JwMB-j3VKs2-qRZg9A-dyU1Aj-7xGMri-a3iFh-qXmB7S-rhDn4V-q3suF7-e1RHSP-68fqSC-7ruUn2-ae2UU7-6sNyov-bs1UAR-5NFbEx-6x1iU4-jqxvkh-s7ZpTn-sprJAv-4gQGMG-9cTcKt-9eYajw-9eY88L-j6KiKx- nLCY-kaLpYw-jwBa1M-jqxxiW-m87EZd-bvhe9u-9qUQtS-66EUvV-kPBhPH-9ofV2b-qXSDJd-941EoN-q4qefm-m3yYoj-s7Ze5P-jMgAvU-rvMzu3-bQDzMZ-9kgKBS-dJdSKY-9cgWri-brom8Z-sppYe2-de3BTr-jnoSt5 WebRTCのICE? (Interactive Connectivity Establishment)
  4. 4. よくある 説明 4
  5. 5. 5 http://iwashi.co/2014/05/13/trickleice/
  6. 6. 6 http://iwashi.co/2014/05/13/trickleice/
  7. 7. 7 受注 開発 納品
  8. 8. 8 受注 開発 納品 WebRTC案件
  9. 9. 9 受注 開発 納品 開発完了 -> 動作確認OK!
  10. 10. 10 受注 開発 納品 ん?つながらない?
  11. 11. 11https://www.flickr.com/photos/ro_buk/4207903199/in/photolist-7pQB2a-7oP9vq-8xbiHx-7Ajmwj-8zemoB-7ehuXP-94aHzE-93jvSN-5gCQp-nRdqb-7ESvZP-5eMSN-4izRk-gdCx68-7H5QhG-hm25eq-gdCArW-gdCvG6-99Q3YA-gdD9sZ-4iA9c-8uzbUL-7hWskX-24apZ- 6JCtXT-765WDT-7cpma4-765UzM-8wAnxv-8xtXNE-23HQ3r-79kxLp-9uu261-6JgUhP-62GZde-6HTovP-7xJsr-tXPfoF-6JkZB3-3aWJ47-6JkZtY-5fFxrT-5fKTRL-bzSKLU-RTQ8y-hGmu1-5fKTgm-5fFvFn-3D3gk9-769MNG WebRTCである よくわからないけど つながらないやつだ…
  12. 12. 12 https://www.flickr.com/photos/gumuz/7340412/in/photolist-DC3Q-6kqoV-9Lgf8x-naaGzP-pWzqNK-6kWVRg-oEZ6w8-8v7VGZ-9UEAmi-9kLv-ehYbxv-o6Ad1A-4DqFKJ-bRcWii-d1tJTm-4aHjs6-bJWNFP-97Pgho-8ZNBGe-rLYSXs- ajroY-96qUSC-4kAXcy-8QdCZt-r7MDtF-57tLjY-4Zhpz-9vjHhs-88hnSm-9fpiLc-bnc22E-Khua8-e4onL9-8QfuUe-fCyJ3-nzr4bo-7YvGrd-6pThCu-4bbmiz-cPhDnL-81rSz4-9Lj31N-81FuTC-jRVD8h-dYkr3t-8QVpAV-dhwwUe-8nJQUH- b8qzsB-bwhMsd 早く原因を調べなさい
  13. 13. 13https://www.flickr.com/photos/ro_buk/4207903199/in/photolist-7pQB2a-7oP9vq-8xbiHx-7Ajmwj-8zemoB-7ehuXP-94aHzE-93jvSN-5gCQp-nRdqb-7ESvZP-5eMSN-4izRk-gdCx68-7H5QhG-hm25eq-gdCArW-gdCvG6-99Q3YA-gdD9sZ-4iA9c-8uzbUL-7hWskX-24apZ- 6JCtXT-765WDT-7cpma4-765UzM-8wAnxv-8xtXNE-23HQ3r-79kxLp-9uu261-6JgUhP-62GZde-6HTovP-7xJsr-tXPfoF-6JkZB3-3aWJ47-6JkZtY-5fFxrT-5fKTRL-bzSKLU-RTQ8y-hGmu1-5fKTgm-5fFvFn-3D3gk9-769MNG WebRTCの通信の中身とか よくわからんし・・・
  14. 14. 14 _(:3」∠)_
  15. 15. 15 https://www.flickr.com/photos/jar0d/14758011307/in/photolist-ou7EAP-5wyd2j-ijH3Kj-9qtG1H-4yAsJE-nCwyJ6-bvcewH-7tfKKm-nsFpRX-reQpF2-pH36Cq-fmAtiU-jeLrpR-e3jcFm-dKmtwE-69VSTe-d5joAm-xWZbG-cpwuvu-ghWjGP-MPHno-fL1t9y-hAbUa2-owD33K-arqcdX-iNUwBE-ehaxYy- 8rfCd6-r5sAwo-bJHtS4-aE9vC2-662Gv6-aSDJg-aCrxxV-6PKpsp-6TM1kv-dGPHKP-4urjtC-6nQD8s-eYoDZu-kBuiEM-8cpE6r-gGyLHr-73DaN5-aHiPFi-bRje26-p8bJiq-o4JNX8-6EJK2H-7RGfyR 「NATで落ちてるだけですよ」 とか簡単に言える&対処できる
  16. 16. 16 ICE知る = 大事
  17. 17. 17 略
  18. 18. 18
  19. 19. 19 長すぎ ちなみにSIPは約270ページ
  20. 20. 20 _(:3」∠)_
  21. 21. 21 https://www.flickr.com/photos/greenzowie/10543956045/in/photolist-h4JwMB-j3VKs2-qRZg9A-dyU1Aj-7xGMri-a3iFh-qXmB7S-rhDn4V-q3suF7-e1RHSP-68fqSC-7ruUn2-ae2UU7-6sNyov-bs1UAR-5NFbEx-6x1iU4-jqxvkh-s7ZpTn-sprJAv-4gQGMG-9cTcKt-9eYajw-9eY88L-j6KiKx- nLCY-kaLpYw-jwBa1M-jqxxiW-m87EZd-bvhe9u-9qUQtS-66EUvV-kPBhPH-9ofV2b-qXSDJd-941EoN-q4qefm-m3yYoj-s7Ze5P-jMgAvU-rvMzu3-bQDzMZ-9kgKBS-dJdSKY-9cgWri-brom8Z-sppYe2-de3BTr-jnoSt5 アイスを
  22. 22. 22 https://www.flickr.com/photos/nam2_7676/4437691249/ 美味しく召し上がれるように
  23. 23. 23 平易に解説
  24. 24. 24 セッションのゴール ICEを理解して 自身の仕事等に活かす
  25. 25. 25 そもそも なぜICEが必要?
  26. 26. 26 NAT越えしたいから Internet NAT NAT Dropped…
  27. 27. 27 UPnP PCP ICE
  28. 28. 28 UPnP PCP ICE
  29. 29. 29 ICE Vanilla Trickle
  30. 30. 30 ICE Vanilla Trickle 拡 張
  31. 31. 31 ICE Vanilla Trickle 標準化されてないけど、 Chrome/Firefoxで動く 拡 張
  32. 32. 32 ICE Vanilla Trickle 標準化されてないけど、 Chrome/Firefoxで動く 拡 張
  33. 33. 1. ICE概要 2. ICE kwsk 33
  34. 34. 1. ICE概要 2. ICE kwsk 34
  35. 35. 35 収 集 (初期値) 交換 整頓穴開 終結
  36. 36. 36 収集 交換 整頓穴開 終結 通信できそうな候補(IP&Port)を ありったけ集める
  37. 37. 37 収集 交換 整頓穴開 終結 集めた候補を 相手と交換する
  38. 38. 38 収集 交換 整頓穴開 終結相手から受け取った候補と 自分の候補をペアにして 一手間加えて `uniq & sort`
  39. 39. 39 収集 交換 整頓穴開 終結ペアに対して、お互いにひたすら 接続試行(ホールパンチ)
  40. 40. 40 収 集 交換 整頓穴開 終結 ホールパンチ中で未知の候補ペアが 見つかっちゃうことも…(後述)
  41. 41. 41 収集 交換 整頓穴開 終結 接続成功した候補ペアから イケてる候補を決定
  42. 42. 42 収集 交換 整頓穴開 終結 リロードとかすると 振り出しに戻る
  43. 43. 43 収 集 交換 整頓穴開 終結
  44. 44. 1. ICE概要 2. ICE kwsk 44
  45. 45. 45 収集 交換 整頓穴開 終結
  46. 46. 46https://www.flickr.com/photos/dwinton/15491767/in/photolist-2npar-fN8mrJ-6ZSNQW-3cEJD6-baVv4K-5cvQgk-fLdzPf-c4hNUA-gn15cX-hbvc2u-i45cJV-oyhaRk-3NJ8q1-iG9ei4-6R5CsQ-dkbFo7-4ambAb-4sf4jZ-fZieCr-dpSjMb- 7kPv8B-8KQdNv-549Ffr-anZ9V5-5GDdt-an8sRH-8Dk7Hw-pi6wZh-dfk7z6-8xwVAa-p7t5bk-3cHnsS-jCAuX-3nzdyJ-6Nqpba-uQweU-og5QH4-cyGuyU-dmBq2P-7kTpqm-5eRh4E-oWSAMV-h5KBm-oP7Sx5-fZsXjr-fZt4rY-fZsXnH-7kPvaK- 8t9P2Y-o7GXcz 収集 (gathering / harvesting)
  47. 47. 47 ICE Candidate (候補) is 何?
  48. 48. 48 ICE Candidate (候補) is 何? ・IPアドレス ・プロトコル(TCP/UDP) ・ポート番号 ・コンポーネント ・タイプ(後述) ・優先度 ・ファウンデーション ・ベース 後述
  49. 49. 49 NAT STUN TURN (この構成で説明)
  50. 50. 50 NAT STUN TURN まずローカル候補GET(ソケットをbind) ex. 10.10.1.2 udp 50001 type host
  51. 51. 51 NAT STUN TURN STUNを利用してNAT外部★の候補をGET ex. 100.1.2.3 udp 50002
  52. 52. 52 NAT STUN TURN TurnにAllocation Requestする ex. 200.7.8.9 udp 60000
  53. 53. 53 ・10.10.1.2 udp 50001 ・100.1.2.3 udp 50002 ・200.7.8.9 udp 60000 今まで集めた候補
  54. 54. 54 ICEには もっと情報がある 整理しよう
  55. 55. 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候補の詳細
  56. 56. 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 の略
  57. 57. 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 なので実は・・・
  58. 58. 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で後者は使われてない
  59. 59. 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特性が類似しておりどっちかやれば十分
  60. 60. 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)
  61. 61. 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候補の詳細 後述する無駄な候補を省くために利用
  62. 62. 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候補の詳細 後述する無駄な候補を省くために利用
  63. 63. 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 全部 そろったら
  64. 64. 64 https://www.flickr.com/photos/112931986@N07/11645894595/in/photolist-iK7fJ8-iK7g1R-4VHLyS-4VDvUg-on4f7G-85vph4-4Gf3qe-eiVJYf-sxTLu-4Gjd2Q-aqEiTw-57pb1e-q2cD1t-9cce2F-3aaovf-m3JXZ4-7bTeix-rJbSsy-zFtQB-auHyEc-fp5sj-9WnTF2-e8hKvL- e8hJZG-3GL7F-CUiRW-66NVLJ-Ngx8o-SUXKY-cMaWHS-cMaWTm-cMaWF3-cMaWP9-cMaWRm-cMaWLf-5iVTqa-4W486H-atGuRo-cWA4LG-XAztd-8yxAxg-8ogyfG-9fbbF-4zzX2i-o893on-8743uP-sAMhW-5bQEmS-kLRTZb-8KtxA3 シグナリングで交換
  65. 65. 65 https://www.flickr.com/photos/112931986@N07/11645894595/in/photolist-iK7fJ8-iK7g1R-4VHLyS-4VDvUg-on4f7G-85vph4-4Gf3qe-eiVJYf-sxTLu-4Gjd2Q-aqEiTw-57pb1e-q2cD1t-9cce2F-3aaovf-m3JXZ4-7bTeix-rJbSsy-zFtQB-auHyEc-fp5sj-9WnTF2-e8hKvL- e8hJZG-3GL7F-CUiRW-66NVLJ-Ngx8o-SUXKY-cMaWHS-cMaWTm-cMaWF3-cMaWP9-cMaWRm-cMaWLf-5iVTqa-4W486H-atGuRo-cWA4LG-XAztd-8yxAxg-8ogyfG-9fbbF-4zzX2i-o893on-8743uP-sAMhW-5bQEmS-kLRTZb-8KtxA3 みんな大好きSDPでね!
  66. 66. 66 収集 交換 整頓穴開 終結
  67. 67. 67 IP Proto Port Type 10.10.1.2 udp 5000 1 host … 100.1.2.3 udp 5000 2 srlfx … 200.7.8.9 udp 6000 0 relay … IP Proto Port Type 10.10.9.9 udp 5000 1 host … 100.1.9.9 udp 5000 2 srlfx … 200.7.8.9 udp 6000 2 relay … 自分のリスト 相手からもらったリスト 2種類のリストが手元に揃う
  68. 68. 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)
  69. 69. 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 (優先度順)
  70. 70. 70 なぜ重複排除? NAT STUN STUN NAT有 NAT無
  71. 71. 71 なぜ重複排除? NAT STUN STUN NAT有 NAT無 異なる アドレス
  72. 72. 72 なぜ重複排除? NAT STUN STUN NAT有 NAT無
  73. 73. 73 なぜ重複排除? NAT STUN STUN NAT有 NAT無 同一の アドレス (=無駄)
  74. 74. 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 … … … … … 自分 相手
  75. 75. 75 http://upload.wikimedia.org/wikipedia/commons/b/b3/BattleofLongisland.jpg 開戦!
  76. 76. 76 http://upload.wikimedia.org/wikipedia/commons/b/b3/BattleofLongisland.jpg 注:ただのUDPホールパンチです
  77. 77. 77 http://upload.wikimedia.org/wikipedia/commons/b/b3/BattleofLongisland.jpg ICEはSTUNパケットでUDPホールパンチ STUN STUN
  78. 78. 78 (途中で) 未知との遭遇 NAT NAT List List
  79. 79. 79 (途中で) 未知との遭遇 Symmetric NAT Cone NAT List List 持ってるリストに記載されていない 送信元アドレスからSTUNパケットが届くことがある ⇒ Type: Peer Reflexive 候補の発見
  80. 80. 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 … … … … … 自分 相手
  81. 81. 81 収集 交換 整頓穴開 終結
  82. 82. 82 使うペアを制御側が Flag付きSTUNで教える USE-CANDIDATE付きSTUN Success Response 以降、DTLS Handshake…
  83. 83. 83 ICE Vanilla Trickle 拡 張
  84. 84. 84 収 集 (初期値) 交換 整頓穴開 終結GETした候補はすぐ送る、すぐ試す! (もしかしたら早くつながるかもしれない) 特に違うところ
  85. 85. 85 https://www.ietf.org/proceedings/86/slides/slides-86-mmusic-8.pdf
  86. 86. 86 https://www.ietf.org/proceedings/86/slides/slides-86-mmusic-8.pdf
  87. 87. 87 ということで
  88. 88. 88 ICE知る = 大事
  89. 89. 89 ICE知る = 大事 といっても、ICEにはまだまだ話せていないことがたくさんある State Machine、Triggered Check、Authentication(ufrag等)
  90. 90. 90 おしまい!

×