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/