当前位置: 首页 > news >正文

在 Linux 系统中,tc(Traffic Control) QoS 常用命令简介

在 Linux 系统中,tc(Traffic Control)命令是一个强大的工具,用于配置和管理网络流量控制。以下是 tc 命令的常用功能和基本用法:

1. 查看当前队列规则

使用以下命令查看指定网络接口上的队列规则:

tc qdisc show dev eth0

这里的 eth0 是网络接口名称,可以替换为实际的接口名称[1][2]。


2. 添加队列规则

添加队列规则以管理流量,例如使用 HTB(Hierarchical Token Bucket):

tc qdisc add dev eth0 root handle 1: htb default 11
  • root 表示这是根队列。
  • handle 1: 定义了队列的句柄。
  • htb 指定调度算法为 HTB。
  • default 11 表示未匹配流量的默认分类[1][2][3]。

3. 删除队列规则

删除某个网络接口上的根队列规则:

tc qdisc del dev eth0 root

这将清除所有与该接口相关的流量控制规则[1][3]。


4. 创建类

为队列创建分类规则,并设置带宽限制:

tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbps
  • parent 1: 指定父级队列(如根队列)。
  • classid 1:1 定义类的 ID。
  • rate 10mbps 设置带宽限制为 10 Mbps[1][2][4]。

5. 添加过滤器

过滤器用于将数据包分配到特定的类。例如,将目标端口为 80 的流量分配到类 1:1

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 80 0xffff flowid 1:1
  • protocol ip 指定协议类型。
  • match ip dport 80 匹配目标端口为 80 的数据包。
  • flowid 1:1 将匹配的数据包分配到类 1:1[1][2].

6. 模拟网络延迟和丢包

设置延迟:

tc qdisc add dev eth0 root netem delay 100ms
  • 为所有流量添加 100 毫秒延迟。

设置丢包率:

tc qdisc add dev eth0 root netem loss 10%
  • 模拟丢包率为 10%[3][6].

7. 列出和监控策略

列出已有策略:

tc -s qdisc ls dev eth0

实时监控流量和状态:

tc -s monitor

这些命令可以帮助管理员查看当前配置和实时流量信息[3][4].


8. 示例:限制带宽

以下是一个完整的带宽限制示例,限制网卡 eth0 的带宽为 500 Kbps:

# 添加根队列规则
tc qdisc add dev eth0 root handle 1: tbf rate 500Kbit latency 50ms burst 15kb# 查看配置
tc -s qdisc ls dev eth0# 删除规则(解除限制)
tc qdisc del dev eth0 root

这里使用了 TBF(Token Bucket Filter)算法,适合简单的速率控制[3].


通过以上命令,您可以灵活地使用 tc 来实现带宽限制、流量分类、延迟模拟等功能,以满足不同的网络管理需求。

Citations:
[1] https://my.oschina.net/emacs_8759915/blog/17197682
[2] https://www.cnblogs.com/lushichao/p/17477558.html
[3] https://blog.csdn.net/wsuyixing/article/details/125812823
[4] https://blog.csdn.net/mimiduck/article/details/111184980
[5] https://catbro666.github.io/posts/357ad3ec/
[6] https://www.cnblogs.com/sunsky303/p/14250452.html
[7] https://www.strickland.cloud/post/2
[8] https://arthurchiao.github.io/blog/lartc-qdisc-zh/

http://www.lryc.cn/news/538044.html

相关文章:

  • 如何画产品功能图、结构图
  • 4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享
  • SpringBoot速成(12)文章分类P15-P19
  • C++17中的clamp函数
  • 配置Open-R1,评测第三方蒸馏模型的性能1
  • Chrome插件开发流程
  • 物联网行业通识:从入门到深度解析
  • 【做一个微信小程序】校园事件页面实现
  • C++基础系列【14】继承与多态
  • DeepSeek-R1 大模型本地部署指南
  • 在conda环境下,安装Pytorch和CUDA
  • Java里int和Integer的区别?
  • 【第13章:自监督学习与少样本学习—13.4 自监督学习与少样本学习的未来研究方向与挑战】
  • 【NLP】文本预处理
  • deepseek r1从零搭建本地知识库10:嵌入模型和知识库建设
  • Linux-文件IO
  • 3d pose 学习笔记2025
  • LC-随机链表的复制、排序链表、合并K个升序链表、LRU缓存
  • 静态页面在安卓端可以正常显示,但是在ios打开这个页面就需要刷新才能显示全图片
  • 四元数如何用于 3D 旋转(代替欧拉角和旋转矩阵)【ESP32指向鼠标】
  • JavaScript 内置对象-日期对象
  • 本地大模型编程实战(19)RAG(Retrieval Augmented Generation,检索增强生成)(3)
  • DeepSeek与ChatGPT:AI语言模型的全面对决
  • 2024年年终总结
  • 利用 Valgrind 检测 C++ 内存泄露
  • Python中的HTTP客户端库:httpx与request | python小知识
  • 【Python】Python入门基础——环境搭建
  • 2025 pwn_A_childs_dream
  • 面试题整理:操作系统
  • 构建未来教育的基石:智慧校园与信息的重要性