tc工具实战:5分钟设置带宽上限,从此告别网络拥堵

admin 2026-04-24 04:51:18 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍Linux流量控制工具TC的实战应用,重点讲解如何使用TBF队列规则设置出口带宽上限至100Mbps,并进阶介绍HTB分层管理方法。文档提供完整配置命令、参数说明及监控调优建议,同时强调配置持久化和权限注意事项,帮助用户实现精细化的网络流量管控。 综合评分: 78 文章分类: 技术标准,解决方案,安全工具,安全运营,其他


cover_image

tc工具实战:5分钟设置带宽上限,从此告别网络拥堵

原创

刘军军 刘军军

运维星火燎原

2026年4月24日 00:16 山西

在小说阅读器读本章

去阅读

今天我要聊的,就是Linux内核里那个让无数新手望而生畏,但一旦学会就能让你“起死回生”的神器——TC。

别被它的名字吓到了,它全称叫 Traffic Control。这玩意儿绝不仅仅是个简单的“限速”开关,它更像是你服务器网卡上的“空中交通管制塔”。

跟那些在应用层“打补丁”式的限速方案不同,TC 工作在内核网络栈的最底层。这意味着什么?意味着你可以像做外科手术一样,用极高的效率、极细的粒度,对数据包进行整形、调度和过滤。

我知道,一提到 TC 的队列规则、分类和过滤器,很多人头都大了。但别怕,今天咱们不整那些晦涩的理论。我将直接带你进入5个最真实的“救火”现场,手把手教你如何把这头“流量猛兽”关进笼子里,让你的带宽分配从此由你说了算!

方案选择

对于设置出口总带宽上限,最适合的队列规则是 TBF (Token Bucket Filter),它能有效地限制带宽并平滑流量。

01

配置步骤

1. 查看当前网络接口

ip link show

2. 清除现有规则(如果有)

tc qdisc del dev eth0 root 2>/dev/null || true

3. 设置带宽上限

# 假设服务器出口接口为 eth0,设置总带宽上限为 100Mbps
tc qdisc add dev eth0 root tbf rate 100mbit burst 1mbit latency 40ms

参数说明:

  • rate:限制的带宽上限(这里设置为 100Mbps)
  • burst:允许的突发流量(通常设置为 1-10% 的带宽)
  • latency:数据包在队列中的最大延迟时间

4. 验证配置

tc qdisc show dev eth0

02

高级配置:分层带宽管理

如果需要更精细的带宽管理,可以使用 HTB (Hierarchical Token Bucket):

# 创建根队列
tc qdisc add dev eth0 root handle 1: htb default 10

# 创建主分类,设置总带宽上限
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit

# 创建默认子类
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 90mbit ceil 100mbit

# 为关键服务预留带宽
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 10mbit ceil 20mbit

03

监控与调优

监控带宽使用

# 使用 iftop 监控实时带宽
iftop -i eth0

# 或使用 nload
nload eth0

调优建议

  1. 根据实际需求调整带宽值:根据服务器的实际带宽和业务需求设置合理的上限
  2. 测试不同的 burst 值:根据流量特性调整突发值,平衡延迟和吞吐量
  3. 监控网络性能:设置后观察服务器响应时间和网络稳定性
  4. 逐步调整:从保守值开始,逐步调整到最佳配置

04

注意事项

  1. 权限要求tc 命令需要 root 权限执行
  2. 接口选择:确保选择正确的出口网络接口
  3. 服务影响:设置带宽上限可能会影响服务器的网络性能,需在低峰期进行配置
  4. 配置持久化:上述配置在重启后会丢失,需要添加到启动脚本中
  5. 合理设置:带宽上限应略低于实际物理带宽,预留一定余量

05

配置持久化

将配置命令添加到网络启动脚本中,例如:

  • Debian/Ubuntu: /etc/network/interfaces
  • CentOS/RHEL: /etc/sysconfig/network-scripts/ifcfg-eth0

或创建专门的启动脚本:

#!/bin/bash
# /etc/init.d/bandwidth-limit

case "$1"in
    start)
        tc qdisc add dev eth0 root tbf rate 100mbit burst 1mbit latency 40ms
        ;;
    stop)
        tc qdisc del dev eth0 root 2>/dev/null || true
        ;;
    *)
        echo"Usage: $0 {start|stop}"
        exit1
        ;;
esac

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:运维星火燎原 刘军军 刘军军《tc工具实战:5分钟设置带宽上限,从此告别网络拥堵》

评论:0   参与:  0