0

0

Linux网络带宽限制_tc配置实践解析【教程】

冷炫風刃

冷炫風刃

发布时间:2025-12-31 20:45:30

|

519人浏览过

|

来源于php中文网

原创

tc不是“开个开关就能限速”的工具,它依赖队列规则(qdisc)、类定义(class)和过滤器(filter)三层结构协同工作;未配对qdisc与class或遗漏filter将导致限速无效。

linux网络带宽限制_tc配置实践解析【教程】

直接说结论:tc 不是“开个开关就能限速”的工具,它依赖队列规则、类定义和过滤器三层结构协同工作;没配对 qdiscclass,或漏掉 filter,限速基本无效。

为什么tc加了规则却完全不生效?

最常见原因是把限速规则加在了错误的网络接口上,或者没指定出口方向(egress)。tc 只能控制本机发出的数据包(即 egress),无法限制流入(ingress)带宽——除非用 ifb 模块做重定向。

  • tc 默认只作用于 egress,想限下载得把流量先“拉”到虚拟接口 ifb0 上再限
  • 物理网卡如 eth0 不能直接挂 htb + sfq 复合 qdisc,必须先删掉默认的 pfifo_fast
    tc qdisc del dev eth0 root
  • 误把 rate 单位写成 mbit(应为 mbit 是合法的,但 mbpsMbps 会静默失败)
  • 没加载 sch_htbsch_sfq 内核模块(某些精简内核需手动 modprobe sch_htb sch_sfq

tc 限速时如何精准匹配某类流量?

filter + u32fw 匹配器。用 u32 写 IP/端口条件容易出错,推荐先用 iptables 打标记,再用 tc filterfw 标记——更稳定、易调试。

红墨
红墨

一站式小红书图文生成器

下载
  • 给目标流量打标记:
    iptables -t mangle -A OUTPUT -d 192.168.1.100 -j MARK --set-mark 1
  • htb 下挂 class 并绑定 filter:
    tc filter add dev eth0 parent 1: protocol ip u32 match ip dst 192.168.1.100 flowid 1:10
    u32 方式)
    或更推荐:
    tc filter add dev eth0 parent 1: protocol ip handle 1 fw flowid 1:10
  • handle 值必须和 iptables--set-mark 一致;flowid 必须对应已创建的 class ID(如 1:10

单台服务器限速多个客户端,tc 怎么避免互相抢占?

关键在 htbceilrate 配合,以及子类的 burst/cburst 设置。单纯设 rate 会导致突发流量被丢弃,体验卡顿;不设 ceil 则无法实现“保底+弹性”。

  • 根类设总带宽上限:
    tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
  • 每个客户端分一个子类,rate 是保障带宽,ceil 是峰值上限:
    tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10mbit ceil 20mbit burst 15k cburst 15k
  • 务必给每个 class 挂一个 sfq qdisc 做内部排队:
    tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
  • 漏掉 sfq,多个 TCP 流会因 ACK 拥塞而严重不均——这是实际部署中最常被忽略的一环

真正难的不是写对几条 tc 命令,而是理解每层 qdisc/class/filter 如何传递数据包;一旦某个 class 没绑 qdisc,或 filterflowid 指向不存在的 class,整个链路就静默失效——连日志都不会报错。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

989

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

50

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

207

2025.12.29

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

456

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

6

2025.12.06

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1345

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

698

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

293

2023.06.30

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号