35.5. MPTCP サブフローのモニタリング
マルチパス TCP (MPTCP) ソケットのライフサイクルは複雑です。主な MPTCP ソケットの作成、MPTCP パスの検証、1 つ以上のサブフローの作成を行い、最終的に削除されます。最後に、MPTCP ソケットが終了します。
MPTCP プロトコルを使用すると、iproute パッケージで提供される ip ユーティリティーを使用して、ソケットおよびサブフローの作成と削除に関連する MPTCP 固有のイベントをモニタリングできます。このユーティリティーは、netlink インターフェイスを使用して MPTCP イベントをモニターします。
この手順は、MPTCP イベントをモニターする方法を示しています。そのために、MPTCP サーバーアプリケーションをシミュレートし、クライアントがこのサービスに接続します。この例に関係するクライアントは、次のインターフェイスと IP アドレスを使用します。
-
サーバー:
192.0.2.1 -
クライアント (イーサネット接続):
192.0.2.2 -
クライアント (WiFi 接続):
192.0.2.3
この例を単純化するために、すべてのインターフェイスは同じサブネット内にあります。これは必須ではありません。ただし、ルーティングが正しく設定されており、クライアントが両方のインターフェイスを介してサーバーに到達できることが重要です。
前提条件
- イーサネットと WiFi を備えたラップトップなど、2 つのネットワークインターフェイスを備えた RHEL クライアント
- クライアントは両方のインターフェイスを介してサーバーに接続できます
- RHEL サーバー
- クライアントとサーバーの両方が RHEL 8.6 以降を実行しています
手順
クライアントとサーバーの両方で、接続ごとの追加のサブフロー制限を
1に設定します。# ip mptcp limits set add_addr_accepted 0 subflows 1サーバーで、MPTCP サーバーアプリケーションをシミュレートするには、TCP ソケットの代わりに強制された MPTCP ソケットを使用してリッスンモードで
netcat(nc) を開始します。# nc -l -k -p 12345-kオプションを指定すると、ncは、最初に受け入れられた接続の後でリスナーを閉じません。これは、サブフローのモニタリングを示すために必要です。クライアントで以下を実行します。
メトリックが最も低いインターフェイスを特定します。
# ip -4 route 192.0.2.0/24 dev enp1s0 proto kernel scope link src 192.0.2.2 metric 100 192.0.2.0/24 dev wlp1s0 proto kernel scope link src 192.0.2.3 metric 600enp1s0インターフェイスのメトリックは、wlp1s0よりも低くなります。したがって、RHEL はデフォルトでenp1s0を使用します。最初のターミナルで、モニタリングを開始します。
# ip mptcp monitor2 番目のターミナルで、サーバーへの MPTCP 接続を開始します。
# nc 192.0.2.1 12345RHEL は、
enp1s0インターフェイスとそれに関連する IP アドレスをこの接続のソースとして使用します。モニタリングターミナルで、
ip mptcp monitorコマンドが次のログを記録するようになりました。[ CREATED] token=63c070d2 remid=0 locid=0 saddr4=192.0.2.2 daddr4=192.0.2.1 sport=36444 dport=12345トークンは MPTCP ソケットを一意の ID として識別し、後で同じソケットで MPTCP イベントを相互に関連付けることができます。
サーバーへの
nc接続が実行されているターミナルで、Enter を押します。この最初のデータパケットは、接続を完全に確立します。データが送信されていない限り、接続は確立されないことに注意してください。モニタリングターミナルで、
ip mptcp monitorが次のログを記録するようになりました。[ ESTABLISHED] token=63c070d2 remid=0 locid=0 saddr4=192.0.2.2 daddr4=192.0.2.1 sport=36444 dport=12345オプション: サーバーのポート
12345への接続を表示します。# ss -taunp | grep ":12345" tcp ESTAB 0 0 192.0.2.2:36444 192.0.2.1:12345この時点で、サーバーへの接続は 1 つだけ確立されています。
3 番目のターミナルで、別のエンドポイントを作成します。
# ip mptcp endpoint add dev wlp1s0 192.0.2.3 subflowこのコマンドは、クライアントの WiFi インターフェイスの名前と IP アドレスを設定します。
モニタリングターミナルで、
ip mptcp monitorが次のログを記録するようになりました。[SF_ESTABLISHED] token=63c070d2 remid=0 locid=2 saddr4=192.0.2.3 daddr4=192.0.2.1 sport=53345 dport=12345 backup=0 ifindex=3locidフィールドには、新しいサブフローのローカルアドレス ID が表示され、接続でネットワークアドレス変換 (NAT) が使用されている場合でも、このサブフローが識別されます。saddr4フィールドは、ip mptcp endpoint addコマンドからのエンドポイントの IP アドレスと一致します。オプション: サーバーのポート
12345への接続を表示します。# ss -taunp | grep ":12345" tcp ESTAB 0 0 192.0.2.2:36444 192.0.2.1:12345 tcp ESTAB 0 0 192.0.2.3%wlp1s0:53345 192.0.2.1:12345このコマンドは、2 つの接続を表示します。
-
ソースアドレス
192.0.2.2との接続は、以前に確立した最初の MPTCP サブフローに対応します。 -
送信元アドレスが
192.0.2.3のwlp1s0インターフェイスを介したサブフローからの接続。
-
ソースアドレス
3 番目のターミナルで、エンドポイントを削除します。
# ip mptcp endpoint delete id 2ip mptcp monitor出力のlocidフィールドの ID を使用するか、ip mptcp endpoint showコマンドを使用してエンドポイント ID を取得します。モニタリングターミナルで、
ip mptcp monitorが次のログを記録するようになりました。[ SF_CLOSED] token=63c070d2 remid=0 locid=2 saddr4=192.0.2.3 daddr4=192.0.2.1 sport=53345 dport=12345 backup=0 ifindex=3ncクライアントを備えた最初のターミナルで、Ctrl+C を押してセッションを終了します。モニタリングターミナルで、
ip mptcp monitorが次のログを記録するようになりました。[ CLOSED] token=63c070d2