尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

[网络] [iproute2] tc: Linux 带宽限制(Token Bucket Filter 和 HTB)使用指南

[网络] [iproute2] tc: Linux 带宽限制(Token Bucket Filter 和 HTB)使用指南
📅 发布时间:2026/6/20 6:01:38
[网络] [iproute2] tc: Linux 带宽限制(Token Bucket Filter 和 HTB)使用指南

参考:

  • iproute2: 网络管理利器
  • iproute2和流量控制(ip和tc工具)---iproute2/ip/tc/qdisc实现Linux下的QoS控制
  • DeepSeek
  • Grok

01 背景

1.1 功能介绍

在 Linux 系统中使用 tc(Traffic Control)命令结合 TBF(Token Bucket Filter)和 HTB(Hierarchical Token Bucket)模块限制网络带宽,包括上传、下载、特定 IP 和特定端口的带宽控制。所有示例以网络接口 eth0 为例,适用于测试网络性能或模拟特定网络环境。

1.2 前提

  • 权限:所有 tc 命令需以 root 权限执行(使用 sudo)。
  • 工具:确保安装 iproute2 包(包含 tc 命令)。
    安装步骤请参考: [网络] [iproute2] tc命令:Linux网络异常模拟(Network Emulation, netem)指南 的 第二章:前提条件

02 限制上传带宽(使用 TBF)

命令:

sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms

功能:
限制 eth0 的出口带宽(上传)为 1Mbps,允许 32Kb 的瞬时突发流量,最大排队延迟 400ms。
适用于需要平滑流量的场景(如限制上传带宽),同时允许短暂突发。

参数说明:

  • tbf:令牌桶过滤器(Token Bucket Filter),通过令牌控制数据发送速率。系统以固定速率生成令牌,每个令牌允许发送一定数据,未拿到令牌的数据包会被延迟或丢弃。
  • rate 1mbit:长期平均带宽限制为 1Mbps。
  • burst 32kbit:令牌桶最大容量,允许瞬时突发流量至 32Kb。
  • latency 400ms:数据包最大排队延迟,超时则丢弃。较小的 latency 减少延迟但可能增加丢包,较大的值增加延迟但提高吞吐量。

验证

# 查看规则
tc qdisc show dev eth0
# 测试上传带宽(需外部服务器运行 iperf)
iperf -c <server_ip>

清除规则:

sudo tc qdisc del dev eth0 root

03 限制下载带宽(使用 IFB 模块)

命令:

# 加载 ifb 模块
sudo modprobe ifb
# 启动虚拟网卡 ifb0
sudo ip link set dev ifb0 up
# 将 eth0 的入口流量重定向到 ifb0
sudo tc qdisc add dev eth0 handle ffff: ingress
sudo tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
# 限制 ifb0 的出口带宽(即 eth0 的下载带宽)
sudo tc qdisc add dev ifb0 root tbf rate 1mbit burst 20kbit latency 500ms

功能:
通过 IFB(Intermediate Functional Block)虚拟网卡限制 eth0 的入口带宽(下载)为 1Mbps,允许 20Kb 突发流量,最大延迟 500ms。
适用于测试网络拥塞或模拟低速下载环境。

参数说明:

  • ifb:虚拟网卡模块,将入口流量重定向为出口流量以便限制。
  • ingress:捕获 eth0 的入口流量。
  • u32 match u32 0 0:匹配所有 IP 流量。
  • action mirred egress redirect dev ifb0:将入口流量重定向到 ifb0 的出口。
  • tbf rate 1mbit burst 20kbit latency 500ms:在 ifb0 上限制出口带宽为 1Mbps。

验证:

# 检查 ifb 模块
lsmod | grep ifb
# 查看规则
tc qdisc show dev eth0
tc qdisc show dev ifb0
# 测试下载带宽
iperf -c <server_ip>

清除规则:

sudo tc qdisc del dev eth0 ingress
sudo tc qdisc del dev ifb0 root
sudo ip link set dev ifb0 down

注意:

  1. tc 无法直接限制入口流量,需通过 IFB 将下载流量转为出口流量处理。
  2. 确保 ifb 模块已加载(modprobe ifb)。
  3. 效果为模拟限速(可能引入延迟或丢包),而非物理层带宽控制。

04 限制特定 IP 带宽(使用 HTB)

命令:

# 创建 HTB 根队列
sudo tc qdisc add dev eth0 root handle 1: htb default 10
# 添加父类(总带宽 10Mbps)
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit
# 添加子类(限制目标 IP 带宽为 2Mbps,可借用至 3Mbps)
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 3mbit
# 添加过滤器(匹配目标 IP 192.168.1.100)
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.100 flowid 1:10

功能:
使用 HTB(Hierarchical Token Bucket)限制 eth0 上目标 IP(192.168.1.100)的出口带宽为 2Mbps,允许借用至 3Mbps。
适用于对特定设备或 IP 的流量进行精细控制。

参数说明:

  • htb:分层令牌桶算法,支持分层带宽分配。
  • handle 1::根队列标识符(主句柄为 1)。
  • default 10:未匹配规则的流量默认进入子类 1:10。
  • classid 1:1:父类标识符,限制总带宽为 10Mbps。
  • classid 1:10:子类标识符,限制目标 IP 带宽。
  • rate 2mbit:保证带宽为 2Mbps。
  • ceil 3mbit:允许借用带宽至 3Mbps(当网络空闲时)。
  • u32 match ip dst 192.168.1.100:匹配目标 IP 为 192.168.1.100 的流量。
  • flowid 1:10:将匹配流量导向子类 1:10。

验证:

tc qdisc show dev eth0
tc class show dev eth0
tc filter show dev eth0
iperf -c 192.168.1.100

清除规则:

sudo tc qdisc del dev eth0 root

05 限制特定端口带宽(使用 HTB)

命令:

# 清除现有规则
sudo tc qdisc del dev eth0 root
# 创建 HTB 根队列
sudo tc qdisc add dev eth0 root handle 1: htb default 20
# 创建父类(总带宽 100Mbps)
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
# 创建子类(限制 HTTP 端口 80 为 1Mbps)
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
# 添加过滤器(匹配目标端口 80)
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
# 添加默认子类(其他流量 50Mbps,可借用至 100Mbps)
sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 50mbit ceil 100mbit

功能:
使用 HTB 限制 eth0 上目标端口(HTTP 端口 80)的出口带宽为 1Mbps,其他流量保证 50Mbps(可借用至 100Mbps)。
适用于限制特定服务(如 Web 服务)的带宽。

参数说明:

  • htb default 20:未匹配规则的流量进入子类 1:20。
  • classid 1:1:父类,设置总带宽为 100Mbps。
  • classid 1:10:子类,限制端口 80 带宽为 1Mbps。
  • classid 1:20:默认子类,其他流量保证 50Mbps。
  • match ip dport 80 0xffff:匹配目标端口 80(16 位精确掩码)。
  • protocol ip:匹配 IPv4 流量(IPv6 需改为 protocol ipv6)。

验证:

tc qdisc show dev eth0
tc class show dev eth0
tc filter show dev eth0
curl http://<server_ip>

清除规则:

sudo tc qdisc del dev eth0 root

相关新闻

  • newDay14
  • Linux 下将程序打包为安装包
  • 低代码如何成为企业数字化转型的加速器

最新新闻

  • 深入解析MC9S12VR SCI模块:从UART到红外与LIN的嵌入式通信实战
  • 2026科技前沿EMBA客观测评与科学选型指南
  • FanControl终极指南:Windows风扇控制软件完整解决方案
  • 如何免费为Windows 10打造macOS级别的动态桌面体验
  • RS08单线调试接口BDC:原理、协议与嵌入式开发实战
  • DSS-GAN:基于Mamba的高效生成对抗网络架构解析

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号