Linux向け Multipath TCP(2022年)
(mptcp.dev)Multipath TCP の概要
- Multipath TCP(MPTCP)は標準 TCP の拡張版で、RFC 8684 に記載されている
- デバイスが同時に複数のインターフェースを使用し、単一の MPTCP 接続を通じて TCP パケットを送受信できるようにする
- MPTCP は複数インターフェースの帯域幅を集約したり、最も遅延の短いインターフェースを優先したりできる
- また、1 つの経路がダウンしてもフェイルオーバーが可能で、トラフィックは別の経路へシームレスに再投入される
MPTCP のユースケース
- MPTCP を使って複数の経路を並列または同時に利用できるようになることで、TCP と比べて新たなユースケースが生まれる:
- Seamless handovers: 接続を維持したまま、ある経路から別の経路へ切り替える。Apple はこの理由で 2013 年から主にスマートフォンで MPTCP を使用している。
- Best network selection: 遅延、損失、コスト、帯域幅などの条件に応じて「最適な」経路を使用する。
- Network aggregation: より高いスループットのために複数の経路を同時に使う。例: ファイルをより速く送るために固定回線とモバイルネットワークを組み合わせる。
MPTCP の概念
- IPPROTO_MPTCP プロトコル(Linux 専用)で新しいソケットを作成すると、1 つのインターフェースを通じてデータを送るために使用される通常の TCP 接続からなるサブフロー(または経路)が作られる
- 追加のサブフローは後でホスト間でネゴシエートできる
- リモートホストが MPTCP の使用を検出できるよう、基本 TCP サブフローの TCP オプションフィールドに新しいフィールドが追加されている
- このフィールドには、相手ホストが MPTCP をサポートしている場合に使用するよう知らせる MP_CAPABLE オプションなどが含まれる
- リモートホストまたは途中のミドルボックスが MPTCP をサポートしていない場合、返された SYN+ACK パケットの TCP オプションフィールドには MPTCP オプションが含まれない
- この場合、接続は通常の TCP に「ダウングレード」され、単一経路で継続される
このような動作は、Path Manager と Packet Scheduler という 2 つの内部コンポーネントによって可能になっている。
Path Manager
- Path Manager はサブフローの作成から削除までを担当し、アドレス通知も担当する
- 一般にクライアント側でサブフローを開始し、サーバー側で ADD_ADDR および REMOVE_ADDR オプションを通じて追加アドレスを通知する
- Linux v5.19 時点では、
net.mptcp.pm_typesysctl ノブで制御される 2 つの Path Manager がある:- in-kernel(タイプ 0): すべての接続に同じルールを適用(
ip mptcpを参照) - userspace(タイプ 1): ユーザー空間デーモン(例:
mptcpd)によって制御され、各接続に異なるルールを適用できる
- in-kernel(タイプ 0): すべての接続に同じルールを適用(
Packet Scheduler
- Packet Scheduler は、利用可能なサブフローの中から次のデータパケット送信に使うサブフローを選択する役割を持つ
- 利用可能な帯域幅の活用を最大化したり、最も遅延の短い経路だけを選んだり、設定に応じて別のポリシーを決定できる
- Linux v6.8 時点では、
net.mptcpの sysctl ノブで制御される単一の Packet Scheduler しかない
MPTCP の主な特徴(Linux v6.10 時点)
socket()システムコールでのIPPROTO_MPTCPプロトコル対応- ピアまたはミドルボックスが MPTCP をサポートしない場合、MPTCP から TCP へフォールバック
- カーネル内部またはユーザー空間の経路マネージャーを用いた経路管理
- TCP ソケットで一般に使われるソケットオプション
- MIB カウンター、diag サポート(
ssコマンドで使用)、トレースポイントを含むデバッグ機能
GN⁺の意見
- MPTCP は、端末が複数のネットワークに接続されている場合に非常に有用な技術である。5G-Wi-Fi ハンドオーバーや異種ネットワーク集約などに効果的に活用できる。
- ただし、MPTCP をサポートするサーバーとクライアントの双方に実装が必要であり、中間ネットワークでも MPTCP への対応が求められるという制約がある。普及までには時間がかかりそうだ。
- Google の QUIC プロトコルも類似のマルチパス機能を提供しており、QUIC のほうがよりシンプルで UDP ベースのため、より速く普及する可能性がある。MPTCP と QUIC の競争が予想される。
- カーネル依存の Linux 向け MPTCP 実装とは異なり、Apple は独自にユーザー空間で MPTCP を実装し、iOS と macOS に搭載している。Google も同様のアプローチを取る可能性がありそうだ。
- MPTCP の経路制御やスケジューリングポリシーをアプリケーション要件に最適化するには、アプリケーションと MPTCP の間で API を通じた情報交換が必要だと思われる。これに対する標準化された方法はまだないとみられる。
1件のコメント
Hacker Newsの意見