已复制
全屏展示
复制代码

Linux流量控制Traffic Control网络限速


· 3 min read

一. 简要概述

流量控制(tc)是一个非常有用的Linux实用程序,它能配置内核数据包调度程序,tc可以模拟UDP或TCP应用程序的数据包延迟和丢失,或者限制特定服务的带宽、限制上网速度等等场景。网络带宽限速。

二. 工具安装

# Debain 和 Redhat 系列的系统安装 iproute 包即可
sudo apt-get install -y iproute
sudo yum install -y iproute

三. 控制网络延迟(双向)

这里的延迟控制是双向的,即当前主机到其他主机延迟,其他主机到当前主机延迟。

# 新增eth0延迟200ms
sudo tc qdisc add dev eth0 root netem delay 200ms

# 新增eth0延迟200ms,上下随机加减0到正负50ms
sudo tc qdisc add dev eth0 root netem delay 200ms 50ms

# 查看eth0上的延迟限制
tc qdisc show dev eth0

# 删除eth0的延迟限制
sudo tc qdisc del dev eth0 root

# 修改eth0的延迟为400ms
sudo tc qdisc change dev enp2s0 root netem delay 400ms

# 修改eth0的延迟为400ms,上下随机加减0到正负50ms
sudo tc qdisc change dev enp2s0 root netem delay 400ms 50ms

参数

  • qdisc: modify the scheduler (aka queuing discipline)
  • add: add a new rule
  • dev eth0: rules will be applied on device eth0
  • root: modify the outbound traffic scheduler (aka known as the egress qdisc)
  • netem: use the network emulator to emulate a WAN property
  • delay: the network property that is modified
  • 200ms: introduce delay of 200 ms

四. 控制网络丢包(双向)

# 新增eth0丢包率为10%
sudo tc qdisc add dev eth0 root netem loss 10%


# 使用-c参数控制只发送100个包,然后就统计丢失率。
ping 10.10.10.20 -c 100
ping 10.10.10.30 -c 100

五. 控制包损坏率(双向)


# 10% 的包会发生错误
sudo tc qdisc add dev eth0 root netem corrupt 10%

六. 控制包重复率(双向)


# %10 的包会重复发送
sudo tc qdisc add dev eth0 root netem duplicate 10%

七. 网络带宽限制(出口)

使用场景:比如在服务器上下载数据包时,不想把服务器的带宽全部占满,此时可以选择使用tc在服务器上设置,设置出口带宽。


sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms

参数

  • tbf: use the token buffer filter to manipulate traffic rates
  • rate: sustained maximum rate
  • burst: maximum allowed burst
  • latency: packets with higher latency get dropped

测试

假设要限制当前主机的出口带宽(10.10.10.212)

# 在10.10.10.212上没有添加带宽限制前查看最大带宽为 258 Mbits/sec
sudo iperf -c 10.10.10.212 -p 5201
------------------------------------------------------------
Client connecting to 10.10.10.212, TCP port 5201
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 10.10.10.19 port 39206 connected with 10.10.10.212 port 5201
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   307 MBytes   258 Mbits/sec


# 在10.10.10.212上添加带宽限制: 维持在1Mbit左右,
sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms


# 在10.10.10.212上添加带宽限制后查看最大带宽为 1.11 Mbits/sec
sudo iperf -c 10.10.10.212 -p 5201
------------------------------------------------------------
Client connecting to 10.10.10.212, TCP port 5201
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 10.10.10.19 port 39210 connected with 10.10.10.212 port 5201
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.4 sec  1.38 MBytes  1.11 Mbits/sec

文章推荐