mininet中的网络实验,数据包走的是内核协议栈。这样得出的结果,好处就是实际网络协议栈的性能。缺点就是,要验证新的想法,需要修改内核协议栈。而且关于内核中的数据,比如tcp的拥塞窗口数据,可以参考[4,5],能否用在mptcp上就不知道了。
[4]tcpprobe, observe the TCP flow with kprobes
http://perthcharles.github.io/2014/12/19/tcp-probe-intro/
[5]PROPORTIONAL RATE REDUCTION FOR TCP
首先检查内核有没有开启MPTCP协议
sudo sysctl -a | grep mptcp
如下成功:
确认MPTCP内核版本号:
dmesg | grep MPTCP
部署不成功的话,什么都不显示;成功的话,参考示例:
设置系统控制变量(sysctl):
sysctl -w net.mptcp.[name of the wariable]=[value]
执行上述命令设置系统控制变量(sysctl),括号里分别用变量名称和变量值替换,具体如下:
- 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。https://dl.acm.org/citation.cfm?id=2502894
- net.mptcp.mptcp_scheduler:MPTCP子流调度策略,有default/roundrobin两个选项。default优先选择RTT较低的子流直到拥塞窗口满,roundrobin(RR)采用轮询策略。
1. 例如临时关闭mptcp:
2.例如切换调度器为roundrobin
拥塞策略的配置方式为:
sysctl net.ipv4.tcp_congestion_control=lia/olia/wVegas/balia
上述的系统控制变量都是以配置文件的形式存在的,也可以以管理员权限直接修改配置文件中的参数,配置文件的目录为:
/proc/sys/net/mptcp