シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

TCP拡張プロトコルMPTCP

技術部ネットワーク課の二之宮です。

はじめに

最近、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 接続に統合されます。

  • アプリケーションから受け取ったデータは、複数のサブフローに分割送信されます。

TCPとMPTCP

他の冗長化技術との比較

BGP や OSPF 等のルーティングプロトコルやリンクアグリゲーションが、アプリケーション間のパスの一部を構成する区間や、機器間のリンクを冗長化するものであるのに対して、MPTCP はアプリケーション間のパスを冗長化します。

終わりに

TCP はエンドツーエンドの原理に基づいて作成されました。

  • エンドツーエンドの原理
    通信の高度な制御や複雑な機能は末端(エンド)のシステムで行い、経路上のシステムは単純なデータの中継や転送のみを行うという考え方です。
    この考えによって、通信の効率化や性能の向上が期待できるとされています。また、新しいアプリケーションやプロトコルの対応が、末端への機能実装のみで行える利点もあります。

かつての ARPANET の NCP (Network Control Program) がエラーチェック機能を強化し再送機能を追加することで TCP に進化したのと同様に、エンドツーエンドの原理に則って TCP に冗長化の機能を追加して進化させたのが MPTCP と言えるのではないかと思いました。

参考文献