TC(traffic control)命令介绍
TC是linux自带的模块,一般不需要安装。tc 命令提供了一个非常灵活和强大的接口,可以用来实现各种复杂的网络流量控制和管理策略。广泛应用于网络性能优化、网络模拟测试、服务质量保证等场景。
主要功能
流量整形(Traffic Shaping):
限制网络接口的带宽
控制网络数据包的出口速率
管理网络拥塞
流量监控(Traffic Monitoring):
收集网络流量统计信息
跟踪网络数据包的传输情况
网络模拟(Network Emulation):
模拟延迟、丢包、乱序等网络异常情况
测试应用程序在各种网络环境下的表现
数据包分类(Packet Classification):
根据数据包的特征进行分类
为不同类型的数据包应用不同的策略
tc 命令的基本语法
tc [options] object [command] [arguments]
object 表示要管理的网络对象,如 qdisc(排队规则)、class(流量分类)、filter(过滤器)等
command 则是要执行的操作,如 add、delete、change 等
arguments 是针对不同 object 和 command 的具体参数。
tc qdisc: 管理排队规则
add: 添加排队规则
change: 修改排队规则
replace: 替换排队规则
delete: 删除排队规则
tc class: 管理流量类别
add: 添加流量类别
change: 修改流量类别
replace: 替换流量类别
delete: 删除流量类别
tc filter: 管理过滤规则
add: 添加过滤规则
change: 修改过滤规则
replace: 替换过滤规则
delete: 删除过滤规则
示例
模拟延迟传输: tc qdisc add dev eth0 root netem delay 100ms
模拟网络丢包: tc qdisc add dev eth0 root netem loss 1%
查看流量管理:tc qdisc show eth0
删除指定规则:
tc qdisc del dev eth0 root netem delay 100ms
tc qdisc del dev eth0 root netem loss 1%
删除指定类型的所有规则:
tc qdisc del dev eth0 root netem (netem: 删除所有 netem 类型的排队规则,而不是指定某个具体的规则)
详细解释:
tc qdisc add: 添加一个新的排队规则(Queueing Discipline)
tc qdisc del: 删除指定的排队规则
dev eth0: 指定要操作的网络设备是 eth0
root: 表示这是根级别的排队规则
netem: 是一种特殊的排队规则,用于模拟网络状况
delay 100ms: 为网络流量添加 100 毫秒的延迟
loss 1%:为网络流量添加1%的丢包率
TC模拟网络延迟、丢包常用命令
网络延迟
模拟延迟传输:
tc qdisc add dev eth0 root netem delay 100ms
该命令将 eth0 网卡的传输设置为延迟 100 毫秒发送,更真实的情况下,延迟值不会这么精确,会有一定的波动,后面用下面的情况来模拟出带有波动性的延迟值
模拟延迟波动:
tc qdisc add dev eth0 root netem delay 100ms 10ms
该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。 还可以更进一步加强这种波动的随机性
延迟波动随机性:
该命令将 eth0 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送。
tc qdisc add dev eth0 root netem delay 100ms 10ms 30%
丢包
模拟网络丢包:
tc qdisc add dev eth0 root netem loss 1%
该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包
网络丢包成功率:
tc qdisc add dev eth0 root netem loss 1% 30%
该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为 30%
包重复、损坏、乱序
模拟包重复:
tc qdisc add dev eth0 root netem duplicate 1%
该命令将 eth0 网卡的传输设置为随机产生 1% 的重复数据包
模拟包损坏:
tc qdisc add dev eth0 root netem corrupt 0.2%
该命令将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包 。 (内核版本需在 2.6.16 以上)
模拟包乱序:
tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
该命令将 eth0 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟10 毫秒。
查看配置
查看网卡配置:
tc qdisc show dev eth0
该命令将 查看并显示 eth0 网卡的相关传输配置
查看丢包率:
tc -s qdisc show dev eth0
删除配置
删除相关配置(将之前命令中的 add 改为 del 即可删除配置):
tc qdisc del dev eth0 root netem delay 100ms
要删除所有的qdisc(排队规则)
tc qdisc add dev eth0 root