用h5开发的网站模板下载,创造网站,制作网站,网站上传在空间哪里1.前言
在前文《链路聚合技术——多路径传输Multipath TCP(MPTCP)快速实践》中我们使用mptcpize run命令实现了两个节点间通信使用MPTCP协议进行传输#xff0c;并实现了传输速率的聚合。
实际应用中更推荐原生支持mptcp的应用#xff0c;在MPTCP官网中可以看到如TCPDump、…1.前言
在前文《链路聚合技术——多路径传输Multipath TCP(MPTCP)快速实践》中我们使用mptcpize run命令实现了两个节点间通信使用MPTCP协议进行传输并实现了传输速率的聚合。
实际应用中更推荐原生支持mptcp的应用在MPTCP官网中可以看到如TCPDump、VLC、CURL这些软件的较新版本均已支持MPTCP。
本文将以技术实践落地的角度出发记录一个具有更高普适性的MPTCP通信场景。 2.目标拓扑 目标让左右两边的设备通信时使用MPTCP通信
应用场景
企业多线组网链路冗余与加速家庭宽带多线路上网链路聚合路由器……
3.网关基础配置
本例中左右网关节点均为ubuntu22.04
3.1 系统开启mptcp
左右网络的边界节点均开启mptcp此部分参考上一篇文章3.0章节。
确保mptcp已开启
3.2 系统开启ip转发
网关节点均启用IPV4转发 echo 1 /proc/sys/net/ipv4/ip_forward 3.2 透明代理软件安装 在拓扑图中的两个网关节点均安装支持MPTCP的透明代理软件。这里选择已屏蔽敏感词的新版——已屏蔽敏感词-rust。
安装命令
sudo apt update
sudo apt install snapd
sudo snap install 已屏蔽敏感词-rust为方便使用再配置环境变量 vi /etc/profile export PATH$PATH:/snap/已屏蔽敏感词-rust/1512/bin安装后使用ssservice -V命令判断是否安装成功
4.gateway节点配置
4.1 server端tun配置
拓扑图中的gw2作为server端ip地址为192.168.3.222
在server端创建配置文件存放目录
mkdir -p /root/ss cd /root/ss生成一个密钥 ssservice genkey -m “chacha20-ietf-poly1305” 如yWroi1LpQpLmK84mGTpo6yb6rZlHCDhjIlbIuvez2A #创建并编辑配置文件 vi /root/ss/ss_server.json {fast_open: true,method: chacha20-ietf-poly1305,mptcp: true,no_delay: true,password: yWroi1LpQpLmK84mGTpo6yb6rZlHCDhjIlbIuvez2A,reuse_port: true,server: 0.0.0.0,server_port: 65101
}运行ssserver进入等待连接状态 ssserver -c /root/ss/ss_server.json 4.2 client端tun配置
拓扑图中的gw1作为client端有以下网口信息
eth1ip192.168.3.101eth2ip192.168.3.102eth0ip192.168.140.3
192.168.3.0/24网段用于隧道通信192.168.140.0/24网段用于左侧内网通信使用
4.2.1 ss-redir配置
与server端类似的创建配置文件存放目录
mkdir -p /root/ss cd /root/ss#创建并编辑配置文件 vi /root/ss/ss_redir.json {fast_open: true,ipv6_first: true,local_address: 0.0.0.0,local_port: 1100,method: chacha20-ietf-poly1305,mode: tcp_and_udp,mptcp: true,no_delay: true,password: yWroi1LpQpLmK84mGTpo6yb6rZlHCDhjIlbIuvez2A,protocol: redir,reuse_port: true,keep_alive: 15,server: 192.168.3.222,server_port: 65101,use_syslog: true
}其中的server和server_port填入gw2节点的信息mptcp设为true以开启mptcpprotocol设为redir以使用透明代理方式接入对端gw2节点
之后启动ss-redir sslocal -c /root/ss/ss_redir.json 如需要快速关闭ss-redir执行 kill -9 $(pidof sslocal) /dev/null 4.2.2 iptables配置
透明代理正常工作需要搭配系统的Netfilter规则使用iptables命令对Netfilter规则进行管理。
配置内容如下
# Create new chain
iptables -t nat -N MYMPTCPS
iptables -t mangle -N MYMPTCPS
# Ignore your MYMPTCPS servers addresses
# Its very IMPORTANT, just be careful.
iptables -t nat -A MYMPTCPS -d 192.168.3.222 -j RETURN# Ignore LANs and any other addresses youd like to bypass the proxy
# See Wikipedia and RFC5735 for full list of reserved networks.
# See ashi009/bestroutetb for a highly optimized CHN route list.
iptables -t nat -A MYMPTCPS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A MYMPTCPS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A MYMPTCPS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A MYMPTCPS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A MYMPTCPS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A MYMPTCPS -d 192.168.110.0/24 -j RETURN
iptables -t nat -A MYMPTCPS -d 192.168.14.0/24 -j RETURN
iptables -t nat -A MYMPTCPS -d 192.168.200.0/24 -j RETURN
iptables -t nat -A MYMPTCPS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A MYMPTCPS -d 240.0.0.0/4 -j RETURN# Anything else should be redirected to MYMPTCPSs local port
iptables -t nat -A MYMPTCPS -p tcp -j REDIRECT --to-ports 1100# Apply the rules
iptables -t nat -A PREROUTING -p tcp -j MYMPTCPS
iptables -t mangle -A PREROUTING -j MYMPTCPS 配置项参考[ss-redir requires netfilter’s NAT function]
使用iptables -t nat -L命令查看当前已有的nat规则
如需要删除上面iptables的配置项执行以下命令
# iptables -t mangle -D MYMPTCPS -p udp -m mark --mark 0x1/0x1 -j TPROXY --on-ip 127.0.0.1 --on-port 1100 /dev/null
iptables -t nat -D MYMPTCPS -p tcp -j REDIRECT --to-ports 1100 /dev/null iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT此时两台gateway的配置就完成了。
5.主机接入验证
当拓扑图左侧的主机通过gw1节点接入网络后就可以使用mptcp协议访问对端网络了。
5.1 网口模拟限速
对gw1节点模拟限速配置参考client端限速配置(模拟限速)部分。在gw1节点执行如下命令
# 删除任何现有的qdisc
sudo tc qdisc del dev enp1s0 root
# 查看当前qdisc策略
tc qdisc show dev enp1s0
# 添加策略
sudo tc qdisc add dev enp1s0 root handle 1: htb default 12
# 设置带宽300bit
sudo tc class add dev enp1s0 parent 1:1 classid 1:12 htb rate 300mbit ceil 300mbit
# 查看qdisc策略
sudo tc qdisc show dev enp1s0
# 查看class策略
sudo tc class show dev enp1s0
# 删除任何现有的qdisc
sudo tc qdisc del dev enp7s0 root
# 查看当前qdisc策略
tc qdisc show dev enp7s0
# 添加策略
sudo tc qdisc add dev enp7s0 root handle 1: htb default 12
# 设置带宽300bit
sudo tc class add dev enp7s0 parent 1:1 classid 1:12 htb rate 200mbit ceil 200mbit
# 查看qdisc策略
sudo tc qdisc show dev enp7s0
# 查看class策略
sudo tc class show dev enp7s0其中
enp1s0为192.168.3.101的网口限速为300mbitenp7s0为192.168.3.102的网口限速为200mbit 使用bmon -b也可以看到对应的限速策略信息
5.2 host-pc配置
如接入主机的ip地址为192.168.140.2在这台主机上配置访问对应网络的网关地址为gw1节点的ip
linux主机时添加静态路由命令 route add -net 192.168.3.0/24 gw 192.168.140.3 windows主机时添加静态路由命令 route ADD 192.168.3.0 MASK 255.255.255.0 192.168.140.3 使用route print |findstr 192.168.3.0命令验证
5.2 发包验证
在拓扑图右侧的任意主机启动一个http服务如服务主机的ip地址为192.168.3.221运行一个SpeedTest测速软件 sudo docker run -e MODEstandalone -e WEBPORT8999 -e restartalways --nethost ghcr.io/librespeed/speedtest 5.2.1 单路径验证
在gw1节点输入ip mptcp endpoint输出为空此时会根据系统路由走单路径发送数据包。
测速结果如下 与所配置的限速基本一致200Mbit/s
5.2.2 双路径验证
在gw1节点添加子链路
ip mptcp endpoint add dev enp1s0 192.168.3.101 subflow
ip mptcp endpoint add dev enp8s0 192.168.3.102 subflow此时mptcp中就有2条可用的链路了 再次测速 速率平均达到了463Mbit/s但存在一定的网络抖动。
不过从结果来看也速率确实进行了叠加200300500Mbit/s
此时用netstat -anlp|grep 65101观察当前网络连接情况也可以看到gw-2节点与gw-1节点建立了多个tcp连接且所连接的目的地址中有192.168.3.101和192.168.3.102。 6.网络稳定性优化
从上面的测试结果可以看出当前网络的最大传输速率还存在一定的波动。 当链路聚合后最大上行速率为390~520Mbit/s有抖动的情况。
6.1 拥塞控制算法查看
在两个gw节点使用如下命令进行查看 ss -nti ‘( dport :65101 )’ 从图片结果可知当前使用的tcp拥塞控制算法为cubic。 sysctl net.ipv4.tcp_available_congestion_control 6.2 开启BBR
为了提升数据通信时的稳定性将系统中的拥塞控制算法修改为BRR。
BBR的开启方式需要linux的内核版本大于4.9。 由于我这里使用的系统为ubuntu22.04其默认内核版本已支持bbr则直接修改配置即可。
echo net.core.default_qdiscfq /etc/sysctl.conf
echo net.ipv4.tcp_congestion_controlbbr /etc/sysctl.confsysctl -p 之后再进行拉流测试并观察ss -nti ( dport :65101 )监控数据
可以看到此时的tcp拥塞控制算法已使用bbr。 且从测试结果可以看出TCP的拥塞控制算法调整为BBR后带宽的平均速率也有了一定的提高。
7.总结
通过对前文《链路聚合技术——多路径传输Multipath TCP(MPTCP)快速实践》和本文的综合应用相信对于MPTCP的配置和实践有了一定的了解体验下来后也会感悟到MPTCP的应用领域还是比较多的。
与LACP与BOND相比MPTCP在数据传输时不会因子路径的增加而新开辟单独的TCP连接这种底层协议级的链路聚合也具有更好的性能表现。在开源产品方面基于MPTCP的链路聚合路由器OpenMPTCProuter也获得了不错的好评。
愿网络越来越快越来越稳~