MPTCP高级配置
http://multipath-tcp.org/pmwiki.php/Users/ConfigureMPTCP
http://multipath-tcp.org/pmwiki.php/Users/Tools
本文引用了MPTCP Linux内核官网的MPTCP配置网页和工具网页,介绍了MPTCP成功部署以后子流分配策略更详细的配置方式以及协助自流分析的工具,由于之前已经将MPTCP的部署命名为“MPTCP的配置”了,本文就暂且命名为高级配置吧~
MPTCP高级配置#
确认MPTCP版本##
首先需要确认MPTCP是否部署成功以及我们所部署的MPTCP内核版本号
dmesg | grep MPTCP
如果没有成功部署的话,什么都不会显示。如果部署成功的话,会显示所部署的MPTCP内核版本,例如
[ 0.229701] MPTCP: Stable release v0.90.0
使用apt-get自动安装的内核版本号为v0.90.0
,其他版本用法配置方式大体相同,更多细节请移步官网。
设置系统控制变量(sysctl)##
执行以下命令设置系统控制变量(sysctl)
sysctl -w net.mptcp.[name of the variable]=[value]
括号里分别用变量名称和变量值替换,具体控制变量如下
-
net.mptcp.mptcp_enabled:顾名思义,该变量控制MPTCP开关,实现MPTCP与传统TCP之间的切换。变量值为0或1(默认为1)。
-
net.mptcp.mptcp_checksum:该变量控制MPTCP传输层中数据序列号校验和(DSS-checksum)的开关,DSS-checksum主要和传输的可靠性相关,只要通信对端中有一端开启,就会执行。变量值为0或1(默认为1)。
-
net.mptcp.mptcp_syn_retries:设置SYN的重传次数。SYN里包含了MP_CAPABLE-option字段,通过该控制变量,SYN将不会包含MP_CAPABLE-option字段,这是为了处理会丢弃含有未知TCP选项的SYN的网络中间件。变量默认值为3。
-
net.mptcp.mptcp_debug:调试MPTCP,控制是否打印debug报告文件。
-
net.mptcp.mptcp_path_manager:MPTCP路径管理,有四个不同的配置值,分别是 default/fullmesh/ndiffports/binder。default/ndiffports/fullmesh分别选择单路、多路或者全路进行传输。其中单路是指跟传统TCP状态一样还是用单一的TCP子流进行传输,多路是当前所有TCP子流中用户选择x条子流数进行传输,全路是指将当前所有可用的TCP子流应用到网络传输中。而binder参考了文献 Binder: a system to aggregate multiple internet gateways in community networks。
-
net.mptcp.mptcp_scheduler:MPTCP子流调度策略,有default/roundrobin两个选项。default优先选择RTT较低的子流直到拥塞窗口满,roundrobin采用轮询策略。
拥塞策略的配置方式为
sysctl net.ipv4.tcp_congestion_control=lia/olia/wVegas/balia
上述的系统控制变量都是以配置文件的形式存在的,也可以以管理员权限直接修改配置文件中的参数,配置文件的目录为
/proc/sys/net/mptcp
MPTCP相关工具#
由于工程需要,我们需要关闭某个接口或者将其设置为备用模式,官网正好提供了IP路由拓展功能,该扩展功能需要使用apt-get安装
apt-get update
apt-get dist-upgrade
然后就可以执行接口的控制命令啦
ip link set dev eth0 multipath on
ip link set dev eth0 multipath off
ip link set dev eth0 multipath backup
-
off命令是在MPTCP层面上的,并不是完全关闭该接口,而是控制MPTCP不去试图使用该网卡,换言之,当路由表指向该接口时,该接口还是会被使用的。全局的开启/关闭/查看接口命令为
sudo ifconfig eth0 down/up //开关 ifconfig //查看
-
backup命令就是将该接口设置为备用模式,只有其他接口不可用时才会使用该接口。
-
更多信息执行
ip link help
查看。