http://www.cnblogs.com/zhuting/p/5675925.html
本周调研了一下多径TCP(MPTCP),几经周折终于从小白到将MPTCP协议配置到Linux系统中,并成功地通过MPTCP协议访问了支持MPTCP协议的检测网站。
本文主要介绍
- 实验环境
- 无线网卡驱动的安装
- MPTCP的安装
- 路由配置
实验环境
镜像下载地址,获取安装镜像选择Ubuntu14.04.4(amd64,LiveCD)
无线网卡驱动的安装
进行MPTCP协议的测试必然要用到双网卡,因此选择购买USB无线网卡作为第二网卡。最初的选择为“360随身wifi3”,经查询所用的芯片为MTK7603U,MTK官网没有给出该芯片Linux下的驱动,网上也没有相关的资源。因此从硬件屋将USB无线网卡替换成了“TP-LINK TL-WN823N”,WN823N的芯片型号为RTL8192EU,下面提供一个较为简单的驱动安装方法
sudo add-apt-repository ppa:hanipouspilot/rtlwif
sudo apt-get update
sudo apt-get install rtl8192eu-dkms
重启系统,即可在网络连接中看到第二张网卡,可以使用ifconfig命令可以查看两张网卡的详细信息。
MPTCP的安装
本部分主要参考以下三个链接
http://www.multipath-tcp.org/
http://blog.csdn.net/xiaodoubao124/article/details/50150677
http://blog.sina.com.cn/s/blog_758723000101ealy.html
MPTCP的安装方式有两种:获得源码并自行编译内核,使用apt-get命令自动安装。愿意熟悉一下内核编译,DIY一下内核的可以选择前者,而后者可以自动安装,操作十分简单。
获得MPTCP源码并自行编译内核
首先提前安装好依赖环境
sudo apt-get update
sudo apt-get install libncurses5-dev
apt-get install build-essential
获取MPTCP源码
cd /usr/src
git clone --depth=1 git://github.com/multipath-tcp/mptcp.git
cd mptcp
配置编译内核
sudo make menuconfig
配置内核时需要注意一下几点:
- 选择编译时:按y直接编译到内核中,条目前会显示为<*>或[*];按n不编译到内核中,条目前显示为<>或[ ];按m以模块的方式编译,之后使用需要加载该模块才可以,条目前显示为或[M].
- 由于我们是64位系统,选中第一个64-bit kernel,32位的话就不要选中。
- 进入networking support->networking options,检查一下IPv6模块,选择编译进内核或者不编译,不要选择以模块方式编译,否则看不到后面的MPTCP选项
- 找到networking support->networking options->TCP/IP networking->MPTCP protocol(MPTCP),按y选择编译。
- 找到Networking support->Networking options->IP: advanced router->IP: policy routing,选择编译。
- 找到Networking support->Networking options->MPTCP protocol,编译。这样一些拥塞控制算法才会出现在TCP:advanced congestion control里。
- 找到MPTCP: advanced path-manager control,编译。进到里面,编译MPTCP Full-Mesh Path-Manager和MPTCP ndiff-ports。下面的Default MPTCP Path-Manager 选择Full mesh。
- 找到Networking support->Networking options->TCP: advanced congestion control,进入。这里是拥塞控制算法,需要哪些就选择哪些,*编译到内核,M是编译成模块。这里选择CUBIC ,Vegas,Veno,LIA(MPTCP Link Increase),Olia (MPTCP Opportunistic Linked Increase),wVegas,Balia。选择默认的算法。
- 保存配置,退出。
编译MPTCP内核
cd /usr/src/mptcp
sudo make
编译并安装模块
sudo make modules_install
安装
sudo make install
重启系统,这里官网包括引用的两篇博客都没有说清楚,重启以后要进入新编译好的内核中,在开机的时候选择ubuntu高级选项,找到刚刚编译好的内核,选择进入,如果没有ubuntu高级选项的界面,在重启进入系统的时候按住shift键,界面就会出现。
使用apt-get命令自动安装
MPTCP官网维护了一个公开的apt库来对MPTCP内核进行自动安装和升级。
首先安装他们的gpg-apt-key
wget -q -O - http://multipath-tcp.org/mptcp.gpg.key | sudo apt-key add -
修改apt库的配置文件
sudo gedit /etc/apt/sources.list.d/mptcp.list
在末尾添加
deb http://multipath-tcp.org/repos/apt/debian trusty main
不同版本的系统添加的内容不太一样,其他系统参考以下内容:
On a Debian for the newest release:
deb http://multipath-tcp.org/repos/apt/debian jessie main
On a Ubuntu Trusty (14.04) for the old v0.90-release:
deb http://multipath-tcp.org/repos/apt/debian trusty main
On a Ubuntu Saucy (13.10) for the old v0.88-release:
deb http://multipath-tcp.org/repos/apt/debian saucy main
On a Ubuntu Raring (13.04) for the old v0.87-release:
deb http://multipath-tcp.org/repos/apt/debian raring main
On a Ubuntu Quantal (12.10) for the old v0.86-release:
deb http://multipath-tcp.org/repos/apt/debian quantal main
安装MPTCP
sudo apt-get update
sudo apt-get install linux-mptcp
重启。
同上,这里官网包括引用的两篇博客都没有说清楚,重启以后要进入新编译好的内核中,在开机的时候选择ubuntu高级选项,找到刚刚编译好的内核,选择进入,如果没有ubuntu高级选项的界面,在重启进入系统的时候按住shift键,界面就会出现。
路由配置
路由配置可以手动配置也可以自动配置,这里介绍自动配置方法。
编辑mptcp_up
cd /etc/network/if-up.d
sudo gedit mptcp_up
粘贴以下内容,保存退出(下载地址)
#!/bin/sh
# A script for setting up routing tables for MPTCP in the N950.
# Copy this script into /etc/network/if-up.d/
set -e
env > /etc/network/if_up_env
if [ "$IFACE" = lo -o "$MODE" != start ]; then
exit 0
fi
if [ -z $DEVICE_IFACE ]; then
exit 0
fi
# FIRST, make a table-alias
if [ `grep $DEVICE_IFACE /etc/iproute2/rt_tables | wc -l` -eq 0 ]; then
NUM=`cat /etc/iproute2/rt_tables | wc -l`
echo "$NUM $DEVICE_IFACE" >> /etc/iproute2/rt_tables
fi
if [ $DHCP4_IP_ADDRESS ]; then
SUBNET=`echo $IP4_ADDRESS_0 | cut -d -f 1 | cut -d / -f 2`
ip route add table $DEVICE_IFACE to $DHCP4_NETWORK_NUMBER/$SUBNET dev $DEVICE_IFACE scope link
ip route add table $DEVICE_IFACE default via $DHCP4_ROUTERS dev $DEVICE_IFACE
ip rule add from $DHCP4_IP_ADDRESS table $DEVICE_IFACE
else
# PPP-interface
IPADDR=`echo $IP4_ADDRESS_0 | cut -d -f 1 | cut -d / -f 1`
ip route add table $DEVICE_IFACE default dev $DEVICE_IP_IFACE scope link
ip rule add from $IPADDR table $DEVICE_IFACE
fi
设置文件可执行
sudo chmod a+x mptcp_up
编辑mptcp_down
cd /etc/network/if-post-down.d
sudo gedit mptcp_down
粘贴以下内容,保存退出(下载地址)
#!/bin/sh
# A script for setting up routing tables for MPTCP in the N950.
# Copy this script into /etc/network/if-post-down.d/
set -e
env > /etc/network/if_down_env
if [ "$IFACE" = lo -o "$MODE" != stop ]; then
exit 0
fi
ip rule del table $DEVICE_IFACE
ip route flush table $DEVICE_IFACE
设置文件可执行
sudo chmod a+x mptcp_down
上述两个脚本根据环境变量配置路由表,绝大多数情况下可以正常工作。还可以参考手动配置方法。
至此,MPTCP已经在本机上配置完成,可以通过网站检测自己是否在使用MPTCP:检测网站。