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

QUICについて調べた

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for cateiru cateiru
January 17, 2022

 QUICについて調べた

Avatar for cateiru

cateiru

January 17, 2022
Tweet

More Decks by cateiru

Other Decks in Technology

Transcript

  1. QUIC HTTP/3になるとなにがいいのか • HTTP/2に比べて通信が速くなる(理論上) ◦ UDP上に位置するため3wayハンドシェイク(SYNやACKの通信のやつ)が無い ◦ ヘッドオブラインブロッキングが解決されている ▪ TCPの通信では鎖のようになっていいて、

    1つのつなぎ目が欠落(パケットロス)するとそれ以 降のすべての繋がりが待つ必要 ▪ 実際、パケットロスがある環境では HTTP/1のほうがパフォーマンスがいいらしい • WebTransport APIが使える ◦ WebsocketとWebRTCを合わせてQUICプロトコルを使用した API ◦ 高速 ◦ 最近Chrome(97)に追加された
  2. QUICの通信をみる client server Initial • QUICのハンドシェイクはTLS1.3のハンドシェイクの流れと一緒 ◦ (ただしUDPを使う) • Initialパケット

    ◦ ClientHelloが入ったCRYPTOフレームをInitialパケットに格納し てサーバに送る ◦ TCPのSYNのイメージ
  3. QUICの通信をみる client server Initial Initailパケットのペイロードは、 イニシャル用の鍵で暗号化 されます。イニ シャル用の鍵は、サーバのコネクション IDから生成します。この最初の サーバのコネクション

    IDは、クライアントが乱数的に生成します。 中継装置から見ると、サーバのコネクション IDがInitialヘッダ中にあるの で、そこからイニシャル用の鍵を生成でき、さらにペイロードを復号できま す。このため、Initialパケットには「一手間かけないと覗けない」程度の安 全性しかありません 。 引用元: https://eng-blog.iij.ad.jp/archives/10582
  4. QUICの通信をみる client server Initial Retry Initial Protected Payload Initailパケットを受け取ったサーバは、ヘッダ中のコネクション IDからイニ

    シャル用の鍵を生成し、ペイロードを復号します。 ClientHelloが取り出せ るので、ServerHelloを作成し、イニシャル用の鍵で暗号化して、 Initialパ ケットを送り返します 。ややこしいのですが、このとき必要であれば、サー バは自分自身のコネクション IDを作り直します。 引用元: https://eng-blog.iij.ad.jp/archives/10582
  5. QUICの通信をみる client server Initial Retry Initial Protected Payload Handshake またサーバは、ClientHelloの中にあるクライアントの

    DH公開鍵と、生成し たサーバのDH秘密鍵からハンドシェイク鍵を生成します。そして、 EncryptedExtensionsなどをハンドシェイク鍵で暗号化し、 Handshake パケットのペイロードに格納して送信 します。 引用元: https://eng-blog.iij.ad.jp/archives/10582
  6. QUICの通信をみる client server Handshake Protected Payload Protected Payload Protected Payload

    • あとは多分データ送信 • TLS暗号化されているので生データは見れなかった
  7. QUICまとめ • TCPよりハンドシェイクは少なかった • デフォルトでTLS暗号化されているのは安心できそう • もっと詳しく知りたい人向け ◦ IIJ Engineers

    Blog ▪ https://eng-blog.iij.ad.jp/archives/author/kazu/page/2 ◦ QUIC: A UDP-Based Multiplexed and Secure Transport (RFC9000) ▪ https://datatracker.ietf.org/doc/rfc9000/ ◦ Chrome への HTTP/3 と IETF QUIC の導入について ▪ https://developers-jp.googleblog.com/2020/10/chrome-http3-ietf-quic.html
  8. 参考文献 • https://www.nginx.co.jp/blog/introducing-technology-preview-nginx-support-for -quic-http-3/ • https://xtech.nikkei.com/atcl/learning/lecture/19/00038/00004/ • https://http3-explained.haxx.se/ja/proc/proc-status • https://directcloud.jp/contents/webhttp-3quic/

    • https://wa3.i-3-i.info/word15428.html • https://http3-explained.haxx.se/ja/why-quic/why-tcphol • https://eng-blog.iij.ad.jp/archives/10582 • https://tex2e.github.io/blog/protocol/quic-retry-packet