Netem - 如何延迟发送到某些主机/从某些主机接收的数据包

Netem - 如何延迟发送到某些主机/从某些主机接收的数据包

假设我们有 hostA和 host B。我们想用它netem来模拟以下场景:以一定的延迟B发送数据包。 如何在两种情况下执行此操作: (1)在主机上运行 (2)在主机上运行。 A
netem
netemA
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 会导致管道中特定位置出现延迟,因此,如果延迟,比预期更长的延迟可能会产生副作用。

相关内容