Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
QUICについて調べた
Search
cateiru
January 17, 2022
Technology
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
QUICについて調べた
cateiru
January 17, 2022
More Decks by cateiru
See All by cateiru
社内の開発便利ツールを作った話 / サブカル業界Developers 勉強会Vol.6
cateiru
0
590
RepoSync
cateiru
0
42
Other Decks in Technology
See All in Technology
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
260
JAWS-UG初心者支部#88わいわい初心塾(夏休みの宿題やったかGit編)
otsuki
0
130
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
6
7.1k
enechainの内製セルフサービスプラットフォーム
hiyosi
0
110
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
180
Backstageでつくるセルフサービスな社内開発基盤
kikunosuke75
1
290
KAEN Company Deck
kaen
PRO
0
320
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
280
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
1
570
Tab5をRubyで動くパソコンにする
kishima
1
180
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
230
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
230
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.5k
Unsuck your backbone
ammeep
672
58k
Ruling the World: When Life Gets Gamed
codingconduct
0
320
Designing for humans not robots
tammielis
254
26k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Bash Introduction
62gerente
615
220k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
810
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
RailsConf 2023
tenderlove
30
1.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Transcript
QUIC A UDP-Based Multiplexed and Secure Transport protocol
QUIC is 何? • トランスポート層の通信プロトコル • Googleが開発 • TCPの「トリップタイム」問題を解決したもの •
UDP上に位置し、TLS1.3を内蔵
QUICが使用される通信 • HTTP/3 ◦ HTTP/2の次 ◦ Googleの通信ではよく使われている ◦ Apacheはまだ非対応。Nginxは2020年10月にプレスリリースが出ている
QUIC HTTP/3になるとなにがいいのか • HTTP/2に比べて通信が速くなる(理論上) ◦ UDP上に位置するため3wayハンドシェイク(SYNやACKの通信のやつ)が無い ◦ ヘッドオブラインブロッキングが解決されている ▪ TCPの通信では鎖のようになっていいて、
1つのつなぎ目が欠落(パケットロス)するとそれ以 降のすべての繋がりが待つ必要 ▪ 実際、パケットロスがある環境では HTTP/1のほうがパフォーマンスがいいらしい • WebTransport APIが使える ◦ WebsocketとWebRTCを合わせてQUICプロトコルを使用した API ◦ 高速 ◦ 最近Chrome(97)に追加された
QUICの通信をみる • Wiresharkで確認したい • QUICはTLSが含まれているため通信データの内容は見れなさそう • とりあえずダメ元で試してみる
QUICの通信をみる • サーバをGoで書く ◦ https://github.com/lucas-clemente/quic-go を使用する • ありがたいことにexampleがあったので使わせてもらう ◦ https://github.com/lucas-clemente/quic-go/tree/master/example/echo
• Client-Serverごとにファイルを分け、それぞれMacOS、Ubuntuで通信を行う ◦ MacOS: Monterey ▪ 192.168.3.7 ◦ Ubuntu: 20.04 ▪ 192.168.3.253
QUICの通信をみる • PC間で通信できるようにアドレスを書き換える ◦ (clientのIPアドレスは192.168.3.253にする) サーバのIPアドレス
QUICの通信をみる • server側のキャプチャ
QUICの通信をみる • client側のキャプチャ
QUICの通信をみる client server Initial • QUICのハンドシェイクはTLS1.3のハンドシェイクの流れと一緒 ◦ (ただしUDPを使う) • Initialパケット
◦ ClientHelloが入ったCRYPTOフレームをInitialパケットに格納し てサーバに送る ◦ TCPのSYNのイメージ
QUICの通信をみる client server Initial Initailパケットのペイロードは、 イニシャル用の鍵で暗号化 されます。イニ シャル用の鍵は、サーバのコネクション IDから生成します。この最初の サーバのコネクション
IDは、クライアントが乱数的に生成します。 中継装置から見ると、サーバのコネクション IDがInitialヘッダ中にあるの で、そこからイニシャル用の鍵を生成でき、さらにペイロードを復号できま す。このため、Initialパケットには「一手間かけないと覗けない」程度の安 全性しかありません 。 引用元: https://eng-blog.iij.ad.jp/archives/10582
QUICの通信をみる client server Initial Retry 一番最初のハンドシェイクなので クライアントが生成した接続先コネ クションIDを使いたくないときや、通信元アドレスが本物かどうかを 確認したいときは、サーバは Retry
Packet をクライアントに送り返 します。 引用元: https://tex2e.github.io/blog/protocol/quic-retry-packet
QUICの通信をみる client server Initial Retry Initial Protected Payload • Initialを送ってprotected
payloadが返る • protected payloadはserver hello
QUICの通信をみる client server Initial Retry Initial Protected Payload Initailパケットを受け取ったサーバは、ヘッダ中のコネクション IDからイニ
シャル用の鍵を生成し、ペイロードを復号します。 ClientHelloが取り出せ るので、ServerHelloを作成し、イニシャル用の鍵で暗号化して、 Initialパ ケットを送り返します 。ややこしいのですが、このとき必要であれば、サー バは自分自身のコネクション IDを作り直します。 引用元: https://eng-blog.iij.ad.jp/archives/10582
QUICの通信をみる client server Initial Retry Initial Protected Payload Handshake またサーバは、ClientHelloの中にあるクライアントの
DH公開鍵と、生成し たサーバのDH秘密鍵からハンドシェイク鍵を生成します。そして、 EncryptedExtensionsなどをハンドシェイク鍵で暗号化し、 Handshake パケットのペイロードに格納して送信 します。 引用元: https://eng-blog.iij.ad.jp/archives/10582
QUICの通信をみる client server Initial Retry Initial Protected Payload Handshake Protected
QUICの通信をみる client server Handshake Protected Payload Protected Payload Protected Payload
• あとは多分データ送信 • TLS暗号化されているので生データは見れなかった
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
使ったソースコード cateiru/quic-example https://github.com/cateiru/quic-example
参考文献 • 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