
查看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表示要操作的网卡为eth0root表示为网卡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表示系统将为该类别确保带宽40mbitceil 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