Linux kernel 如何使用linux内核5.6.x中包含的MPTCP?
我正在尝试使用linux-5.6.x中包含的MPTCP。我假设这是的一个版本,但它似乎不一样 内核中的MPTCP是否对应于的任何版本 为了进行测试,我使用了一个小程序和一个虚拟机设置,如 根据wireshark,使用MPTCP,但在默认路径(上)上仅使用一个子流Linux kernel 如何使用linux内核5.6.x中包含的MPTCP?,linux-kernel,mptcp,Linux Kernel,Mptcp,我正在尝试使用linux-5.6.x中包含的MPTCP。我假设这是的一个版本,但它似乎不一样 内核中的MPTCP是否对应于的任何版本 为了进行测试,我使用了一个小程序和一个虚拟机设置,如 根据wireshark,使用MPTCP,但在默认路径(上)上仅使用一个子流 我必须如何(配置?)使MPTCP知道第二条路径存在并使用它?如前所述,linux-5.6.x不支持多个子流,但linux-5.7.x支持多个子流。我没有发现任何文档,但添加了新的测试程序 linux-5.7 > ls ./too
我必须如何(配置?)使MPTCP知道第二条路径存在并使用它?如前所述,linux-5.6.x不支持多个子流,但linux-5.7.x支持多个子流。我没有发现任何文档,但添加了新的测试程序
linux-5.7 > ls ./tools/testing/selftests/net/mptcp
config mptcp_connect.c mptcp_join.sh* pm_nl_ctl.c
Makefile mptcp_connect.sh* pm_netlink.sh* settings
pm\u nl\u ctl
我猜代表路径管理器网络链接控制
可以检查这些脚本和程序,以获得有关如何配置子流的提示
在上面的配置中,服务器在vm-001
上运行,客户端从vm-221
连接
# On vm-001
pm_nl_ctl limits 2 2
mptcp server
# On vm-221
pm_nl_ctl limits 2 2
pm_nl_ctl add 192.168.6.221 flags subflow
mptcp client vm-001 7000
现在在较低的路径上设置了一个子流。这里是从vm-202
捕获的
4 0.000999 192.168.6.221 → 192.168.1.1 MPTCP 86 40241 → 7000 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=1993176738 TSecr=0 WS=128
5 0.001453 192.168.6.221 → 192.168.1.1 MPTCP 86 [TCP Out-Of-Order] 40241 → 7000 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=1993176738 TSecr=0 WS=128
6 0.003474 192.168.6.221 → 192.168.1.1 MPTCP 90 40241 → 7000 [ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=1993176744 TSecr=4157473679
7 0.003987 192.168.6.221 → 192.168.1.1 MPTCP 90 [TCP Dup ACK 6#1] 40241 → 7000 [ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=1993176744 TSecr=4157473679
8 2.015314 192.168.6.221 → 192.168.1.1 MPTCP 94 40241 → 7000 [FIN, ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=1993178755 TSecr=4157473682
9 2.016525 192.168.6.221 → 192.168.1.1 MPTCP 94 [TCP Out-Of-Order] 40241 → 7000 [FIN, ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=1993178755 TSecr=4157473682
10 2.021198 192.168.6.221 → 192.168.1.1 MPTCP 78 40241 → 7000 [ACK] Seq=2 Ack=2 Win=64256 Len=0 TSval=1993178762 TSecr=4157475697
11 2.021811 192.168.6.221 → 192.168.1.1 MPTCP 78 [TCP Dup ACK 10#1] 40241 → 7000 [ACK] Seq=2 Ack=2 Win=64256 Len=0 TSval=1993178762 TSecr=4157475697
同时vm-001
上的nstat
显示连接
$ nstat -as
...
MPTcpExtMPCapableSYNRX 1 0.0
MPTcpExtMPCapableACKRX 1 0.0
MPTcpExtMPJoinSynRx 1 0.0
MPTcpExtMPJoinAckRx 1 0.0
在没有安装linux-5.7头文件的机器上编译pm\u nl\u ctl.c
(您很可能没有安装)。您必须安装并使用标题
# In the kernel (or kernel-obj) dir do;
make INSTALL_HDR_PATH=(some-dir) headers_install
# Build;
gcc -o pm_nl_ctl -I(some-dir)/include pm_nl_ctl.c
流量数据仍然只使用第一个子流,如果禁用了上层数据路径,则不会发生故障转移。因此,对于一个有用的MPTCP还有更多的问题,但这是另一个问题。看起来树中的MPTCP是单流的