技術部ネットワーク課の二之宮です。
はじめに
最近、Multipath TCP (MPTCP) なるものがあることを知りました。
調べてみると、基になっている TCP に輪をかけて難解ですので、ほんのさわりだけ触れてみたいと思います。
MPTCP の概要
MPTCP は TCP を拡張したプロトコルです。
TCP が単一の経路で動作するのに対して、MPTCP は複数のインターフェースを介して、複数の経路で同時に動作します。
TCP と同様に、MPTCP もトランスポート層のプロトコルですが、上位のアプリケーション層からは TCP に見えるほか、下位のネットワーク層からは複数のパスそれぞれが TCP に見えるので、TCP が動く環境であれば動作します。
もし、通信相手が MPTCP に対応していない場合でも、TCP として動作しますので、通信できないというようなことはありません。
MPTCP の利点
MPTCP は、複数のパスを同時に使用することにより、以下の利点が得られます。
スループットの向上
複数パスの帯域幅が集約されるので、スループットが向上します。回復力の向上
あるパスで障害が発生しても、正常な他のパスにトラフィックを移動し、失われたパケットも再送されるので、ネットワーク障害に対する回復力が向上します。
MPTCP の歴史
2013年に実験用のプロトコル RFC 6824 が公開されました。
その後、2020年にインターネット標準となり、現在に至っています。
年月 | できごと |
---|---|
2013年1月 | RFC 6824(実験)公開 ・TCP Extensions for Multipath Operation with Multiple Addresses ・複数のアドレスを使用し複数の経路を操作するための TCP の拡張 ・マルチパス TCP v0 |
2013年9月 | iOS 7 リリース,MPTCP を実装し Siri で使用 |
2020年3月 | RFC 8684(標準)公開 ・RFC 6824 の置き換え ・マルチパス TCP v1 |
2020年11月 | RHEL 8.3 テクノロジープレビュー |
2021年11月 | RHEL 8.5 完全サポート |
MPTCP で拡張された機能
TCP の主な機能
MPTCP のもとになっている TCP の主な機能は以下の通りです。
送信側受信側共通
- アプリケーション間通信
ポート番号を使用して、アプリケーションを識別しデータの受け渡しを行います。
- アプリケーション間通信
送信側
データ分割(セグメンテーション)
アプリケーションから受け取ったデータを分割して、制御情報を付けた小さなデータのかたまり (TCPパケット)にし、ホスト間のデータ転送を行う下位のプロトコル IP に渡します。流量制限
受信側ホストの能力に合わせて通信量を調整します。再送制御
届いてない TCPパケットを再送することで、データの到達を保証します。輻輳制御
ネットワークの混雑具合に応じて通信量を調整します。
受信側
- 順序制御
バラバラに届いた TCPパケットを順序良く結合し、元のデータに戻します。
- 順序制御
MPTCP で拡張された主な機能
マルチパス転送
複数のパス(経路)を同時に使用してデータを転送します。パス(サブフロー)の管理
- パスの状態を監視し、常に状態の良い、最適なパスを選択します。
- ネットワーク遅延が少ないパス
- 利用可能な帯域幅を最大限に活用できるパス
- 信頼性が高いパス
- パスの状態に応じて自動でパスの再構成(追加・削除)を行います。
- パスの状態を監視し、常に状態の良い、最適なパスを選択します。
フェイルオーバー
あるパスでデータの転送に失敗したら、他のパスでデータ転送を継続します。負荷分散
複数のパスにデータ転送を分散し、ネットワーク帯域を効率的に使用します。
MPTCP の仕組み
送信側、受信側共に、MPTCP に対応していることを確認してから、1本目の TCP 接続が行われます。
追加の TCP 接続(サブフロー)が行われて、順次、MPTCP 接続に統合されます。
アプリケーションから受け取ったデータは、複数のサブフローに分割送信されます。
他の冗長化技術との比較
BGP や OSPF 等のルーティングプロトコルやリンクアグリゲーションが、アプリケーション間のパスの一部を構成する区間や、機器間のリンクを冗長化するものであるのに対して、MPTCP はアプリケーション間のパスを冗長化します。
終わりに
TCP はエンドツーエンドの原理に基づいて作成されました。
- エンドツーエンドの原理
通信の高度な制御や複雑な機能は末端(エンド)のシステムで行い、経路上のシステムは単純なデータの中継や転送のみを行うという考え方です。
この考えによって、通信の効率化や性能の向上が期待できるとされています。また、新しいアプリケーションやプロトコルの対応が、末端への機能実装のみで行える利点もあります。
かつての ARPANET の NCP (Network Control Program) がエラーチェック機能を強化し再送機能を追加することで TCP に進化したのと同様に、エンドツーエンドの原理に則って TCP に冗長化の機能を追加して進化させたのが MPTCP と言えるのではないかと思いました。
参考文献
- MPTCP
http://blog.multipath-tcp.org/blog/html/index.html# - MPTCP | Multipath TCP for Linux
https://www.mptcp.dev/ - Multipath TCP https://mptcp-apps.github.io/mptcp-doc/index.html
- Multipath TCP - Wikipedia
https://en.wikipedia.org/wiki/Multipath_TCP - Network Control Program - Wikipedia
https://ja.wikipedia.org/wiki/Network_Control_Program - RFC 6824: TCP Extensions for Multipath Operation with Multiple Addresses
https://www.rfc-editor.org/rfc/rfc6824.html - RFC 8684: TCP Extensions for Multipath Operation with Multiple Addresses
https://www.rfc-editor.org/rfc/rfc8684.html - RFC 9293: Transmission Control Protocol (TCP)
https://www.ietf.org/rfc/rfc9293.html - 第35章 Multipath TCP の使用 | Red Hat Product Documentation
https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/getting-started-with-multipath-tcp_configuring-and-managing-networking#getting-started-with-multipath-tcp_configuring-and-managing-networking