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

WebRTCアプリケーションのテストの課題・解決方法について / Problems and S...

iwashi
November 27, 2022

WebRTCアプリケーションのテストの課題・解決方法について / Problems and Solutions for WebRTC Testing

WebRTC Conference Japanの講演資料です。

iwashi

November 27, 2022
Tweet

More Decks by iwashi

Other Decks in Technology

Transcript

  1. ケース2: 多様な通信条件 ラップトップ x Wifi スマフォ x LTE テザリング x

    タブレット インターネット WebRTCのクライアントの種類・NW条件は本当に多様であり、ある環境ではUX低下という事象もありえます。

  2. 続:なぜ難しいのか? 1. 世の中にあるノウハウが少ない
 • スタートアップ:リソース不足でテストも不足
 • 大きめの企業:新機能の実装に多忙
 • テストするにしても手動で頑張る
 


    2. Web/VoIP系の
 テストノウハウを転用しにくい
 
 3. テスト条件が非常に複雑
 WebRTCの開発者は、もともとVoIP系をやっていた、Webエンジニアであったという人がいます。

  3. テスト条件の複雑さ • クライアント種別
 
 • OS 
 • ネットワーク
 


    • チャネルタイプ
 総項目数は
 乗算で算出…
 まともにテストすると処理しきれない項目数になります。テスト技法を利用しても、それなりの数になります。

  4. 再掲:なぜ難しいのか? 1. 世の中にあるノウハウが少ない
 • スタートアップ:リソース不足でテストも不足
 • 大きめの企業:新機能の実装に多忙
 • テストするにしても手動で頑張る
 


    2. Web/VoIP系の
 テストノウハウを転用しにくい
 
 3. テスト条件が非常に複雑
 ここまで、テストの難しさについて説明してきましたが、難しくてもテストできないわけではなありません。

  5. ▪ 前提
 • AさんとBさんの2名で1:1のビデオチャット
 
 ▪ 構成
 Webサーバ Aさん Bさん

    シグナリングサーバ
 ビデオチャット WebRTCのつながる仕組み
  6. ▪ ICEは以下の順で動作
 1. STUNとTURNを利用し、
 通信可能なアドレス候補(ICE候補)を収集
 
 2. 収集したICE候補群を優先度順でソート
 
 3.

    SDPにICE候補群を設定して、通信相手と共有
 
 4. ICE候補群を利用して実際に接続試行
 “アドレス取得 -> 接続試行”にはICEを利用

  7. 成功可否はNATの特性に依存する
 • マッピング
 1. Endpoint independent 2. Address Dependent 3.

    Address and Port Dependent 
 • フィルタリング
 1. Endpoint independent 2. Address Dependent 3. Address and Port Dependent

  8. まずはマッピング
 • マッピング
 1. Endpoint independent 2. Address Dependent 3.

    Address and Port Dependent 
 • フィルタリング
 1. Endpoint independent 2. Address Dependent 3. Address and Port Dependent

  9. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:1.1.1.1:12345 先:1.1.1.200:80 元:192.168.1.2:10000 先:1.1.1.100:80

    元:192.168.1.2:10000 先:1.1.1.200:80 Endpoint Independent Mapping 192.168.1.1 1.1.1.1 通信相手のIPが異なっても、送信元アドレスは同一

  10. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Address Dependent

    Mapping 192.168.1.1 1.1.1.1 通信相手のIPが異なると・・・
 1.1.1.1 ? 元:192.168.1.2:10000 先:1.1.1.200:80
  11. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:1.1.1.1:54321 先:1.1.1.200:80 元:192.168.1.2:10000 先:1.1.1.100:80

    元:192.168.1.2:10000 先:1.1.1.200:80 Address Dependent Mapping 192.168.1.1 1.1.1.1 通信相手のIPが異なると、送信元アドレスは異なる

  12. NAT 1.1.1.100 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:8888 Address

    Dependent Mapping 192.168.1.1 1.1.1.1 では、通信相手のIPが同じでポートが異なる場合は…
 ?
  13. NAT 1.1.1.100 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:1.1.1.1:12345 先:1.1.1.100:8888 元:192.168.1.2:10000 先:1.1.1.100:80 元:192.168.1.2:10000

    先:1.1.1.100:8888 Address Dependent Mapping 192.168.1.1 1.1.1.1 NAT変換後の送信元アドレスは同一

  14. NAT 1.1.1.100 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:8888 Address

    and Port Dependent Mapping 192.168.1.1 1.1.1.1 元:1.1.1.1:54321 先:1.1.1.100:8888 NAT変換後の送信元アドレスは異なる

  15. 63 続いてフィルタリング
 • マッピング
 1. Endpoint independent 2. Address Dependent

    3. Address and Port Dependent 
 • フィルタリング
 1. Endpoint independent 2. Address Dependent 3. Address and Port Dependent

  16. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Endpoint Independent

    Filtering 192.168.1.1 1.1.1.1 元:1.1.1.200:80 先:1.1.1.1:12345 異なるIPから届いたら?
 ?
  17. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Endpoint Independent

    Filtering 192.168.1.1 1.1.1.1 元:1.1.1.200:80 先:1.1.1.1:12345 そのまま通す!

  18. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Address Dependent

    Filtering 192.168.1.1 1.1.1.1 元:1.1.1.200:80 先:1.1.1.1:12345 2種類目のフィルタリング動作だと?
 ?
  19. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Address Dependent

    Filtering 192.168.1.1 1.1.1.1 元:1.1.1.200:80 先:1.1.1.1:12345 通さない!(IPアドレスに依存するので)

  20. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Address Dependent

    Filtering 192.168.1.1 1.1.1.1 元:1.1.1.100:8888 先:1.1.1.1:12345 同じ送信先IPでも、異なるポートから返ってきたら?
 ?
  21. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Address Dependent

    Filtering 192.168.1.1 1.1.1.1 元:1.1.1.100:8888 先:1.1.1.1:12345 通す!(IPアドレスが同じなので)

  22. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Address and

    Port Dependent Filtering 192.168.1.1 1.1.1.1 元:1.1.1.100:8888 先:1.1.1.1:12345 3種類目のNATの場合は?
 ?
  23. NAT 1.1.1.100 1.1.1.200 192.168.1.2 元:1.1.1.1:12345 先:1.1.1.100:80 元:192.168.1.2:10000 先:1.1.1.100:80 Address and

    Port Dependent Filtering 192.168.1.1 1.1.1.1 元:1.1.1.100:8888 先:1.1.1.1:12345 通さない!(IPとポートの両方が同じでないため)

  24. 再掲:NATの振舞い
 • マッピング
 1. Endpoint independent 2. Address Dependent 3.

    Address and Port Dependent 
 • フィルタリング
 1. Endpoint independent 2. Address Dependent 3. Address and Port Dependent

  25. 参考: RFC3489(obsolete)でのNAT分類
 マッピング フィルタリング RFC3489 Endpoint Independent Endpoint Independent フルコーン

    Endpoint Independent Address Dependent 制限付きコーン Endpoint Independent Address and Port Dependent ポート制限付きコーン Address Dependent Endpoint Independent - Address Dependent Address Dependent - Address Dependent Address and Port Dependent - Address and Port Dependent Endpoint Independent - Address and Port Dependent Address Dependent - Address and Port Dependent Address and Port Dependent シンメトリック
  26. • 複数のブラウザタイプでテストできるようにした – Chrome stable 対 Chrome stable – Chrome

    beta 対 Firefox Stable – などなど • 複数のNATタイプでテストできるようにした – EIMxEIF 対 APDMxAPDF – などなど(詳細後述) • (ある程度手軽に)環境構築からテスト実施まで自動化できる ようにした やったこと
  27. Intranet1 Intranet2 Virtual Internet アーキテクチャ概要 Virtual private cloud Private Subnet

    TURN server Signaling server WebApp server 特製 NAT 特製 NAT Ubuntu14.04 (with Chrome, Firefox, Selenium) Ubuntu14.04 (with Chrome, Firefox, Selenium) Ubuntu Ubuntu
  28. ・ブラウザ種別 ・ Chrome Stable, Chrome Beta, Chrome Unstable ・ Firefox

    Stable (, Firefox Unstable) ・NATタイプ ・RFC4787上の定義では9種類 ・iptablesでは設定不可なタイプもあるので 新しく作った ・4 * 4 * 9 * 9 = 1296 多い…時間かかる … Browser x Browser x NAT type x NAT type
  29. Intranet1 Intranet2 Virtual Internet アーキテクチャ概要 (再掲) Virtual private cloud Private

    Subnet TURN server Signaling server WebApp server 特製 NAT 特製 NAT Ubuntu14.04 (with Chrome, Firefox, Selenium) Ubuntu14.04 (with Chrome, Firefox, Selenium) Ubuntu Ubuntu
  30. Intranet2 Virtual Internet アーキテクチャ概要 (フルフルセットアップ版) Private Subnet TURN server Signaling

    server WebApp server 特製 NAT type 1 Ubuntu14.04 16台 特製 NAT type2 . . . Ubuntu14.04 16台 . . . 特製 NAT type9 . . . . . . . . . Intranet1 特製 NAT type 1 特製 NAT type2 特製 NAT type9 . . . . . . . . .
  31. ・デスクトップなしの環境でブラウザをSeleniumで動かしたい ・ Xvfb ・ ブラウザオプション ・ 仮想のカメラやマイク ・ use-fake-device-for-media-stream (chrome)

    ・ media.navigator.streams.fake (firefox) ・ ダイアログなど出ないように ・ use-fake-ui-for-media-stream (chrome) ・ media.navigator.permission.disabled (firefox) 実装上の工夫点1
  32. ・ seleniumのwebdriverの実装なのか、firefoxは素のままだと console.logが取れない… ・ FireBug + ConsoleExport を追加してそれ経由で取得 ・ firefoxの新し目のバージョンだと署名されていない

    プラグインが動かない(ブラウザオプションなども効かない) ・ 開発用のバージョンもそのうち出るらしいが、まだ未確認 実装上の工夫点3