在日常运维或家庭网络管理中,我们经常需要对网络流量进行控制,比如限制某个应用的带宽、保障关键服务的网络优先级,或者模拟慢速网络环境进行测试。在Ubuntu系统中,可以使用强大的
tc(Traffic Control)命令配合
netem模块实现精细的网络流量整形。
什么是网络流量整形?
网络流量整形(Traffic Shaping)是一种主动调整网络数据流速率的技术,用于优化或保证网络性能。通过限制出站(或入站)带宽、增加延迟、引入丢包等方式,可以模拟真实网络环境或防止某类流量占用过多资源。
准备工作
在开始之前,请确保你的Ubuntu系统已安装
iproute2工具包(通常默认已安装)。打开终端,输入以下命令验证:
tc -V
如果看到版本信息,说明工具已就绪。
基础概念:qdisc、class 和 filter
qdisc(排队规则):决定数据包如何排队和发送,如htb(分层令牌桶)、
netem(网络仿真)。 class:用于分类流量,可设置不同带宽上限。 filter:根据IP、端口等条件将流量导向特定class。
实战1:限制整个网卡的出口带宽
假设你的网卡是
eth0,你想将其出口带宽限制为10Mbps。执行以下命令:
sudo tc qdisc add dev eth0 root handle 1: htb default 30sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbitsudo tc class add dev eth0 parent 1: classid 1:2 htb rate 10mbit
第一条命令创建一个HTB根队列;第二、三条为所有流量分配10Mbps带宽。
实战2:限制特定IP的带宽
如果你想只限制访问
192.168.1.100的流量不超过2Mbps,可以这样做:
# 创建根qdiscsudo tc qdisc add dev eth0 root handle 1: htb# 创建主类(总带宽)sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit# 创建子类(限速2Mbps)sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbit# 添加过滤器,匹配目标IPsudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \ match ip dst 192.168.1.100 flowid 1:10
实战3:模拟高延迟和丢包(网络仿真)
使用
netem模块可以轻松模拟不良网络环境:
# 增加100ms延迟 + 5%丢包率sudo tc qdisc add dev eth0 root netem delay 100ms loss 5%
清除所有规则
调试完成后,记得清除规则以免影响正常使用:
sudo tc qdisc del dev eth0 root
常见问题与注意事项
流量整形仅作用于出口流量(egress),即从本机发出的数据。 若需控制入口流量(ingress),需使用ifb虚拟设备配合重定向,较为复杂。 请先在测试环境操作,避免误操作导致网络中断。 使用
tc -s qdisc show dev eth0可查看当前规则状态。
总结
通过本文,你已经掌握了在Ubuntu系统中使用
tc命令进行Linux流量控制的基本方法。无论是做QoS策略、网络测试还是带宽管理,这些技巧都非常实用。记住,网络带宽限制只是流量整形的一部分,结合
netem还能实现更复杂的网络仿真场景。
希望这篇TC命令教程能帮助你轻松上手Ubuntu网络流量整形!如有疑问,欢迎在评论区交流。
