假设我们有 hostA
和 host B
。我们想用它netem
来模拟以下场景:以一定的延迟B
发送数据包。 如何在两种情况下执行此操作: (1)在主机上运行 (2)在主机上运行。 A
netem
netem
A
netem
'B
有任何想法吗 ?
答案1
关于如何在传入和传出数据包上引入延迟,有几个很好的来源。此 NetEm 维基页面作为大量的信息。有关延迟传出数据包的信息,请参阅“1.1 模拟广域网延迟”部分和“2.3 如何对传入流量使用 netem?”对于传入的数据包。我在我的设置中尝试了这些,并且没有遇到任何问题。
基本延迟:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
21.800
仅客户端有 100ms 延迟 (B):
# tc qdisc add dev $my_interface root netem delay 100ms
结果:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
102184.355
仅客户端有 100ms 延迟 (A):
首先,创建一个中间功能块伪设备 IFB(以太网桥也可以):
# modprobe ifb
# ip link set dev ifb0 up
接下来,重定向所有传入流量以首先通过 IFB 设备:
# tc qdisc add dev $my_interface ingress
# tc filter add dev $my_interface parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0
现在只需为 IFB 设备的传出流量添加延迟,该流量现在是 my_interface 的传入流量:
# tc qdisc add dev ifb0 root netem delay 100ms
结果:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
154442.238
将这两个结果应用到:
# netperf -H $my_ip -t TCP_RR -P 0 -- -r 64 -o RT_LATENCY
333803.282
正如您所看到的,延迟超过了添加的 100 毫秒(或上一个示例中的 200 毫秒)+ 基本延迟。 NetEm 会导致管道中特定位置出现延迟,因此,如果延迟,比预期更长的延迟可能会产生副作用。