我使用 openwrt 为所有网络数据包引入了 2000 毫秒的延迟内特姆模块。
# This is run on the terminal of the OpenWRT router
tc qdisc add dev wlan1 root netem delay 2000ms
当对网络中的设备进行 ping 操作时,我可以清楚地看到这一点的影响。
# ping 192.168.10.164
PING 192.168.10.164 (192.168.10.164): 56 data bytes
64 bytes from 192.168.10.164: seq=0 ttl=64 time=2001.956 ms
64 bytes from 192.168.10.164: seq=1 ttl=64 time=2010.677 ms
64 bytes from 192.168.10.164: seq=2 ttl=64 time=2004.216 ms
64 bytes from 192.168.10.164: seq=3 ttl=64 time=2001.451 ms
64 bytes from 192.168.10.164: seq=4 ttl=64 time=2005.981 ms
但是,如果我尝试在通过 交换消息时注意到这种延迟nc
,它似乎会被忽略。
|---------------------|--------------------------------|
| Terminal 1 | Terminal 2 |
| (192.168.10.164) | 192.168.10.186 |
|---------------------|--------------------------------|
| # nc -l 2389 | |
| | # nc 192.168.10.164 2389 |
| | Hello |
| # NO 2s DELAY | |
| # ALMOST INSTANT | |
| Hello | |
|---------------------|--------------------------------|
我的问题是:
- 如果这只是模块配置错误的情况
netem
,那么什么是正确的模块,可以对所有 IP 数据包应用延迟?
更新 这似乎是由 netem 模块中的错误引起的。路由器重新启动并回复命令后,我遇到了预期的延迟。
答案1
ICMP 和 TCP 是不同的协议,如果您的命令影响 ICMP 数据包,则不会影响 TCP 数据包。
答案2
netem 的文档在这里很好(https://wiki.linuxfoundation.org/networking/netem),另一方面,您是否检查了接口是否正确,一般来说,opewwrt 创建网络设备,并且您将 wlan 引用到 netem,并且 nc 进程可能位于与不同设备关联的不同网络上
答案3
看起来您添加了 qdisc 192.168.10.164
,当您从 186 执行 ping 操作时,由于响应时间而不是请求时间,您会收到 2 秒的延迟。
对于您的 netcat,Hello
流量从 186 -> 164 流动,并且不会经过 netem qdisc(因为它是接口的输入)。但如果你仔细观察,你应该能够看到打开连接时有 2 秒的延迟。
如果您以相反的方式输入,您应该能够看到延迟。
关于重启,您是否有可能在重启后以相反的方式进行测试?即输入 164 而不是 186?