在Linux中限制一个网络接口的速率的方法
这里介绍的控制带宽资源的方式是在每一个接口上限制带宽。
wondershaper 实际上是一个 shell 脚本,它使用 tc 来定义流量调整命令,使用 QoS 来处理特定的网络接口。外发流量通过放在不同优先级的队列中,达到限制传出流量速率的目的;而传入流量通过丢包的方式来达到速率限制的目的。
其实, wondershaper 的既定目标不仅仅是对一个接口增加其带宽上限;当批量下载或上传正在进行时,wondershaper 还试图去保持互动性会话如 SSH 的低延迟。同样的,它还会控制批量上传(例如 Dropbox 的同步)不会使得下载“窒息”,反之亦然。即 上传和下载 互不影响。
安装 wondershaper
在 Fdora 或 CentOS/RHEL (带有 EPEL 软件仓库) 中安装 wondershaper(版本到 1.2 ):
代码语言:javascript复制# yum install wondershaper
经二次开发的最新版本( 最新为 1.4 ),直接下载github上的代码就可以了:
代码语言:javascript复制# git clone https://github.com/magnific0/wondershaper.git# cd wondershaper
wondershaper 的使用使用帮助:
代码语言:javascript复制# ./wondershaper -hUSAGE: ./wondershaper [-hcs] [-a <adapter>] [-d <rate>] [-u <rate>]Limit the bandwidth of an adapterOPTIONS: -h Show this message -a <adapter> Set the adpter -d <rate> Set maximum download rate (in Kbps) and/or -u <rate> Set maximum upload rate (in Kbps) -p Use presets in /etc/conf.d/wondershaper.conf -c Clear the limits from adapter -s Show the current status of adapter -v Show the current versionMODES: wondershaper -a <adapter> -d <rate> -u <rate> wondershaper -c -a <adapter> wondershaper -s -a <adapter>EXAMPLES: wondershaper -a eth0 -d 1024 -u 512 wondershaper -a eth0 -u 512 wondershaper -c -a eth0
参数说明:
- -a :指定要限制的网卡名称或者接口名称
- -d :最大下载速率,单位:Kbps 。Kbps 即 Kb/s,p 是 peer 的意思。1KB/s=8Kb/s。1MB/s=1024KB/s。
- -u :最大上传速率,单位:Kbps 。
- -p :使用 /etc/conf.d/wondershaper.conf 的配置
- -c :清空所有规则,不再做任何限制
- -s :显示接口的当前状态
使用 ip addr show
查看要限制带宽的网卡名称,老的机器可能没有这个命令,改用 ifconfig
查看。
例子: 将 eth0 的最大下载/上传带宽分别设定为 3072 kbps 和 2048 kbps
代码语言:javascript复制# ./wondershaper -a eth0 -d 3072 -u 2048
清空规则,不再限制带宽
代码语言:javascript复制# ./wondershaper -a eth0 -c
这里的规则,重启服务器后就会失效,可以把命令写进 /etc/rc.local
,开机自启动。
测试网速
利用 speedtest-cli 来测试网速。
安装 speedtest-cli
speedtest-cli 是一个用 Python 编写的轻量级的命令行工具,用于测试带宽。Python2.4 的环境下均可运行。它是基于 speedtest.net
的基础架构来测量网络的上/下行速率。
pip/easy_install 方式安装:
代码语言:javascript复制# pip install speedtest-cli或# easy_install speedtest-cli
Github 方式安装:
代码语言:javascript复制# pip install git https://github.com/sivel/speedtest-cli.git或# git clone https://github.com/sivel/speedtest-cli.git# python speedtest-cli/setup.py install
直接下载脚本:
代码语言:javascript复制# wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py# chmod x speedtest-cli或# curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py# chmod x speedtest-cli
使用 speedtest-cli 测试网速使用speedtest-cli命令也很简单,它不需要任何参数即可工作。
代码语言:javascript复制# speedtest-cliRetrieving speedtest.net configuration...Testing from China Telecom Guangdong (183.xxx.xxx.215)...Retrieving speedtest.net server list...Selecting best server based on ping...Hosted by ShenZhen Telecom (Shenzhen) [0.00 km]: 2.856 msTesting download speed................................................................................Download: 28.35 Mbit/sTesting upload speed................................................................................................Upload: 11.97 Mbit/s
结果解释:
- 183.xxx.xxx.215 :本服务器IP
- Testing from China Telecom Guangdong :ISP,这里是广东电信
- Hosted by ShenZhen Telecom (Shenzhen) :服务器所在地址
- [0.00 km] :本服务器和speedtest测试服务器地理位置之间距离
输入这个命令后,它会自动发现离你最近的 speedtest.net 服务器(地理距离),然后打印出测试的网络上/下行速率。
可以对比 wondershaper 配置前后的速率,验证限速是否生效。
speedtest-cli 常用命令详解:
- –list :根据距离显示 speedtest.net 的测试服务器列表
- –server=SERVER :指定测试服务器列表中id的服务器来测试
- –share :分享测试结果,会在speedtest.net 网站上生成网速测试结果的图片
- –bytes :上传下载的带宽显示,用 bytes 代替 bits ,即 Mbyte/s 代替 Mbit/s 。换算关系: 1Mbyte/s = 8Mbit/s