Linux流量控制有哪些常见命令?

话题来源: 常见的出口带宽限速策略部署方法

说到Linux流量控制,作为一名经常和服务器打交道的运维人员,说实话那些tc命令真是让人又爱又恨。特别是在紧急情况下需要限速的时候,要么记不住命令语法,要么参数写错导致整个网络异常。我还清楚记得第一次用TC限速时,不小心把”ceil”参数设得比”rate”低,结果直接让部分业务挂了半小时…

TC基础命令:从入门到放弃

Linux下的流量控制主要靠TC(Traffic Control)这个神器,它就像是网络流量的交警。最基础的几个命令你必须要掌握:tc qdisc用来管理队列规则,tc class用来创建分类,而tc filter则负责把流量分配到具体的class中。

举个实际例子,如果我们要给eth0网卡设置10Mbps的总限速,就得这样写:

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

看着简单是吧?但等你要针对不同业务做差异化限速时,会发现参数多得让人头大。rate是保证带宽,ceil是最大可用带宽,burst表示突发流量…记得有次我把单位搞混了,想限速10M却写了10k,结果老板视频会议卡成PPT,那个教训可真是刻骨铭心。

高级场景下的TC应用技巧

视频会议优先保障方案

在疫情期间远程办公成为常态时,我们公司就遇到了视频会议和下载抢带宽的问题。最后用TC实现了动态优先级控制,核心代码如下:

# 为视频会议保留30%带宽
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 30mbit ceil 30mbit prio 0
# 普通流量走默认class
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 70mbit ceil 100mbit prio 1
# 使用sfq防止单连接饥饿
tc qdisc add dev eth0 parent 1:10 sfq perturb 10

这个配置的关键在于prio参数,数字越小优先级越高。运维小伙伴们注意了,实测发现当网络拥塞时,priority的设置确实能让视频流量优先通过,但前提是你的class配置得当!

那些年我踩过的TC坑

说真的,TC的工具链虽强大但真的很复杂。经历过几次线上故障后,我总结出几个血泪教训: – 永远先tc qdisc del dev eth0 root清空规则再重新配置 – parent和handle的关系务必搞清楚,曾经我把parent设错导致VPN中断 – 测试环境先行!直接在生产环境改TC就是找死 – 配置保存后记得用tc -s qdisc ls dev eth0检查状态

最后说句掏心窝子的话:真要大规模使用流量控制,还是建议用商业防火墙或者专业的流量整形设备。TC虽然免费但学习成本高,而且一旦出问题排查起来特别耗时。不过作为Linux运维,这些命令该学还是得学,指不定哪天就能救急呢?

评论