在 CentOS 系统中,tc
(Traffic Control)是一个功能强大的工具,用于配置 Linux 内核的数据包调度、流量分类和流量控制,网络管理员常用它来模拟网络延迟、丢包、限制带宽等,以进行网络性能测试或实现服务质量,当测试完成或策略变更时,如何干净、彻底地移除这些限制,恢复网络接口的原始状态,同样是一项重要的技能,本文将详细介绍在 CentOS 中取消 tc
限速的完整流程、相关原理及注意事项。
理解 tc 命令的核心组件
在着手取消限速之前,简要了解 tc
的工作原理有助于我们更深刻地理解后续操作。tc
的配置主要围绕三个核心概念:
- 队列规定:这是流量控制的基础,它决定了数据包如何被发送,最常见的
qdisc
有pfifo_fast
(默认,先进先出)、tbf
(Token Bucket Filter,令牌桶过滤器,用于限速)和htb
(Hierarchical Token Bucket,分层令牌桶,用于复杂的流量分类和限速),限速规则通常就是通过添加特定的qdisc
来实现的。 - 类别:当使用像
htb
这样的qdisc
时,可以创建不同的class
,每个类别可以代表一种流量,并为它分配特定的带宽限制,这使得流量控制更加精细化。 - 过滤器:
filter
负责对数据包进行分类,根据匹配规则(如源/目的 IP、端口等)将数据包分发到特定的class
中。
一个典型的限速配置,就是在网络接口(如 eth0
)上附加一个根 qdisc
(如 htb
),在其下创建多个 class
,并用 filter
将不同的流量导入这些 class
,取消限速的本质就是移除这些被附加的 qdisc
、class
和 filter
。
取消 tc 限速的详细步骤
取消限速的过程遵循“先查看,后删除,再验证”的原则,确保操作准确无误。
检查当前的 tc 规则
在执行任何删除操作之前,首先需要查看当前系统上已经配置了哪些 tc
规则,使用以下命令可以列出指定网络接口上的 qdisc
和 class
。
# 查看所有网络接口的 qdisc tc qdisc show # 查看特定网络接口(eth0)的 qdisc tc qdisc show dev eth0 # 查看特定网络接口的 class tc class show dev eth0
如果接口上存在限速规则,你可能会看到类似 htb
、tbf
或 netem
(用于模拟延迟和丢包)等非默认的 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
时,隶属于它的所有 class
和 filter
都会被自动一并删除。
核心命令是 tc qdisc del
。
# 删除指定网络接口(eth0)的根 qdisc # 这是清除所有 tc 规则的最常用方法 sudo tc qdisc del dev eth0 root
执行此命令后,eth0
接口上所有由 tc
创建的流量控制规则都会被清除,网络接口将恢复到内核默认的 pfifo_fast
队列。
如果只想删除特定的 qdisc
而非根 qdisc
,可以指定其 handle
(句柄)或 parent
(父级),但这种情况较为少见,在绝大多数场景中,删除根 qdisc
是最推荐的“一键清理”操作。
验证规则是否已清除
删除操作完成后,必须再次执行步骤一中的查看命令,以确认规则是否已被成功移除。
tc qdisc show dev eth0
输出结果应该恢复到默认状态,不再包含 htb
、tbf
等自定义 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
验证结果:
tc qdisc show dev eth0 # 输出将恢复为默认的 pfifo_fast,或类似信息
重要注意事项与最佳实践
注意事项 | 详细说明 |
---|---|
权限要求 | 所有 tc 命令(包括 show 和 del )都需要 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
。
- 在网络中另一台服务器上(或本机作为服务端)启动
iperf3
服务端模式:iperf3 -s
- 在您刚刚取消限速的 CentOS 服务器上,以客户端模式连接到服务端进行测试:
iperf3 -c <server_ip>
测试结果会显示当前的带宽吞吐量,如果限速已被成功取消,您应该能测得接近于网卡或网络链路理论最大值的速度,如果速度仍然被限制在您之前设定的值(10Mbps),则说明 tc
规则可能未被完全清除,或者存在其他网络瓶颈。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复