TCP连接数据包忽略网络延迟,ping显示延迟

TCP连接数据包忽略网络延迟,ping显示延迟

我使用 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?

相关内容