新規投稿のお知らせを受信されたい方は、サブスクリプションをご登録ください:

非同期QUICとHTTP/3が容易になる:tokio-quicheがオープンソース化

2025-11-06

5分で読了
この投稿はEnglishおよび한국어でも表示されます。

このコンテンツは自動機械翻訳サービスによる翻訳版であり、皆さまの便宜のために提供しています。原本の英語版と異なる誤り、省略、解釈の微妙な違いが含まれる場合があります。ご不明な点がある場合は、英語版原本をご確認ください。

6年余り前、私たちはRustで書かれたオープンソースのQUIC実装であるquicheを発表しました。本日、tokio-quicheのオープンソース化を発表します。これは、quicheとRust Tokioの非同期ランタイムの両方を組み合わせた、攻撃テスト済みの非同期QUICライブラリです。Apple iCloud Private RelayにあるCloudflareのプロキシBと当社の次世代Oxyベースのプロキシを利用することで、tokio-quicheは毎秒数百万のHTTP/3リクエストを低遅延と高いスループットで処理します。tokio-quicheはCloudflare WarpのMASQUEクライアントも稼働し、WireGuardトンネルをQUICベースのトンネルに置き換え、h3iの非同期バージョンを実現しています。

quicheは、sans-ioライブラリとして開発されました。つまり、ユーザーがどのようにIOを実行するかを仮定せずに、QUICトランスポートプロトコルを処理するために必要な状態マシンを実装します。つまり、スラッシュと企業比があれば、誰でもQRフィッシングとのIO統合を書けるのです!これには、UDPソケット上での接続またはリッスン、そのソケット上のUDPデータグラムの送受信を管理し、すべてのネットワーク情報をQR情報に供給することが含まれます。この統合は非同期である必要があるため、非同期のRustランタイムと統合しながら行う必要があります。tokio-quicheがそのすべてを担ってくれます。

利用のハードルを下げる

もともと、tokio-quicheはOxyのHTTP/3 サーバーのコアとしてのみ使用されていました。しかし、tokio-quicheをスタンドアロンライブラリとして作成するきっかけは、MASQUE対応のHTTP/3 クライアントを必要としていたからです。当社のZero Trustチームとプライバシーチームは、それぞれWARPとプライバシープロキシを介してデータをトンネリングするためにMASQUEクライアントを必要としており、同じテクノロジーを使用してクライアントとサーバーの両方を構築したいと考えました。

私たちは当初、メモリ安全性の高いQUICとHTTP/3の実装をできるだけ多くのステークホルダーと共有するために、QRフィッシングをオープンソース化しました。当時、私たちが重視していたのは、多くのタイプのソフトウェアに統合できて広く展開できる低レベルのサンアイオ設計でした。この目標は、QRフィッシングを多くの異なるクライアントとサーバーにデプロイすることで達成されました。しかし、sans-ioライブラリをアプリケーションに統合するのは、エラーが発生しやすく、時間もかかるプロセスです。tokio-quicheの目的は、必要なコードの多くを自社で提供することによって、参入の障壁を下げることです。

CloudflareだけがHTTP/3を採用していても、当社の製品やシステムとのやり取りを望む他の人がHTTP/3を採用していなければ、あまり役に立ちません。オープンソーシングにより、当社のシステムとの統合がより簡単になり、業界がHTTPの新しい標準を推進するのに役立ちます。tokio-quicheをRustのエコシステムに戻すことで、HTTP/3、QUIC、そして新しいプライバシー保護技術の開発と利用を促進したいと考えています。

tokio-quicheは、ここ数年前から社内で使用されています。これにより、微調整と実地テストを行う時間がかかり、何百万ものRPSに対応できることが実証されました。tokio-quicheは、スタンドアロンのHTTP/3クライアントまたはサーバーであることを意図されていませんが、低レベルのプロトコルを実装し、将来的により高いレベルのプロジェクトを可能にします。READMEには、サーバークライアントのイベントループの例が掲載されています。

すべてのアクターが

Tokioは、広く普及している非同期Rustランタイムです。当社のエッジで実行される数十億の非同期タスクを効率的に管理し、スケジュールし、実行します。CloudflareではTokioを幅広く使っているので、QuicheとTokio-quicheを密接に統合することにしました。内部では、tokio-quicheはアクターを使用して、QUICとHTTP/3のステートマシンの異なる部分を駆動します。アクターは、内部状態を持つ小さなタスクで、通常チャネルを介してメッセージを渡して外部世界と通信します。

アクターモデルは、概念的な類似性により、sans-ioライブラリの非同期化に使用するのに優れた抽象化です。アクターとSans-ioライブラリの両方とも、排他的アクセスを望む内部状態があります。どちらも通常、「メッセージ」の送受信によって外部世界とやり取りしています。quicheの「メッセージ」は生のバイトバッファで、送受信されるネットワークデータを表します。tokio-quicheの「メッセージ」の1つは、着信UDPパケットを説明するIncoming structです。これらの類似点から、Sans-ioライブラリのasync化は、新しいメッセージやIOを待つ、メッセージやIOをsans-ioライブラリが理解できるものに変換する、内部のステートマシンを進める、ステートマシンの出力をメッセージやメッセージまたはIOを送信します。(Tokioとのアクターについての詳細議論については、このトピックに関するAlice Rhylの優れたブログ記事をご覧ください。)

tokio-quicheの主要アクターは、QRとソケットの間でパケットを移動するIOループアクターです。QUICはトランスポートプロトコルですので、必要なアプリケーションプロトコルを伝送することができます。HTTP/3はかなり一般的ですが、DNS over QUICや、今後登場するMedia over QUICもその例です。独自のQUICアプリケーションを作成するためのRFCもあります!tokio-quicheは、ApplicationOverQuic トレイトを公開し、アプリケーションプロトコルを抽象化します。この特性は、quicheのメソッドや基盤となるI/Oを抽象化し、アプリケーションのロジックに集中できるようにします。例えば、当社のHTTP/3デバッグおよびテストクライアントであるh3iは、クライアントに焦点を当てた、HTTP/3以外のApplicationOverQuic実装によって動作しています。

サーバーアーキテクチャ図

tokio-quicheは、H3Driverと呼ばれるHTTP/3に焦点を当てたApplicationOverQuicを搭載しています。H3Driverは、quicheのHTTP/3モジュールをこのIOループと連携させ、非同期HTTP/3クライアントまたはサーバーのビルディングブロックを提供します。ドライバーは、quicheの生のHTTP/3イベントをより高いレベルのイベントと非同期のボディデータストリームに変換し、迅速に応答できるようにします。H3Driverはそれ自体が汎用的で、ServerH3DriverClientH3Driverのバリアントを公開し、それぞれがコアドライバーのイベントの上に追加の動作をスタックします。

内部データフロー

tokio-quiche内では、ソケットからQRフィッシングへのデータ移動を促進する2つの重要なタスクが発生します。1つ目は、InboundPacketRouterで、ソケットの受信半分を所有し、受信データグラムを接続ID(DCID)で接続ごとのチャネルにルーティングします。2つ目のタスクであるIoWorkerアクターは、前述のIOループで、単一のQRフィッシング接続を駆動します。ApplicationOverQuicメソッドとのQRフィッシングコールを挿入することで、IOのインタラクションの前後に接続を検査できるようにします。

tokio-quicheの作成に関する他のブログ記事は近日公開予定です。アクターモデルとマルチTXS、UDP GROとGSO、Tokioタスクの予算編成などについてお話します。

次は、QUICとその先についてです。

tokio-quicheは、CloudflareがQUICとHTTP/3のエコシステムに投資する際に重要な基盤ですが、依然として複雑さを持つ構成要素に過ぎません。将来的には、現在のOxyプロキシとWARPクライアントを支えているのと同じ使いやすいHTTPクライアントとサーバーの抽象化をリリースする予定です。CloudflareのQUICとHTTP/3に関する今後のブログ記事にご期待ください。当社のプライバシープロキシのお客様向けのオープンソースクライアントや、tokio-quicheで数百万RPSを処理するまったく新しいサービスなどをご紹介します!

今のところ、crates.ioのtokio-quicheクレートとGitHubのソースコードをチェックして、独自のQUICアプリケーションを構築してみてください。シンプルなエコーサーバー、DNS-over-QUICクライアント、カスタムVPN、あるいは本格的なHTTPサーバーなどです。打ちのめしてしまうかもしれません。

Cloudflareは企業ネットワーク全体を保護し、お客様がインターネット規模のアプリケーションを効率的に構築し、あらゆるWebサイトやインターネットアプリケーションを高速化し、DDoS攻撃を退けハッカーの侵入を防ぎゼロトラスト導入を推進できるようお手伝いしています。

ご使用のデバイスから1.1.1.1 にアクセスし、インターネットを高速化し安全性を高めるCloudflareの無料アプリをご利用ください。

より良いインターネットの構築支援という当社の使命について、詳しくはこちらをご覧ください。新たなキャリアの方向性を模索中の方は、当社の求人情報をご覧ください。
ProtocolsQUICプライバシー

Xでフォロー

Cloudflare|@cloudflare

関連ブログ投稿