Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
QUICについて調べた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
43
Other Decks in Technology
See All in Technology
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
150
全社共通データ基盤をつくる。ソニーのDatabricks活用とデータガバナンス設計の裏側
sony
0
290
「とりあえず動く」の先へ。 AI時代のチーム開発と内部設計/2026-slsdays
slsops
0
100
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
290
形式手法を使って仕様をコーディングしよう
mikanichinose
0
160
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
180
2026-09-26 Platform Engineering Kaigi 2026 インフラとアプリの境界線と委譲の設計 / Drawing the Infra and App Line
masasuzu
0
550
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
110
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
230
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
1
160
高負荷プロダクション環境におけるAWS Lambdaのリアル 〜スケールとコストを左右する実行ライフサイクルの技術仕様〜
maimyyym
2
850
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
15k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The SEO Collaboration Effect
kristinabergwall1
1
580
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Technical Leadership for Architectural Decision Making
baasie
3
590
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Exploring anti-patterns in Rails
aemeredith
4
520
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
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