Text
Page: 1
QUICをRubyの世界に持ってく
る活動をしています
unasuke
鹿児島Ruby会議02
2023-03-04
Page: 2
自己紹介
Name: うなすけ
Work: フリーランス
Ruby歴: 8年くらい
Kaigi on Rails オーガナイザー
GitHub https://github.com/unasuke
Mastodon https://mstdn.unasuke.com/@unasuke
Twitter https://twitter.com/yu_suke1994
Page: 3
今日話すこと
QUICとは何か
具体的にやっていること
今後の展望
Page: 4
QUICとは何か
image from https://github.com/quicwg/wg-materials
Page: 5
QUICとは何か
2021年にRFC 9000を含むいつくかのRFCにより標準化
TCPではなくUDPによって通信をするプロトコル
これまでのTCP(HTTP)より高速 ← ?
HTTP/3はQUICを使用する
Page: 6
「これまでのTCP(HTTP)より高速」とは?
ざっくりと……
HTTP/2はTCPを使う
TCP: "Transmission Control Protocol"
信頼性が高いがオーバーヘッドが大きい
途中のパケットが欠損すると、再送されるまで処理が止まる
HTTP/3はUDP(QUIC)を使う
UDP: "User Datagram Protocol"
オーベーヘッドがないぶん高速だが信頼性は落ちる
途中のパケットが欠損しても、影響がない範囲で処理を継続する
ref: https://eng-blog.iij.ad.jp/archives/11166
Page: 7
TCPとUDP
TCPは信頼性が高いがオーバーヘッドが大きい
HTMLとかJavaScriptとかCSSとか
欠損したら困る
UDPはオーベーヘッドがないぶん高速だが信頼性は落ちる
VoIP、RTPなどの音声、ビデオ通話とか
完全性よりリアルタイム性
しかしHTTP/3はQUICを使うし、QUICはUDP。これはどういうことか?
Page: 8
QUICがやっていること
image from https://github.com/rmarx/h3-protocol-stack
Page: 9
QUICとは何か、詳しくは……
QUICをゆっくり解説 – 新しいインターネット通信規格 | IIJ Engineers
Blog
Page: 10
今日話すこと
QUICとは何か
具体的にやっていること ←
今後の展望
Page: 11
具体的にやっていること
2022年までのぼく
「よ〜し、RFC読んでQUICの実装するぞ〜!」
Page: 12
具体的にやっていること
2022年までのぼく
「よ〜し、RFC読んでQUICの実装するぞ〜!」
大挫折
Page: 13
大挫折2022
例えば「よ〜しオレオレpuma作るぞ〜」がうまくいくのか?
「オレオレRails」でも可
→ 無理
やったことがないことをやるのは大変
Page: 14
大挫折2022
例えば「よ〜しオレオレpuma作るぞ〜」がうまくいくのか?
「オレオレRails」でも可
→ 無理
やったことがないことをやるのは大変
→ じゃあ「やったことあること」をする、のはどうだろう
Page: 15
大挫折2022
例えば「よ〜しオレオレpuma作るぞ〜」がうまくいくのか?
「オレオレRails」でも可
→ 無理
やったことがないことをやるのは大変
→ じゃあ「やったことあること」をする、のはどうだろう
→ じゃあ「QUICの実装」を「やったことある」状態にするにはどうしたら?
Page: 16
この世界にあるQUICの実装
lsquic (C言語)
quicly (C言語)
quiche (Rust)
quic-go (Go)
aioquic (Python)
Ref: https://github.com/quicwg/base-drafts/wiki/Implementations
Page: 17
この世界にあるQUICの実装
lsquic (C言語)
quicly (C言語)
quiche (Rust)
quic-go (Go)
aioquic (Python) ←
Ref: https://github.com/quicwg/base-drafts/wiki/Implementations
PythonはRubyに似てるらしい……
Page: 18
この世界にあるQUICの実装、にRubyを加える
QUICのPython実装であるaioquicをRubyに移植しよう!
Page: 19
採択
https://www.ruby.or.jp/ja/news/20220823
Page: 20
ねらい
締切
1/16 中間報告書提出締切
3/20 最終報告書提出締切
メンター
Page: 21
やっていること
ここまでが「やっている」までの経緯
Page: 22
aioquicを移植する
https://github.com/aiortc/aioquic
Page: 23
aioquicを移植する、その規模感
Page: 24
aioquicの構造
Buffer
Crypto
TLS
QUIC
Packet
PacketBuilder
Rangeset
Configuration
Retry
Crypto
Stream, Connection...
Page: 25
aioquicの構造
Buffer ← まあ……
Crypto ← やばい
TLS ← やばすぎ
QUIC
Packet ← まあ……
PacketBuilder ← まあ……
Rangeset ← easy
Configuration ← easy
Retry ← まあ……
Crypto ← やばい
Stream, Connection... ← やばすぎ
Page: 26
"やばすぎ" mean...
行数?
tls.py (1445行、テスト1163行)
connection.py (2774行、テスト2171行)
行数は真のやばさではない
Page: 27
QUICがやっていること(再)
image from https://github.com/rmarx/h3-protocol-stack
Page: 28
"やばすぎ" mean...
QUICは暗号化も受け持つ
つまり、TLSを実装する
鍵交換
認証
etc
扱うデータの中身も暗号化されている
OpenSSL「こんにちは〜」
PythonとRubyでOpenSSLのAPIの抽象度合いが異なる
Page: 29
で、どこまでできてるの?
connection.py の移植の真っ最中
Rubyishにするにはどうすればいいかの設計
Page: 30
デモ
curlから送信されたQUICのPacketを解析する
Page: 31
今日話すこと
QUICとは何か
具体的にやっていること
今後の展望 ←
Page: 32
今後の展望
QUIC自体
移植プロジェクト
Page: 33
今後の展望 - QUIC
QUICは様々な場所で使われつつある
Media over QUIC
Warp (Twitch)
WebTransport
QUIC v2が策定中
https://datatracker.ietf.org/doc/draft-ietf-quic-v2/
3月末 IETF 116 Yokohama
https://datatracker.ietf.org/wg/quic/about/
Page: 34
今後の展望 - 移植プロジェクト
aioquicの移植を終わらせる
3/20 最終報告書提出期限
"Rubyishとは何か?"
設計、API、etc...
Page: 35
今後の展望、そもそもなぜこんなことを?
Page: 36
現実問題
お客様の中にpumaでHTTPSの通信をされている方は
TLSを終端するのは誰なのか
Page: 37
現実問題
AWS CloudFront
https://aws.amazon.com/about-aws/whats-new/2022/08/
amazon-cloudfront-supports-http-3-quic/
Google Cloud Load Balancing
https://cloud.google.com/load-balancing/docs/https#QUIC
NGINX
https://www.nginx.com/blog/binary-packages-for-preview-
nginx-quic-http3-implementation/
H2O
Apache
Page: 38
現実問題への回答、RubyがQUICを喋る理由
Just for Fun
そこにRubyがないから
副産物
OpenSSL gemの修正
https://github.com/ruby/openssl/pulls?
q=is%3Apr+author%3Aunasuke (現在3つ)
OpenSSL gemのドキュメント(るりま)が古い
思案中
RDoc内の回遊を楽にしたい
https://github.com/ruby/rdoc/pull/973
Page: 39
まとめ
QUICをRubyの世界に持ってくる活動をしています
Page: 40
参考資料
https://quicwg.org
https://www.rfc-editor.org/rfc/rfc9000.html
QUIC、RFC 9000 として正式に公開 - Fastly blog
QUICをゆっくり解説 – 新しいインターネット通信規格 | IIJ
Engineers Blog
HTTP/3の解説を書いた (2020/06/01) - ASnoKaze blog
2021年 HTTPやQUICの最新動向振り返り - ASnoKaze blog
『プロフェッショナルSSL/TLS』 – 技術書出版と販売のラムダノート
徹底解剖 TLS 1.3(古城 隆 松尾 卓幸 宮崎 秀樹 須賀 葉子)|翔泳社の
本
https://quic.xargs.org
Page: 41
参考資料2
https://github.com/aiortc/aioquic
https://github.com/thekuwayama/tttls1.3
https://datatracker.ietf.org/wg/quic/about/