CentOS下如何彻底删除tc设置的限速?

在 CentOS 系统中,tc(Traffic Control)是一个功能强大的工具,用于配置 Linux 内核的数据包调度、流量分类和流量控制,网络管理员常用它来模拟网络延迟、丢包、限制带宽等,以进行网络性能测试或实现服务质量,当测试完成或策略变更时,如何干净、彻底地移除这些限制,恢复网络接口的原始状态,同样是一项重要的技能,本文将详细介绍在 CentOS 中取消 tc 限速的完整流程、相关原理及注意事项。

CentOS下如何彻底删除tc设置的限速?

理解 tc 命令的核心组件

在着手取消限速之前,简要了解 tc 的工作原理有助于我们更深刻地理解后续操作。tc 的配置主要围绕三个核心概念:

  1. 队列规定:这是流量控制的基础,它决定了数据包如何被发送,最常见的 qdiscpfifo_fast(默认,先进先出)、tbf(Token Bucket Filter,令牌桶过滤器,用于限速)和 htb(Hierarchical Token Bucket,分层令牌桶,用于复杂的流量分类和限速),限速规则通常就是通过添加特定的 qdisc 来实现的。
  2. 类别:当使用像 htb 这样的 qdisc 时,可以创建不同的 class,每个类别可以代表一种流量,并为它分配特定的带宽限制,这使得流量控制更加精细化。
  3. 过滤器filter 负责对数据包进行分类,根据匹配规则(如源/目的 IP、端口等)将数据包分发到特定的 class 中。

一个典型的限速配置,就是在网络接口(如 eth0)上附加一个根 qdisc(如 htb),在其下创建多个 class,并用 filter 将不同的流量导入这些 class,取消限速的本质就是移除这些被附加的 qdiscclassfilter

取消 tc 限速的详细步骤

取消限速的过程遵循“先查看,后删除,再验证”的原则,确保操作准确无误。

检查当前的 tc 规则

在执行任何删除操作之前,首先需要查看当前系统上已经配置了哪些 tc 规则,使用以下命令可以列出指定网络接口上的 qdiscclass

# 查看所有网络接口的 qdisc
tc qdisc show
# 查看特定网络接口(eth0)的 qdisc
tc qdisc show dev eth0
# 查看特定网络接口的 class
tc class show dev eth0

如果接口上存在限速规则,你可能会看到类似 htbtbfnetem(用于模拟延迟和丢包)等非默认的 qdisc 名称,默认情况下,接口应该显示 qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

删除 tc 规则

删除 tc 规则最直接、最有效的方法是删除根 qdisc,当你删除一个 qdisc 时,隶属于它的所有 classfilter 都会被自动一并删除。

核心命令是 tc qdisc del

# 删除指定网络接口(eth0)的根 qdisc
# 这是清除所有 tc 规则的最常用方法
sudo tc qdisc del dev eth0 root

执行此命令后,eth0 接口上所有由 tc 创建的流量控制规则都会被清除,网络接口将恢复到内核默认的 pfifo_fast 队列。

CentOS下如何彻底删除tc设置的限速?

如果只想删除特定的 qdisc 而非根 qdisc,可以指定其 handle(句柄)或 parent(父级),但这种情况较为少见,在绝大多数场景中,删除根 qdisc 是最推荐的“一键清理”操作。

验证规则是否已清除

删除操作完成后,必须再次执行步骤一中的查看命令,以确认规则是否已被成功移除。

tc qdisc show dev eth0

输出结果应该恢复到默认状态,不再包含 htbtbf 等自定义 qdisc 信息,如果输出为空或显示默认的 pfifo_fast,则表示取消限速操作成功。

实践示例

假设我们之前为 eth0 接口设置了上行带宽为 10Mbps 的限制。

设置限速(为演示目的):

sudo tc qdisc add dev eth0 root handle 1: htb default 30
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
sudo tc class add dev eth0 parent 1:1 classid 1:30 htb rate 10mbit ceil 10mbit

此时执行 tc qdisc show dev eth0 会看到 htb 相关的配置。

取消限速:

sudo tc qdisc del dev eth0 root

验证结果:

CentOS下如何彻底删除tc设置的限速?

tc qdisc show dev eth0
# 输出将恢复为默认的 pfifo_fast,或类似信息

重要注意事项与最佳实践

注意事项 详细说明
权限要求 所有 tc 命令(包括 showdel)都需要 root 权限,请使用 sudo 或切换到 root 用户执行。
接口名称 确保在命令中指定正确的网络接口名称(如 eth0, ens33, eno1 等),可以通过 ip addr 命令查看。
规则持久性 通过 tc 命令设置的规则是临时的,系统重启后会自动失效,如果限速规则是通过开机脚本(如 /etc/rc.d/rc.local)或 systemd 服务设置的,仅使用 tc del 命令只能临时清除,重启后规则会再次生效,要永久取消,必须找到并禁用或删除这些持久化配置。
影响范围 删除根 qdisc 会影响该接口上所有的流量控制策略,请确保你了解当前配置,避免误删其他重要的 QoS 规则。

相关问答 (FAQs)

问题1:我已经使用 tc qdisc del 命令删除了限速规则,为什么重启服务器后限速又出现了?

解答: 这是因为您的 tc 限速规则被配置为开机自动加载。tc 命令本身所做的修改是临时的,不会在重启后保存,要彻底解决这个问题,您需要检查系统中设置规则自动加载的地方,常见的位置包括:

  • /etc/rc.d/rc.local 文件
  • /etc/sysconfig/network-scripts/ifcfg-<interface_name> 文件(某些高级配置)
  • 自定义的 systemd 服务文件

您需要找到添加 tc 规则的那一行命令或脚本,将其注释掉(在行首加 )或直接删除,然后保存文件,这样,在下次系统启动时,限速规则就不会被重新应用了。

问题2:除了使用 tc qdisc show,还有没有其他方法可以直观地验证限速是否已经被取消?

解答: 有的,查看 tc 规则是最直接的方式,但您也可以通过实际的网络速度测试来验证,最常用的工具是 iperf3

  1. 在网络中另一台服务器上(或本机作为服务端)启动 iperf3 服务端模式:iperf3 -s
  2. 在您刚刚取消限速的 CentOS 服务器上,以客户端模式连接到服务端进行测试:iperf3 -c <server_ip>

测试结果会显示当前的带宽吞吐量,如果限速已被成功取消,您应该能测得接近于网卡或网络链路理论最大值的速度,如果速度仍然被限制在您之前设定的值(10Mbps),则说明 tc 规则可能未被完全清除,或者存在其他网络瓶颈。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-04 02:40
下一篇 2024-07-18 17:30

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信