Rabbit Slide Show

kagoshima-rubykaigi02

2023-03-04

Description

https://k-ruby.com/kagoshima-rubykaigi02/

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/

Other slides

CNDF2023 CNDF2023
2023-08-03
ruby30th-lt ruby30th-lt
2023-02-25