方式一:tc命令
命令简介
tc 命令是 Linux 系统自带的一个网络流量控制工具,可以用于限制网络接口的带宽、延迟和丢包率等参数。
安装流程
sudo apt-get updatesudo apt-get install tc
详细使用说明
查看当前网络配置
首先,查看当前网络配置:
sudo tc qdisc show dev eth0
删除已有的限速配置
如果网络配置中已经有限速规则,则需先删除:
sudo tc qdisc del dev eth0 root
添加限速规则
添加一个限速规则,将网卡eth0
的出口带宽限制为1Mbps
:
sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
其中,各个参数含义如下:
-
dev eth0
:指定要限制带宽的网卡 -
root
:指定限速规则的根节点 -
tbf
:指定使用TBF算法进行限速 -
rate 1mbit
:指定带宽限制为1Mbps -
burst 32kbit
:指定最大突发流量为32kbit -
latency 400ms
:指定最大延迟为400ms
可以使用下面的命令检查限速规则是否生效。
tc qdisc show dev eth0
在实际使用中,可以根据需要调整各个参数的值,以达到更好的限速效果。
其中,TBF算法是Token Bucket Filter算法的缩写,它是一种基于令牌桶的算法,通过控制放置到令牌桶中的令牌数量,从而达到限制带宽的效果。常用的其他限速算法还包括Htb和Hfsc等。
tc命令常用的限速算法
tc命令可以使用多种算法进行限速。常用的算法包括:
1.TBF(Token Bucket Filter)算法 TBF算法是一种基于令牌桶的算法,通过一个令牌桶来控制流量的速度,从而达到限制带宽的效果。
-
优点:实现简单,延迟较小
-
缺点:突发流量的处理较差。
# tbf算法举例
sudo tc qdisc add dev bond0 root tbf rate 100mbit burst 32kbit latency 400ms
在这个例子中,使用TBF算法来限制bond0
网卡的出口带宽最高为100M
参数rate
表示限制带宽为100M,burst
表示最大突发流量为32kbit,latency
表示时延为400ms。
2.HTB(Hierarchical Token Bucket)算法 HTB算法是一种层次化的令牌桶算法,可以将带宽划分成多个层次,对每个层次进行单独的限速。
-
优点:可以实现复杂的带宽控制策略,
-
缺点:实现较为复杂。
# htb算法举例
sudo tc qdisc add dev bond0 root handle 1: htb default 1sudo tc class add dev bond0 parent 1: classid 1:1 htb rate 100mbit
在这个例子中,使用HTB算法来限制bond0
网卡的出口带宽最高为100M
。首先创建一个HTB队列,并设置默认队列为1号队列。然后创建一个1号类,将其父类设置为根队列1号,设置带宽为100M。
3.HFSC(Hierarchical Fair Service Curve)算法
HFSC算法是一种层次化的公平服务曲线算法,可以将带宽划分成多个层次,每个层次可以分配一个公平服务曲线,从而实现公平的带宽分配。
-
优点:可以实现复杂的带宽控制策略,实现较为简单
-
缺点:实时性较差
# hfsc算法举例
sudo tc qdisc add dev bond0 root handle 1: hfsc default 1sudo tc class add dev bond0 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
在这个例子中,使用HFSC算法来限制bond0
网卡的出口带宽最高为100M。首先创建一个HFSC队列,并设置默认队列为1号队列。然后创建一个1号类,将其父类设置为根队列1号,设置上行速率和下行速率为100M。
4.SFQ(Stochastic Fairness Queueing)算法 SFQ算法是一种随机公平队列算法,可以对每个连接分配一个队列,然后在每个队列中采用随机的方式对数据包进行处理,从而实现公平的带宽分配。
-
优点:实现简单,公平性较好,
-
缺点:对突发流量的处理较差。
# SFQ算法举例
sudo tc qdisc add dev bond0 root handle 1: sfq perturb 10sudo tc class add dev bond0 parent 1: classid 1:1 sfq quantum 1024bsudo tc filter add dev bond0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.1 flowid 1:1
在这个例子中,使用SFQ算法来限制bond0
网卡的出口带宽最高为100M。首先创建一个SFQ队列,并设置抖动时间为10。然后创建一个1号类,将其父类设置为根队列1号,设置量子大小为1024b。最后使用过滤器将IP地址为192.168.1.1的流量分配到1号类。
总的来说,不同的限速算法都有各自的优缺点,需要根据具体的限速需求选择合适的算法。一般来说,TBF算法适用于对单个流量进行简单的带宽限制,HTB算法适用于复杂的带宽控制策略,HFSC算法适用于对多个流量进行公平的带宽分配,SFQ算法适用于对多个连接进行公平的带宽分配。
方式二:wondershaper
命令简介
wondershaper 是一个 Linux 下的带宽限制工具,它可以方便地限制网络接口的带宽,支持限制下载速度和上传速度。wondershaper 命令的使用非常简单,只需要指定要限制带宽的网络接口和带宽限制值即可。
安装流程
sudo apt-get updatesudo apt-get install wondershaper
详细使用说明
使用方法
使用以下命令来限制出口带宽:
sudo wondershaper <interface> <downspeed> <upspeed>
-
其中,
<interface>
为要限制带宽的网络接口名称,<downspeed>
为下载带宽限制值,<upspeed>
为上传带宽限制值。带宽的单位可以是Kbps、Mbps或Gbps。
举例限制
例如,以下命令将eth0
网络接口的出口带宽限制为100Mbps
下载和50Mbps
上传:
sudo wondershaper eth0 100mbps 50mbps
取消带宽限制
如果要取消带宽限制,可以使用以下命令:
sudo wondershaper clear <interface>
其中,<interface>为要取消带宽限制的网络接口名称。例如,以下命令将取消eth0
网络接口的带宽限制:
sudo wondershaper clear eth0
方式三:pyshaper
命令简介
pyshaper是一个基于Python的Linux网络流量控制工具,可以用来限制网络流量的带宽、延迟、丢包等。pyshaper设置的网络流量控制限制是针对整个系统的,而不仅仅是当前shell。也就是说,一旦设置了流量限制,它将影响整个系统的网络流量。
安装流程
pip install pyshaper
使用方法
创建限制出口带宽策略
-
创建一个限制带宽为100Mbps的出口策略:
pyshaper --interface bond0 --add --direction egress --rate 100M
-
应用策略:
pyshaper --interface bond0 --apply
说明:以上示例中,各参数含义如下:
-
--interface bond0
:指定了要限制的网络接口 -
--add
:表示新增一个限制策略 -
--direction egress
:表示对出口流量进行限制 -
--rate 100M
:表示限制带宽为100Mbps -
--apply
:命令将策略应用到指定的网络接口上。
删除出口策略
-
如果要取消限制策略,可以使用--remove命令。 例如,要取消对bond0网卡的出口限速,可以使用以下命令:
pyshaper --interface bond0 --remove --direction egress
方式四:trickle
命令简介
Trickle 是一款 Linux 下的带宽控制工具,只能限制单个进程或应用程序的带宽,缺点是无法对整个系统进行全局带宽控制。
安装流程
sudo apt-get updatesudo apt-get install trickle
-
安装完成后,即可使用 trickle 命令。
详细使用说明
以下是 trickle 命令的一些常用选项和用法示例:
限制特定进程的带宽
trickle -d 50 -u 10 curl http://example.com
-
这个命令将使用 curl 命令下载 Example Domain,同时限制下载速度为 50KB/s,上传速度为 10KB/s。
限制所有进程的带宽:
trickle -d 100 -u 20 # 只会对当前 shell 中启动的进程生效
-
这个命令将限制所有进程的下载速度为 100KB/s,上传速度为 20KB/s,缺点是只会对当前 shell 中启动的进程生效,新启动的进程不会受到影响。
使用 trickle 启动应用程序
trickle -d 50 -u 10 firefox
-
这个命令将使用 Firefox 浏览器,并限制其下载速度为 50KB/s,上传速度为 10KB/s。
限制特定端口的带宽:
trickle -d 50 -u 10 -s -t 10 ssh
这个命令将限制 SSH 连接的下载速度为 50KB/s,上传速度为 10KB/s,同时打开一个新的终端并在其中启动 SSH 连接,限制时间为 10秒。