Red Hat Training

A Red Hat training course is available for RHEL 8

27.2. 複数の利用可能なパスについてアプリケーションに通知するために iproute2 を使用

デフォルトでは、MPTCP ソケットは単一のサブフローで起動しますが、初回作成時に接続に新しいサブフローと IP アドレスを追加できます。この手順では、サブフローおよび IP アドレスの接続制限を更新し、新しい IP アドレス (エンドポイント) を MPTCP 接続に追加する方法を説明します。

MPTCP は現在、同じソケットの IPv6 エンドポイントと IPv4 エンドポイントの組み合わせに対応していません。同じアドレスファミリーに属するエンドポイントを使用します。

手順

  1. サーバーで、接続および IP アドレスの制限を 1 に設定します。

    # ip mptcp limits set subflow 1

  2. クライアントの接続および IP アドレスの制限を 1 に設定します。

    # ip mptcp limits set subflow 1 add_addr_accepted 1

  3. IP アドレス 198.51.100.1 を、サーバー上の新しい MPTCP エンドポイントとして追加します。

    # ip mptcp endpoint add 198.51.100.1 dev enp1s0 signal

    重要

    フラグの値を、subflowbackupsignalに設定することができます。フラグを以下に設定します。

    • signal。3 方向のハンドシェイクが完了した後に ADD_ADDR パケットを送信します。
    • subflow。クライアントによって MP_JOIN SYN を送信します。
    • backup。エンドポイントをバックアップアドレスとして設定します。
  4. 0.0.0.0 へのサーバーバインディングを -k 引数で開始し、最初の接続を受け入れて、クライアントによって行われた MP_JOIN SYN サーバーに拒否させた後に ncat がリスニングソケットを閉じないようにします。

    # ncat -4 0.0.0.0 -k -l 4321

  5. クライアントを起動し、サーバーに接続してトラフィックを交換します。たとえば、クライアントは「Hello world」をサーバーに 5 回書き込み、接続を終了します。

    # ncat -4 192.0.2.1 4321
    Hello world 1
    Hello world 2
    Hello world 3
    Hello world 4
    Hello world 5

    Ctrl+D を押して終了します。

検証手順

  1. 接続および IP アドレス制限を確認します。

    # ip mptcp limit show

  2. 新たに追加されたエンドポイントを確認します。

    # ip mptcp endpoint show

  3. tcpdump を使用してトラフィックをキャプチャーし、MPTCP サブオプションの使用をチェックします。

    # tcpdump -tnni interface TCP ポート 4321
    client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [S], seq 3107783947, win 29200, options [mss 1460,sackOK,TS val 2568752336 ecr 0,nop,wscale 7,mptcp capable v1], length 0
    client In  IP 192.0.2.1.4321 > 192.0.2.2.56868: Flags [S.], seq 4222339923, ack 3107783948, win 28960, options [mss 1460,sackOK,TS val 1713130246 ecr 2568752336,nop,wscale 7,mptcp capable v1 {0xf51c07a47cc2ba75}], length 0
    client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [.], ack 1, win 229, options [nop,nop,TS val 2568752336 ecr 1713130246,mptcp capable v1 {0xb243376cc5af60bd,0xf51c07a47cc2ba75}], length 0
    client Out IP 192.0.2.2.56868 > 192.0.2.1.4321: Flags [P.], seq 1:17, ack 1, win 229, options [nop,nop,TS val 2568752336 ecr 1713130246,mptcp capable v1 {0xb243376cc5af60bd,0xf51c07a47cc2ba75},nop,nop], length 16
    client In  IP 192.0.2.1.4321 > 192.0.2.2.56868: Flags [.], ack 17, win 227, options [nop,nop,TS val 1713130246 ecr 2568752336,mptcp add-addr id 1 198.51.100.1 hmac 0xe445335073818837,mptcp dss ack 5562689076006296132], length 0
    client Out IP 198.51.100.2.42403 > 198.51.100.1.4321: Flags [S], seq 3356992178, win 29200, options [mss 1460,sackOK,TS val 4038525523 ecr 0,nop,wscale 7,mptcp join backup id 0 token 0xad58df1 nonce 0x74a8137f], length 0
    client In  IP 198.51.100.1.4321 > 198.51.100.2.42403: Flags [S.], seq 1680863152, ack 3356992179, win 28960, options [mss 1460,sackOK,TS val 4213669942 ecr 4038525523,nop,wscale 7,mptcp join backup id 0 hmac 0x9eff7a1bf4e65937 nonce 0x77303fd8], length 0
    client Out IP 198.51.100.2.42403 > 198.51.100.1.4321: Flags [.], ack 1, win 229, options [nop,nop,TS val 4038525523 ecr 4213669942,mptcp join hmac 0xdfdc0129424f627ea774c094461328ce49d195bc], length 0
    client In  IP 198.51.100.1.4321 > 198.51.100.2.42403: Flags [.], ack 1, win 227, options [nop,nop,TS val 4213669942 ecr 4038525523,mptcp dss ack 5562689076006296132], length 0

    このコマンドを実行するには、tcpdump パッケージが必要です。

関連情報

  • 利用可能なエンドポイントフラグの詳細は、ip-mptcp(8) の man ページを参照してください。