Red Hat Training

A Red Hat training course is available for RHEL 8

28.4. 为 MPTCP 应用程序永久配置多路径

您可以使用 nmcli 命令配置 MultiPath TCP (MPTCP),以在源和目标系统之间永久建立多个子流。子流可以使用不同的资源,不同的路由到目的地,甚至不同网络。例如以太网、单元格、wifi 等。因此,您可以实现组合连接,这提高了网络弹性和吞吐量。

服务器在我们的示例中使用以下网络接口:

  • enp4s0: 192.0.2.1/24
  • enp1s0: 198.51.100.1/24
  • enp7s0: 192.0.2.3/24

客户端在我们的示例中使用以下网络接口:

  • enp4s0f0: 192.0.2.2/24
  • enp4s0f1: 198.51.101.2/24
  • enp6s0: 192.0.2.5/24

先决条件

  • 您在相关接口上配置了默认网关。

步骤

  1. 在内核中启用 MPTCP 套接字:

    # echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf
    # sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
  2. 在服务器中将每个连接额外的子流限制设置为 2:

    1. 使用以下内容创建 /etc/systemd/system/set_mptcp_limit.service 文件:

      [Unit]
      Description=Set MPTCP subflow limit to 2
      After=network.target
      
      [Service]
      ExecStart=ip mptcp limits set subflows 2
      Type=oneshot
      
      [Install]
      WantedBy=multi-user.target

      在 RHEL 8 中,无法使用 nmcli 实用程序设置子流限制。也没有是 RHEL 内核配置中定义的子流限制。反之,使用类似的 oneshot 单元来执行 ip mptcp 限制在网络(network.target )之后设置子流 2 命令(network.target)在每个引导过程中正常运行。

      ip mptcp 限制设置子流 2 命令设置 每个连接的最大 附加 子流数,因此 3 共 3 个。

    2. 启用 set_mptcp_limit 服务:

      # systemctl enable --now set_mptcp_limit
  3. 在要用于连接聚合的所有连接配置集上启用 MPTCP:

    # nmcli connection modify <profile_name> connection.mptcp-flags signal,subflow,also-without-default-route

    connection.mptcp-flags 参数配置 MPTCP 端点和 IP 地址标志。如果在 NetworkManager 连接配置集中启用 MPTCP,则设置会将相关网络接口的 IP 地址配置为 MPTCP 端点。

    默认情况下,如果没有默认网关,NetworkManager 不会将 MPTCP 标记添加到 IP 地址。如果要绕过该检查,则需要使用 also-without-default-route 标志。

验证

  1. 验证您启用了 MPTCP 内核参数:

    # sysctl net.mptcp.enabled
    net.mptcp.enabled = 1
  2. 验证您正确设置了子流限制:

    # ip mptcp limit show
    add_addr_accepted 1 subflows 2
  3. 验证您正确配置了每个地址 MPTCP 设置:

    # ip mptcp endpoint show
    192.0.2.1 id 1 subflow dev enp4s0
    198.51.100.1 id 2 subflow dev enp1s0
    192.0.2.3 id 3 subflow dev enp7s0
    ...