Linux操作系统中限制网络带宽速率的使用方法

2021-08-27 11:06:08 浏览数 (2)

在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

0 人点赞