Noq: n0の新しいRustによるQUIC実装
概要
- noqは、汎用的なQUIC実装で、マルチパスとNATトラバーサルに対応
- irohでv0.96から本番運用中、他用途にも利用可能
- Quinnからのハードフォークに至った経緯
- QUIC MultipathやNATトラバーサル等、先進的な機能を実装
- 今後も機能拡張やコミュニティとの協力を継続予定
noq発表と背景
- noq(number 0 QUIC)は、独自開発の汎用QUIC実装
- Multipath(マルチパス)およびNATトラバーサルをサポート
- iroh v0.96以降のトランスポート層として本番運用
- iroh以外の用途にも適用可能な設計
Quinnからのフォーク理由
- iroh開発時、Quinnの上でリレー/ダイレクト切替やNATトラバーサル、輻輳制御状態管理など多くの独自処理を実装
- これらはQUICレイヤーから見えず、外部からの改善が困難
- 当初はQuinnを追従しつつ最小限の差分で運用
- マルチパスやリレー機能の深掘りにより、開発サイクルが乖離
- Quinn側のレビューバーデン増大、構造的な改修が困難に
- 問題解決にはハードフォークが最善と判断、協力は継続方針
- Quinnへの拒否ではなく、目的特化のための分岐
noqの主な特徴
-
QUIC Multipath仕様のフル実装
- Quinn/irohでの最大のアーキテクチャ転換点
- 以前は複数経路(リレー、IPv4/IPv6直通)をQUIC下で独自管理
- Multipath実装により、全経路がQUIC上のファーストクラス市民に
- 各経路ごとに輻輳状態を管理し、適切な経路選択が可能
- レイテンシ改善等もシステマティックに処理
- 汎用的なMultipath実装で、iroh以外でも利用可能
-
QUIC NATトラバーサルドラフトの独自解釈・実装
- 本番グレードでの初事例
- 多様なNAT環境下での動作をiroh数十万台で実地検証
- QUICレイヤーでNATホールパンチを直接表現、輻輳制御やロス検出が高精度
- 仕様は未確定だが、今後も継続的に改善予定
-
**QUIC Address Discovery(QAD)**の実装
- iroh v0.32から運用
- クライアントのパブリックIPアドレス取得をQUICで実現
- 以前のSTUNと比較して、暗号化やプライバシー向上、プロトコルの硬直化防止
-
Qlogによる詳細なQUIC接続ログ対応
- 多様なイベントをカバーし、qvis等の可視化ツールにも対応
- Multipath専用イベントも拡張
- 複数経路でのパケットフローを可視化するビューワプロトタイプも提供
-
WeakConnectionHandle型の追加
- コネクション自体のライフタイムを保持しないハンドル
- 必要時にフルConnectionへ昇格可能
- std::sync::Weakに似た挙動だが、Arc不要
- コネクションマネージャ等の実装で有用
noqの運用実績と互換性
- iroh v0.96以降で本番運用中
- Multipath実装の自己検証に加え、picoquic等他実装との相互運用テストも実施
今後の展望
- 長期的な基盤として継続開発
- NATトラバーサルやパフォーマンス最適化の更なる改善
- QUICワーキンググループやQuinnチームとの協力継続
- QUIC実装やP2Pトランスポート、多様なネットワーク環境でのアプリ開発者との連携を歓迎
- Rust製QUIC Multipath実装を試したい場合は、noqドキュメント参照を推奨
irohについて
- irohは、「どのデバイスでも繋がる」ネットワーキングライブラリ
- 必要なプロトコルを組み合わせて機能追加、またはシンプルな抽象化レイヤーの上でカスタム開発も可能
- オープンソースで、既に数十万台のデバイスで本番運用中
- ドキュメント参照、コード閲覧、Discordでの質問が可能