使用流量控制命令,您可以模拟配置较差的网络,以测试您的应用程序对这种环境的响应程度。
流量控制命令(tc)是每个网络管理员都应该知道的工具。tc的作用是允许管理员配置内核数据包计划,以模拟UDP / TCP应用程序的数据包延迟和丢失,或者限制特定服务的带宽使用。
我想向您展示如何使用tc命令来控制进出Linux服务器的网络流量。这样,您可以更好地测试您的应用程序将如何处理配置不良或不一致的网络。
SEE: 实施DevOps:IT专业人员指南(免费PDF) (TechRepublic)
我将在Ubuntu Server 18.04实例上进行演示。您可以在任何Linux服务器上使用此命令,但是该工具的安装(不应预先安装)会有所不同。您还将需要一个具有sudo特权的用户。
如果您发现默认情况下未安装tc命令,则在Ubuntu上将其与iproute2打包在一起。所以安装如下:
须藤apt-get install iproute2 -y
您必须做的第一件事就是找出要应用于内核数据包调度程序的接口的名称。为此,发出命令:
IP地址
该命令将列出所有网络设备的信息(图A)。
图A
我将通过向计算机上的ens5接口添加恒定延迟来进行演示。更具体地说,我将设备上的出站流量(出口)延迟200毫秒。为此,命令将是:
sudo tc qdisc添加dev ens5根tbf速率1024kbit延迟50ms突发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)。
图B
我们的tc命令已被应用。
要删除新添加的规则,请发出命令:
sudo tc qdisc del dev ens5 root
要记住的一件非常重要的事情是,一次只能将一个规则应用于一个接口。因此,为了创建与接口不同的规则,必须首先删除以前的规则。
举例来说,假设您正在开发应用程序,则需要进行测试以查看其如何处理网络上的数据包丢失。这对于确保您的应用程序可以容忍配置不良或不可靠的网络至关重要。这是两个模拟tc丢包的示例tc命令:
须藤TC QDISC添加DEV ENS5根NETE损失0.1%
上面的命令将随机丢弃数据包,概率为0.1%。
如果我们希望丢失数据包的概率为0.3%,而先前的数据包的丢包率为25%,该怎么办?该命令将是:
sudo tc qdisc添加dev ens5根netem丢失0.3%25%
运行上述命令后,对网络上的另一台计算机执行ping测试,您应该看到指示的数据包丢失(图C)。
图C
丢包25%
有了该规则,启动您的应用程序,并查看当网络达不到标准时的运行情况。如果应用程序失败,则您还有更多工作要做。
如果该特定的丢包规则不足以满足您的要求,则可以采用Gilbert-Elliot方案,该方案定义了两种状态:
好(或落差)
不良(或爆裂)
该方案为网络损害提供了更紧密的模型,而不是简单的数据包丢失。要使用Gilbert-Elliot方案,该命令应如下所示:
sudo tc qdisc添加dev ens5根netem丢失gemodel 1%10%70%0.1%
现在,当我们运行ping测试时,我们应该会看到与以前相似的数字,但是对于您的测试目的,数据包丢失应该更加真实(图D)。
图D
另一类丢包。
在这里,您将看到一些使用tc命令在Linux机器上调整网络流量的示例,因此您可以更好地测试可识别网络的应用程序。有关tc的更多信息,请发出命令man tc并仔细阅读手册页。
评论专区