tc 介绍

发布于:2025-08-06 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

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 M

Transaction Summary
=========================================================================================================================================================
Install  1 Package

Total 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 transaction
  Preparing        :                                                                                                                                 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 丢包已实现


网站公告

今日签到

点亮在社区的每一天
去签到