tc 介绍
目录
1.背景
2. tc介绍
3. tc 丢包
1.背景
需要使用tc 构造丢包场景,注意tc 丢包不能确定丢弃的是否是payload 数据包,有可能丢弃 ack 包。
2. tc介绍
1. 无法正常使用
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# tc qdisc add dev swift1f0 root netem delay 500ms loss 40%
Error: Specified qdisc kind is unknown.
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# tc -h
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }tc [-force] -batch filename
where OBJECT := { qdisc | class | filter | chain |action | monitor | exec }OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[aw] |-o[neline] | -j[son] | -p[retty] | -c[olor]-b[atch] [filename] | -n[etns] name | -N[umeric] |-nm | -nam[es] | { -cf | -conf } path-br[ief] }
[root@pool-100-1-1-18 /]# 2. 修复此问题
# 加载模块
sudo modprobe sch_netem# 再次检查是否加载成功
lsmod | grep sch_netem[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# lsmod |grep sch_netem # 加载模块
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# tc qdisc show
qdisc noqueue 0: dev lo root refcnt 2
qdisc fq_codel 0: dev enp4s0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64
qdisc fq_codel 0: dev swift1f0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64
qdisc fq_codel 0: dev swift1f1 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64
qdisc noqueue 0: dev virbr0 root refcnt 2
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# modprobe sch_netem # 再次检查是否加载成功
modprobe: FATAL: Module sch_netem not found in directory /lib/modules/4.18.0-553.6.1.el8.x86_64
[root@pool-100-1-1-18 /]# # 安装 kernel-modules-extra(包含 sch_netem)
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# yum install kernel-modules-extra
Repository extras is listed more than once in the configuration
Last metadata expiration check: 0:02:56 ago on Tue 05 Aug 2025 12:00:48 AM CST.
Dependencies resolved.
=========================================================================================================================================================Package Architecture Version Repository Size
=========================================================================================================================================================
Installing:kernel-modules-extra x86_64 4.18.0-553.6.1.el8 baseos 11 MTransaction Summary
=========================================================================================================================================================
Install 1 PackageTotal download size: 11 M
Installed size: 687 k
Is this ok [y/N]: y
Downloading Packages:
kernel-modules-extra-4.18.0-553.6.1.el8.x86_64.rpm 2.8 MB/s | 11 MB 00:04
---------------------------------------------------------------------------------------------------------------------------------------------------------
Total 2.8 MB/s | 11 MB 00:04
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transactionPreparing : 1/1 Installing : kernel-modules-extra-4.18.0-553.6.1.el8.x86_64 1/1 Running scriptlet: kernel-modules-extra-4.18.0-553.6.1.el8.x86_64 1/1 Verifying : kernel-modules-extra-4.18.0-553.6.1.el8.x86_64 1/1 Installed:kernel-modules-extra-4.18.0-553.6.1.el8.x86_64 Complete!
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# modprobe sch_netem # 加载模块
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# lsmod |grep sch_netem # 再次检查是否加载成功
sch_netem 24576 0
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
到此已加载成功,可以使用tc
3. tc 丢包
1. 查看当前规则[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# tc qdisc show dev swift1f0
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64
[root@pool-100-1-1-18 /]# 2.丢包规则
2.1 固定间隔丢包
# tc qdisc add dev <网卡名> root netem gap 10 delay 5000ms # 每10个包丢1个,其余延迟5s[root@pool-100-1-1-18 /]# tc qdisc add dev swift1f0 root netem delay 500ms loss 50%
[root@pool-100-1-1-18 /]# 3. 查看当前规则
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# tc qdisc show dev swift1f0
qdisc netem 8009: root refcnt 2 limit 1000 delay 500ms loss 50%
[root@pool-100-1-1-18 /]# 4. 查看统计信息
# 发包后查看统计信息[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# tc -s qdisc show dev swift1f0
qdisc netem 8009: root refcnt 2 limit 1000 delay 500ms loss 50%Sent 168 bytes 4 pkt (dropped 3, overlimits 0 requeues 0) backlog 0b 0p requeues 0
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# 5. 删除丢包规则
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# tc qdisc del dev swift1f0 root
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]# tc qdisc show dev swift1f0
qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn drop_batch 64
[root@pool-100-1-1-18 /]#
[root@pool-100-1-1-18 /]#
到此tc 丢包已实现