当前位置:首页 > Ubuntu > 正文

Ubuntu网络流量整形实战指南(手把手教你用TC命令限制带宽)

在日常运维或家庭网络管理中,我们经常需要对网络流量进行控制,比如限制某个应用的带宽、保障关键服务的网络优先级,或者模拟慢速网络环境进行测试。在Ubuntu系统中,可以使用强大的tc(Traffic Control)命令配合netem模块实现精细的网络流量整形

Ubuntu网络流量整形实战指南(手把手教你用TC命令限制带宽) Ubuntu网络流量整形  Linux流量控制 TC命令教程 网络带宽限制 第1张

什么是网络流量整形?

网络流量整形(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网络流量整形!如有疑问,欢迎在评论区交流。