如何设置 netem 框

如何设置 netem 框

我正在尝试根据延迟、带宽等因素模拟不同的网络状况。我发现 Netem 是模拟不同网络状况的最佳方式。所以我想要的网络设置如下。

在此处输入图片描述

因此,Netem 盒应该有两个 NIC,并且必须连接两个以太网连接(eth0 和 eth1)。我有几个问题需要澄清。

1) 我们可以使用交叉电缆将服务器连接到 Netem 盒吗?或者它是一个不同的 VLAN。2) 根据我的理解,客户端将访问 eth0,Netem 盒会将所有数据包转发到 eth1,服务器与 Netem 盒通信也是如此。所以我想澄清一下,客户端是否可以直接连接到服务器 IP(同一网络)或客户端是否只与 Netem 盒 IP 对话,以便它将数据包转发到服务器?

答案1

我假设你指的是教程。

使用 Linux Bridge,您将使用 Netem Box 作为交换机,甚至不需要 IP,只需进行管理即可。这样,客户端将直接与您的服务器通信。

只要您不指定子接口(例如 eth0.101),您的交换机就会按原样转发所有 vlan 标记的流量。

答案2

事实上,几周前我就想出了这个问题。我使用 netem 盒子作为路由器,但我认为这实际上并不重要。

基本上,您想要的 netem 函数(不止这些)会告诉您的网卡在用户确定的时间内保留流量。它不关心流量如何到达网卡,这就是为什么我认为您可以像您描述的那样使用桥接器。

我从您的问题中不明白的一件事是您想延迟哪个方向的流量,还是两个方向的流量。这其实并不重要,但您必须为每个“出站”网卡(即流量流动的每个方向)发出至少一次 netem 命令。默认情况下,netem 只会影响出站流量,而不会影响入站流量。

也就是说,这是您想要的命令:

tc qdisc add dev eth0 root handle 1:0 netem delay 25ms

该命令将为通过 eth0 离开主机的所有数据包引入 25 毫秒的延迟。当然,您可以将 eth(x) 编号调整为适当的网卡,并将 25 毫秒调整为所需的延迟。不过,有一个问题:请注意,命令中的“25”和“ms”之间没有空格。这很重要;如果您输入空格,它会出错。

不过,你实际上可以用延迟做更多的事情。你可以输入第二个值,如下所示:

tc qdisc add dev eth0 root handle 1:0 netem delay 25ms 10ms

这将导致交通延误平均的25 毫秒,但每个数据包将实际上延迟 15 毫秒至 35 毫秒之间的随机毫秒数(25 毫秒 +/- 10 毫秒)

要“关闭” netem,请发出相同的命令,但将“add”更改为“del”。

您还可以使用 netem 做更多的事情,包括数据包重新排序、数据包丢弃、数据包损坏和数据包复制,所有这些都是随机的或者实际上与之前的数据包相关。很多我无法在这里详述。如需更多信息,请查看www.linuxfoundation.org/collaborate/workgroups/networking/netem或 netem 的手册页“man netem”。

相关内容