mptcp 路径管理中的fullmesh和 ndiffports以及subflows
来源于文章“On the Path Management of Multi-Path TCP in Internet Scenarios based on the NORNET Testbed”(Wang K, Dreibholz T, Zhou X, et al. On the Path Management of Multi-path TCP in Internet Scenarios Based on the NorNet Testbed[C]// IEEE, International Conference on Advanced Information NETWORKING and Applications. IEEE, 2017:1-8.)
In Linux MPTCP [15], the most state-of-the-art implementation of MPTCP, this decision is based on the configured path manager. Four path managers are currently provided by Linux
MPTCP:
1) “default”: This path manager actually does not do anything. It will neither announce different IP addresses nor initiate the creation of new subflows. However, it will accept the passive creation of new subflows.
2) “fullmesh”: As the name already says, this path manager establishes the full mesh [16] of subflows.
3) “ndiffports”: Instead of using multiple IP addresses, this path manager always uses the same IP-address pair for its paths. However, each path uses different source and destination TCP ports. This path manager is intended to circumvent bandwidth-limiting middleboxes by mimicking different TCP connections.
4) “binder”: This path manager [23] is using Loose Source Routing [24] to distribute the packets of subflows. Using packet relays, it allows for applications on enduser devices to benefit from gateway aggregation without requiring any modifications.
此外,官网(http://multipath-tcp.org/pmwiki.php/Users/ConfigureMPTCP)也指出:
Configure the path-manager:
We have a modular structure for the path-manager. At compile-time you can enable the path-managers through "MPTCP: advanced path-manager control" and select for example the full-mesh path-manager. If you do not select a path-manager, the host will not trigger the creation of new subflows, nor advertise alternative IP-addresses through the ADD_ADDR-option.
At run-time, to select one of the compiled path-managers just set the sysctl net.mptcp.mptcp_path_manager. You have the choice between:
'default': This path-manager actually does not do anything. The host won't announce different IP-addresses nor initiate the creation of new subflows. However, it will accept the passive creation of new subflows.
'fullmesh': It will create a full-mesh of subflows among all available subflows. Since v0.90 it is possible to create multiple subflows for each pair of IP-addresses. Just set /sys/module/mptcp_fullmesh/parameters/num_subflows to a value > 1.
New in v0.92: If you want to re-create subflows after a timeout (e.g., if the NAT-mapping was lost due to idle-time), you can set /sys/module/mptcp_fullmesh/parameters/create_on_err to 1.
'ndiffports': This one will create X subflows across the same pair of IP-addresses, modifying the source-port. To control the number of subflows (X), you can set the sysfs /sys/module/mptcp_ndiffports/parameters/num_subflows to a value > 1.
'binder': The path-manager using Loose Source Routing from the paper Binder: a system to aggregate multiple internet gateways in community networks.
通过跑实验证明,fullmesh构建网络同论文图2所示,ndiffports构建网络如下图:
(按照指定的IP地址对传输数据)
而num_subflows的数目是指一个IP对的子流数目,可以取任何大于等于1的值。用实验测试,取到了20,仍然是可以的。
--------------------------------------------------
追加更新:发了这个文后,突然看到一篇文章,对路径管理解释的更清晰,文章为:王琨, 周星, 周峰,等. 基于MPTCP路径管理算法性能分析[J]. 海南大学学报(自然科学版)自然科学版, 2017, 35(3).