mptcp的maintainer之一Geliang Tang tanggeliang@kylinos.cn是我们麒麟软件的,最近在调研mptcp和smb、nfs结合的可能性,顺便记录一下。
qemu命令行启动虚拟机时,多个网卡的启动参数如下:
-net tap \
\
-net nic,model=virtio,macaddr=00:11:22:33:44:06 \ -net nic,model=virtio,macaddr=00:11:22:33:44:56
启动后,在虚拟机中用ifconfig -a
可以看到另一个网卡ens3
,debian使用以下命令:
echo -e "auto ens3\niface ens3 inet dhcp" >> /etc/network/interfaces
systemctl restart networking
qemu命令行启动虚拟机可以参考《内核开发环境》。
编译内核时打开配置CONFIG_MPTCP
、CONFIG_MPTCP_IPV6
和CONFIG_INET_MPTCP_DIAG
。
检查系统配置:
# 也就是 /proc/sys/net/mptcp/enabled 文件的值
sysctl net.mptcp.enabled # 检查
sysctl -w net.mptcp.enabled=1 # 如果上面命令检查没开,就执行这条命令
安装相关软件:
dnf install mptcpd -y
路径管理器:
/proc/sys/net/mptcp/pm_type # 0: 内核, 1: 用户空间
数据包调度器:
/proc/sys/net/mptcp/available_schedulers
/proc/sys/net/mptcp/scheduler
已经编译完的二进程程序使用mptcp:
mptcpize run <command>
mptcpize enable <systemd unit>
我的环境如下:
server:
ens2: 192.168.53.209
ens3: 192.168.53.37
client:
ens2: 192.168.53.210
ens3: 192.168.53.38
server端操作:
ss -iaM # 查看socket状态
# State Recv-Q Send-Q Local Address:Port Peer Address:Port
# ESTAB 0 0 192.168.53.37:9734 192.168.53.1:36632
# LISTEN 0 5 0.0.0.0:9734 0.0.0.0:*
ip mptcp endpoint show # 列出主机上活动 IP 地址的标识符
# 192.168.53.37 id 1 subflow dev ens3
# 192.168.53.209 id 2 subflow dev ens2
client端操作:
ss -iaM # 查看socket状态
# State Recv-Q Send-Q Local Address:Port Peer Address:Port
# ESTAB 0 0 192.168.53.210:36632 192.168.53.37:9734
ip mptcp endpoint show # 列出主机上活动 IP 地址的标识符
# 192.168.53.38 id 1 subflow dev ens3
# 192.168.53.210 id 2 subflow dev ens2
ip mptcp limits # 查看限制
# add_addr_accepted 0 subflows 2
ip mptcp limits set subflow 2
ip mptcp limits set add_addr_accepted 2
# 删除和添加路径
ip mptcp endpoint del id 1 # ens3
ip mptcp endpoint del id 2 # 全给删除了
ip mptcp endpoint add 192.168.53.38 dev ens3 subflow
ip mptcp endpoint add 192.168.53.210 dev ens2 subflow
测试步骤:
make
insmod ./kernel-socket-server.ko
insmod ./kernel-socket-client.ko