WebSocket 概要と課題IEICE 2012 第2回 IA 研究会 BeerTalk            吉野 剛史             Google                                 1
ウェブアプリ・サーバ間通信• 検索 – 結果の随時更新• メール – 読む – アーカイブする – 新着通知• チャット                  2
HTTP で頑張ってきた Gmail Gtalk    Ajax, Comet  XMLHttpRequest       HTTP      TCP/IP                   3
ブラウザ  サーバ• 1 イベント ≒ 1 HTTP リクエスト – プロキシや API の制約                   POST /hoge HTTP/1.1                   Host: …    ‘a’ を...
TCP なのに• 順序非保存 – リクエストにシーケンス番号• 認証 – 毎回 Cookie• In-flight リクエスト数 ≦  TCP 本数×パイプライン深度                         5
ブラウザ  サーバ• 太郎くん long poll         GET /back_channel         HTTP/1.1         …• サーバしばし沈黙 …• 花子さん発言! 太郎くんに送信         HTTP/...
TCP なのに(再び)• 上下方向それぞれ TCP コネクションを消費• 毎度 long poll                           7
今後も HTTP でねばろうか• Pipelining, Streaming 拡張, etc.• そろそろ新しい通信手段用意しませんか                                   8
TCP を直に叩ければいいか• セキュリティ問題 – ポートスキャンなど• ファイヤーウォール問題 – ポート 80 で HTTP と共存すべき• HTTP との連携 – Cookie とか                          9
WebSocket    API         Protocol@ W3C, WHATWG     @ IETF                 RFC 6455                            10
シンプルな API• 接続 ws =   new WebSocket(“ws://example.com”);• 送信 ws.send(“Hello!”);• 受信ハンドラ登録 ws.onmessage = function (e) {    ...
コンパクトなプロトコル• 低オーバーヘッド  send(“hoge”)                      hoge                       ヘッダ          ペイロード                  (O...
順序保存• send() 順にサーバへ到着• サーバの送信順に onmessage 呼び出し   Up   Up    Down     Down   Left   Right  水の音        飛込む       蛙      や   ...
ポート 80 で HTTP と共存• HTTP Upgrade が来たら GET /ws HTTP/1.1 Connection: Upgrade Upgrade: websocket HTTP/1.1 101 Switching Protoc...
認証などは確立時に• Upgrade 時に  – Cookie 送信  – クロスプロトコル攻撃対策                            URL: …     TCP connection + TLS   Host: …   ...
In-flight メッセージ   好きなときに好きなだけ   ブラウザ       サーバイベント発生イベント発生イベント発生イベント発生イベント発生イベント発生イベント発生                      16
サーバからのデータ       好きなときに好きなだけ• Long poll 無用       ブラウザ      サーバ                       17
好きにしてブラウザ   サーバ             18
多重化• 現在 1 インスタンス 1 TCP – Long-lived で idle でもずっと消費 – タブの数だけどんどん増加• 順序保存より並列性が重要なアプリも – たくさんはりたい• 1 TCP に N インスタンスを多重化 – 今、...
多重化 WebSocket があれば• Request response• 非 request response• 順序保存重視• 並列性・独立性重視                        20
対応状況•   Chrome (2009年~)•   Firefox•   Internet Explorer 10•   Opera•   Safari                           21
使いものになるの?• Chrome を使った 2009 年の実験 – WebSocket 成功数 ÷ HTTP 成功数         Port     TLS   成功率        80      No       67%        ...
L7 のみなさんへ• HTTP プロキシ• ファイヤーウォール• ロードバランサ – HTTP Upgrade に対応 – WebSocket を読んで   • バランス      – 多重化をばらす   • フィルタ、DoS ブロック• We...
L3, L4 のみなさんへ• ロードバランサ• NAT  – Load と TCP 本数があんまり関係なくなる     • Fairness metric の再考  – L4 バランサだけでは traffic が偏る可能性     • L7 ま...
WebSocket とは•   (主に)ウェブブラウザのための•   軽量で•   セキュリティや HTTP との連携を考慮した•   Built-in の•   双方向通信手法• トラフィックパターンいろいろ変わるかも            ...
Upcoming SlideShare
Loading in …5
×

Janogia20120921 yoshinotakeshi

1,255 views
1,135 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,255
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Janogia20120921 yoshinotakeshi

  1. 1. WebSocket 概要と課題IEICE 2012 第2回 IA 研究会 BeerTalk 吉野 剛史 Google 1
  2. 2. ウェブアプリ・サーバ間通信• 検索 – 結果の随時更新• メール – 読む – アーカイブする – 新着通知• チャット 2
  3. 3. HTTP で頑張ってきた Gmail Gtalk Ajax, Comet XMLHttpRequest HTTP TCP/IP 3
  4. 4. ブラウザ  サーバ• 1 イベント ≒ 1 HTTP リクエスト – プロキシや API の制約 POST /hoge HTTP/1.1 Host: … ‘a’ をタイプ Cookie: … Accept-Encoding: … … a 4
  5. 5. TCP なのに• 順序非保存 – リクエストにシーケンス番号• 認証 – 毎回 Cookie• In-flight リクエスト数 ≦ TCP 本数×パイプライン深度 5
  6. 6. ブラウザ  サーバ• 太郎くん long poll GET /back_channel HTTP/1.1 …• サーバしばし沈黙 …• 花子さん発言! 太郎くんに送信 HTTP/1.1 200 OK … <Hanako> Hello 6
  7. 7. TCP なのに(再び)• 上下方向それぞれ TCP コネクションを消費• 毎度 long poll 7
  8. 8. 今後も HTTP でねばろうか• Pipelining, Streaming 拡張, etc.• そろそろ新しい通信手段用意しませんか 8
  9. 9. TCP を直に叩ければいいか• セキュリティ問題 – ポートスキャンなど• ファイヤーウォール問題 – ポート 80 で HTTP と共存すべき• HTTP との連携 – Cookie とか 9
  10. 10. WebSocket API Protocol@ W3C, WHATWG @ IETF RFC 6455 10
  11. 11. シンプルな API• 接続 ws = new WebSocket(“ws://example.com”);• 送信 ws.send(“Hello!”);• 受信ハンドラ登録 ws.onmessage = function (e) { console.log(e.data); }; 11
  12. 12. コンパクトなプロトコル• 低オーバーヘッド send(“hoge”) hoge ヘッダ ペイロード (Opcode, 長さ など) 4バイト 上り 6バイト 下り 2バイト• TCP 1本で full duplex 12
  13. 13. 順序保存• send() 順にサーバへ到着• サーバの送信順に onmessage 呼び出し Up Up Down Down Left Right 水の音 飛込む 蛙 や 古池 TCP 13
  14. 14. ポート 80 で HTTP と共存• HTTP Upgrade が来たら GET /ws HTTP/1.1 Connection: Upgrade Upgrade: websocket HTTP/1.1 101 Switching Protocols … Connection: Upgrade Upgrade: websocket …• 以降は WebSocket サーバ クライアント 14
  15. 15. 認証などは確立時に• Upgrade 時に – Cookie 送信 – クロスプロトコル攻撃対策 URL: … TCP connection + TLS Host: … Cookie: … 15
  16. 16. In-flight メッセージ 好きなときに好きなだけ ブラウザ サーバイベント発生イベント発生イベント発生イベント発生イベント発生イベント発生イベント発生 16
  17. 17. サーバからのデータ 好きなときに好きなだけ• Long poll 無用 ブラウザ サーバ 17
  18. 18. 好きにしてブラウザ サーバ 18
  19. 19. 多重化• 現在 1 インスタンス 1 TCP – Long-lived で idle でもずっと消費 – タブの数だけどんどん増加• 順序保存より並列性が重要なアプリも – たくさんはりたい• 1 TCP に N インスタンスを多重化 – 今、拡張仕様書いてます! 19
  20. 20. 多重化 WebSocket があれば• Request response• 非 request response• 順序保存重視• 並列性・独立性重視 20
  21. 21. 対応状況• Chrome (2009年~)• Firefox• Internet Explorer 10• Opera• Safari 21
  22. 22. 使いものになるの?• Chrome を使った 2009 年の実験 – WebSocket 成功数 ÷ HTTP 成功数 Port TLS 成功率 80 No 67% 61985 No 86% 443 Yes 95% 22
  23. 23. L7 のみなさんへ• HTTP プロキシ• ファイヤーウォール• ロードバランサ – HTTP Upgrade に対応 – WebSocket を読んで • バランス – 多重化をばらす • フィルタ、DoS ブロック• Web サーバ – ぜひ実装を 23
  24. 24. L3, L4 のみなさんへ• ロードバランサ• NAT – Load と TCP 本数があんまり関係なくなる • Fairness metric の再考 – L4 バランサだけでは traffic が偏る可能性 • L7 まで見る • Timeout の再考(Thanks to v6pc) 24
  25. 25. WebSocket とは• (主に)ウェブブラウザのための• 軽量で• セキュリティや HTTP との連携を考慮した• Built-in の• 双方向通信手法• トラフィックパターンいろいろ変わるかも 25

×