tc命令使用总结

查看queue状态

查看所有网卡 ​​tc qdisc ls

查看指定网卡 tc qdisc show dev enp0s3​

delay延迟 tc qdisc add dev enp0s3 root netem delay 1000ms​

命令详解
qdisc: 类型为 queuing discipline,不懂的请先查询一下基本概念
add: add a new rule
dev eth0: rules will be applied on device eth0
root: modify the outbound traffic scheduler (aka known as the egress qdisc)
netem: use the network emulator to emulate a WAN property
delay: the network property that is modified
1000ms: introduce delay of 1000 ms

执行前

执行后

delay最后还是有两个参数

命令1.增加振幅

delay不是一个固定的值,而是在后面这个参数的增加减少幅度内变动

tc qdisc add dev enp0s3 root netem delay 1000ms 500ms​

可以看到delay的幅度在500(1000-500)和1500(1000+500)之间了。

命令2. uniform variation with correlation value

tc qdisc add dev enp0s3 root netem delay 1000ms 500ms 20%​

使振幅根据uniform variation with correlation value发生变化。

命令3. distribution normal正态分布变化

tc qdisc add dev enp0s3 root netem delay 1000ms 500ms distribution normal​

Packet Loss丢包 tc qdisc add dev enp0s3 root netem loss 50%​

Packet Corruption 包损 tc qdisc add dev enp0s3 root netem corrupt 50%​

通过PING看不出corruption,包的传送都没有问题的

Packet Duplicates 重复包 tc qdisc add dev enp0s3 root netem duplicate 50%​

通过PING看不出Duplicates,包的传送都没有问题的

Bandwidth limit限制带宽 tc qdisc add dev enp0s3 root tbf rate 1mbit burst 32kbit latency 400ms

参数说明:
tbf: use the token buffer filter to manipulate traffic rates
rate: sustained maximum rate
burst: maximum allowed burst
latency: packets with higher latency get dropped

其他操作

删除 tc qdisc del dev enp0s3 root​

修改 tc qdisc change dev enp0s3 root netem delay 1000ms​

通常,要对网卡进行流量控制的配置,需要进行如下的步骤:

1、为网卡配置一个队列

2、在该队列上建立分类

3、根据需要建立子队列和子分类

4、为每个分类建立过滤器

下面,将以HTB队列为主,结合需求来讲述TC的使用。假设eth0出口有100Mbit/s的带宽,分配给WWW 、E-mail和Telnet三种数据流量,其中分配给WWW的带宽为40Mbit/s,分配给Email的带宽为40Mbit/s,分配给Telnet的带宽为20Mbit/s。

需要注意的是, 在TC 中使用下列的缩写表示相应的带宽:

  • Kbps:kiIobytes per second,即 “千字节每秒”
  • Mbps:megabytes per second,即 “兆字节每秒 ”
  • Kbit:kilobits per second,即 “千比特每秒”
  • Mbit:megabits per second,即 “兆比特每秒”

有关队列的TC命令的一般形式:

# tc qdisc [add|change|replace|link] dev DEV [parent qdisk-id|root][handle qdisc-id] qdisc[qdisc specific parameters]

 1、创建HTB队列

为网卡etho配置一个HTB队列的tc命令:

# tc qdisc add dev eth0 root handle 1: htb default 11

  • add 表示要添加
  • dev eth0 表示要操作的网卡为eth0
  • root 表示为网卡eth0添加的是一个根队列
  • handle 1: 表示队列的句柄为1:
  • htb 表示要添加的队列为HTB队列
  • default 11 是htb特有的队列参数,意思是所有未分类的流量都将分配给类别1:11

2、为根队列创建相应的类别

有关类别的TC一般命令形式:

# tc class [add|change|replace] dev DEV parent qdisc-id [classid class-id] qdisc [qdisc specific parameters]

可以使用以下3个命令为根队列1创建三个类别,分别是1:11、1:12、1:13

tc class add dev eth0 parent 1: classid 1:11 htb rate 40mbit ceil 40mbit

tc class add dev eth0 parent 1: classid 1:12 htb rate 40mbit ceil 40mbit

tc class add dev eth0 parent 1: classid 1:13 htb rate 40mbit ceil 20mbit

各项的含义:

  • parent 1: 表示类别的父亲为根队列1:
  • classid 1:11 表示创建一个标识为1:11的类别
  • rate 40mbit 表示系统将为该类别确保带宽40mbit
  • ceil 40mbit 表示该类别的最高可占用带宽为40mbi

3、为各个类别设置过滤器

有关过滤器的tc一般命令:

# tc filter [add|change|replace] dev DEV [parent qdisc-id|root] protocol protocol prio priority filtertype [filtertype specific parameters] flowid flow-id

由于需要将WWW、E-mail、Telnet三种流量分配到三个类别,即上述1:11、1:12和1:13,因此,需要创建三个过滤器,如下面的三个命令:

# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:11
# tc filter add dev eth0 prtocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:12
# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 23 oxffff flowid 1:13

各项的含义:

  • protocol ip 表示该过滤器应该检查报文分组的协议字段
  • prio 1 表示它们对报文处理的优先级是相同的,对于不同优先级的过滤器,系统将按照从小到大的优先级顺序来执行过滤器,对于相同的优先级,系统将按照命令的先后顺序执行
  • 这几个过滤器还用到了u32选择器(命令中u32后面的部分)来匹配不同的数据流。以第一个命令为例,判断的是dport字段,如果该字段与Oxffff进行与操作的结果是80,则 flowid 1:11 表示将把该数据流分配给类别1:11

Linux系统中有多个命令可用于控制带宽,下面将介绍常用的几个命令。

Linux系统中有多个命令可用于控制带宽,下面将介绍常用的几个命令。

1. tc命令:tc命令是Linux系统中最常用的带宽控制工具之一,它可以用于控制网络流量的速率、延迟、丢包等。下面是tc命令的一些常用选项和用法:

– tc qdisc add:添加一个队列规则
– tc class add:添加一个分类规则
– tc filter add:添加一个过滤规则
– tc qdisc del:删除一个队列规则
– tc class del:删除一个分类规则
– tc filter del:删除一个过滤规则
– tc qdisc show:显示当前的队列规则
– tc class show:显示当前的分类规则
– tc filter show:显示当前的过滤规则

2. wondershaper命令:wondershaper是一个小型的脚本工具,可以方便地控制网络带宽。通过wondershaper命令,可以设置网络的最大传输速率、最大接收速率,以及设置延迟和丢包。

– wondershaper eth0 1024 256:限制eth0接口的最大传输速率为1024kbps,最大接收速率为256kbps
– wondershaper clear eth0:清除eth0接口上的带宽限制

3. trickle命令:trickle命令可以控制进程的带宽使用,通过限制进程的上传和下载速度,来达到控制带宽的目的。

– trickle -d 1024 -u 256 :限制命令的下载速度为1024kbps,上传速度为256kbps

4. htb工具:htb是Linux系统中一个非常强大的带宽控制工具,它可以用于创建复杂的带宽控制策略。

– htb init:初始化htb工具
– htb rate 1Gbit:设置根类别的速率为1Gbps
– htb class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit:为eth0接口添加一个类别,限制带宽为100Mbps
– htb class change dev eth0 parent 1: classid 1:1 htb rate 200Mbit:修改eth0接口的类别,将带宽限制改为200Mbps
– htb delete:删除所有的htb规则

5. iptables命令:iptables是Linux系统中用于配置网络防火墙的工具,它也可以用于限制网络带宽。

– iptables -A INPUT -m limit –limit 10/s -j ACCEPT:设置输入流量的带宽限制为每秒10个包
– iptables -A OUTPUT -m limit –limit 10/s -j ACCEPT:设置输出流量的带宽限制为每秒10个包
– iptables -A INPUT -m limit –limit 10/s -j DROP:设置输入流量的带宽限制为每秒10个包,超过限制则丢弃
– iptables -A OUTPUT -m limit –limit 10/s -j DROP:设置输出流量的带宽限制为每秒10个包,超过限制则丢弃

以上是常用的几个Linux带宽控制命令。通过使用这些命令,可以灵活地控制网络的带宽使用,满足不同的需求。

WonderShaper 安装与使用指南

WonderShaper 安装与使用指南

项目地址:https://gitcode.com/gh_mirrors/wo/wondershaper

1. 项目介绍

WonderShaper 是一个脚本工具,由 Bert Hubert 等人开发,用于限制网络适配器的带宽。它允许用户自定义下载和上传速率,适用于家庭网络中的流量管理或者测试不同网络条件对应用程序性能的影响。WonderShaper 遵循 GPL-2.0 许可协议。

2. 项目快速启动

步骤一:克隆仓库

首先,打开终端并克隆 WonderShaper 的 Git 仓库:

git clone https://github.com/magnific0/wondershaper.gitcd wondershaper

步骤二:安装

在终端中运行以下命令以安装 WonderShaper:

sudo make install

步骤三:设置开机启动

要让 WonderShaper 在系统启动时自动运行,执行:

sudo systemctl enable wondershaper.servicesudo systemctl start wondershaper.service

步骤四:使用 WonderShaper

查看帮助信息:

/wondershaper -h

设置网络接口的带宽限制,例如限制 eth0 接口的下载速率为 1Mbit/s,上传速率为 512Kbit/s:

sudo /wondershaper -a eth0 -d 1024 -u 512

要清除已设置的限制:

sudo /wondershaper -c -a eth0

3. 应用案例和最佳实践

  • 优化家庭网络:通过分配不同设备的网络带宽,确保关键任务如视频会议、在线学习或游戏的稳定性。
  • 模拟低速网络环境:测试你的应用在慢速连接上的表现,以优化用户体验。
  • 故障排查:临时限速某个接口,以确定是否与带宽相关的问题有关。

最佳实践建议在调整带宽限制前记录原始配置,并定期检查 WonderShaper 的设置,以保持其有效性。

4. 典型生态项目

虽然 WonderShaper 是一个独立工具,但它常与其他网络管理和监控工具一起使用,比如:

  • iftop:实时显示网络流量信息。
  • nethogs:按进程显示网络带宽使用情况。
  • collectdPrometheus:收集系统性能数据,包括网络利用率,用于长期监控和分析。

结合这些工具,你可以更全面地管理和监控网络资源。


以上即为 WonderShaper 的安装与使用指南,希望对你有所帮助。在实践中如有疑问或发现任何问题,请查阅官方仓库的 Issue 或者向社区寻求支持。