流量控制命令(tc)是每个网络管理员都应该知道的工具。tc所做的是允许管理员配置内核包调度来模拟UDP/TCP应用程序的包延迟和丢失,或者限制特定服务的带宽使用。
我将在Ubuntu Server 18.04实例上进行演示。您可以在任何Linux服务器上使用此命令,但是工具的安装(如果没有预装)会有所不同。您还将需要一个具有sudo特权的用户。
一、如何安装tc命令
如果你发现tc命令在默认情况下没有安装,在Ubuntu上它是用iproute2打包的。所以安装如下:
sudo apt-get install iproute2 -y
二、基本用法
您必须做的件事就是找出要应用于内核数据包调度程序的接口的名称。为此,发出命令:
ip a
该命令将列出所有网络设备的信息(图A)。
我将通过向计算机上的ens5接口添加恒定延迟来进行演示。更具体地说,我将设备上的出站流量(出口)延迟200毫秒。为此,命令将是:
sudo tc qdisc add dev ens5 root tbf rate 1024kbit latency 50ms burst 1540
上面命令中的选项是:
qdisc告诉tc修改调度程序
add告诉tc添加新规则
dev ens5告诉tc该规则将应用于设备ens5
root告诉tc修改出站流量调度程序
tbf速率1024kbit告诉tc将网络降低到1024kbit速率
50ms延迟告诉tc我们将网络延迟50ms
1540告诉tc我们的存储大小
发出命令后,可以验证参数是否已通过命令应用:
sudo tc qdisc show dev ens5
您应该看到正确配置了每个选项(图B)。
要删除新添加的规则,请发出命令:
sudo tc qdisc del dev ens5 root
要记住的一件非常重要的事情是,一次只能将一个规则应用于一个接口。因此,为了创建与接口不同的规则,必须首先删除以前的规则。
三、如何使用tc命令模拟丢包
举例来说,假设您正在开发应用程序,则需要进行测试以查看其如何处理网络上的数据包丢失。这对于确保您的应用程序可以容忍配置不良或不可靠的网络至关重要。这是两个模拟tc丢包的示例tc命令:
sudo tc qdisc add dev ens5 root netem loss 0.1%
上面的命令将随机丢弃数据包,概率为0.1%。
如果我们希望丢失数据包的概率为0.3%,而先前的数据包的丢包率为25%,该怎么办?该命令将是:
sudo tc qdisc add dev ens5 root netem loss 0.3% 25%
运行上述命令后,对网络上的另一台计算机执行ping测试,您应该看到指示的数据包丢失(图C)。
有了该规则,启动您的应用程序,并查看当网络达不到标准时的运行情况。如果应用程序失败,则您还有更多工作要做。
如果该特定的丢包规则不足以满足您的要求,则可以采用Gilbert-Elliot方案,该方案定义了两种状态:
Good (or drop Gap)
Bad (or drop Burst)
该方案为网络损害提供了更紧密的模型,而不是简单的数据包丢失。要使用Gilbert-Elliot方案,该命令应如下所示:
sudo tc qdisc add dev ens5 root netem loss gemodel 1% 10% 70% 0.1%
现在,当我们运行ping测试时,我们应该会看到与以前相似的数字,但是对于您的测试目的,数据包丢失应该更加真实(图D)。
在这里,您将看到一些使用tc命令在Linux机器上调整网络流量的示例,因此您可以更好地测试可识别网络的应用程序。有关tc的更多信息,请发出命令man tc并仔细阅读手册页。