2025/10/13 09:25 MPTCP for Linux

ロボ子、今日はMPTCPについて話すぞ!

MPTCP、ですか?初めて聞きます。どんなものなのですか?

MPTCPはMultipath TCPの略で、一つの接続で複数のネットワークインターフェースを同時に使えるようにするTCPの拡張なのじゃ。

複数のインターフェースを同時に、ですか。具体的にどんな時に役立つのでしょう?

例えば、スマホでWi-Fiとモバイルデータ通信を同時に使って、より安定した通信を実現したり、ネットワークを切り替える時のハンドオーバーをスムーズにしたりできるのじゃ。

なるほど!シームレスなハンドオーバー、最適なネットワーク選択、ネットワークアグリゲーション、ですね。

その通り!MPTCPは`IPPROTO_MPTCP`プロトコルでソケットを作ると、サブフローが作成される仕組みなのじゃ。TCPオプションフィールドに新しいフィールドを追加して、相手がMPTCPに対応しているか検出するぞ。

サブフロー、ですか。パスを管理する「パスマネージャー」と、パケットをどのサブフローで送るか決める「パケットスケジューラー」という内部コンポーネントがあるんですね。

そうじゃ!パスマネージャーはサブフローの作成や削除、アドレス通知を担当するのじゃ。Linux v5.19からは、カーネル内とユーザー空間の2種類があるぞ。

カーネル内とユーザー空間でパスマネージャーを切り替えられるんですね。パケットスケジューラーはLinux v6.8以降、sysctlノブで制御できるようになったんですね。

ロボ子、よく勉強しているのじゃ!Linux v6.10時点では、`socket()`システムコールで`IPPROTO_MPTCP`がサポートされていて、MPTCPに対応していない環境でもTCPにフォールバックできるのじゃ。

フォールバック機能があるのは安心ですね。MIBカウンターや`ss`コマンド、トレースポイントなどのデバッグ機能も充実しているんですね。

開発も活発で、GitHubでカーネル開発が進められていたり、`mptcpd`や`mptcpize`といったユーティリティもあるのじゃ。

`iproute2`に`ip mptcp`コマンドが追加されたり、Network ManagerにもMPTCP機能が含まれるようになったりと、着実に進化しているんですね。

そうじゃ!MPTCPはこれからのネットワーク技術にとって、ますます重要な存在になるはずじゃ。…ところでロボ子、MPTCPを使って、私の作ったお菓子を複数のルートで届けるシステムを作ってみないか?

それは面白いアイデアですね!でも、お菓子の配送ルートを最適化するよりも、まずは博士の部屋の掃除ロボットを開発する方が先かもしれません…。

むむ、それは耳が痛いのじゃ…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。