我试图根据延迟,带宽等因素来模拟不同的networking条件。 我发现Netem是模拟不同networking条件的最好方法。 所以我想要的networking设置如下。
所以Netem框应该有两个网卡,它必须连接两个以太网连接(eth0和eth1)。 我有几个问题需要澄清。
1)我们可以使用服务器的交叉电缆连接到Netem盒吗? 或者它是不同的VLAN。 2)根据我的理解,客户端将访问eth0和Netem框将所有的数据包转发到eth1和相同的服务器到网关箱通信。 所以我想澄清客户端是否可以直接连接到服务器IP(相同的networking),或者客户端只与Netem盒子对话,这样它会将数据包转发到服务器?
我假设你指的是这个教程。
使用linux桥接器,你将使用你的netem盒子作为交换机,甚至没有ip但是用于pipe理。 这样,客户端将直接与您的服务器通信。
只要您不指定子接口(例如eth0.101),您的交换机将按原样转发所有vlan标记的stream量。
实际上我只是在几个星期前才弄明白这一点。 我使用netem框作为路由器,但我不认为这实际上很重要。
基本上,你想要的function(不仅仅是这些function)会告诉你的networking保持一定的用户时间。 它不关心stream量如何stream入networking,这就是为什么我认为您可以像您所描述的那样使用桥梁。
有一件事,我不明白你的问题是你想要延缓交通的方向,还是两个方向。 这并不重要,但是你必须至less为每个“出站”站点发出一次netem命令 – 也就是说,每个stream量的stream向。 默认情况下,netem只会影响出站stream量,不会入站。
这就是说,这是你想要的命令:
tc qdisc add dev eth0 root handle 1:0 netem delay 25ms
那个命令会给通过eth0离开主机的所有数据包延迟25毫秒。 当然,您可以将eth(x)数字调整到适当的nic,并将25 ms调整到所需的延迟时间。 但是有一个问题:在命令中注意到“25”和“ms”之间没有空格。 这很重要 如果你把空间放进去,它会出错。
不过,实际上你可以延迟做更多的事情。 您可以input第二个值,如下所示:
tc qdisc add dev eth0 root handle 1:0 netem delay 25ms 10ms
这将使通信量平均延迟25毫秒,但每个数据包实际上会延迟15毫秒到35毫秒(25毫秒+/- 10毫秒)之间的随机数,
要“closures”netem,发出相同的命令,但将“add”改为“del”。
还有很多你可以用netem做,包括数据包重新sorting,数据包丢弃,数据包损坏和数据包重复,所有这些都是随机的,或者实际上与以前的数据包相关。 比我能进去的还多。 欲了解更多信息,请访问www.linuxfoundation.org/collaborate/workgroups/networking/netem或netem“man netem”的手册页。