InetAddress.isReachable()的超时参数与netem延迟的值不匹配

问题描述 投票:0回答:0

我使用netem为某些IP地址添加数据包延迟。

tc filter add dev ens33 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.106.182 flowid 1:1

ping
工具表明它有效。

PING 192.168.106.182 (192.168.106.182) 56(84) bytes of data.
64 bytes from 192.168.106.182: icmp_seq=1 ttl=63 time=2003 ms

以下是我的测试代码

import java.io.IOException;
import java.net.InetAddress;


public class PingTimeoutTest {
    public static void main(String[] args) throws IOException {
        InetAddress inetAddress = InetAddress.getByName(args[0]);
        int timeoutStepMilli = 20;
        int timeoutBase = 10;
        while (!inetAddress.isReachable(timeoutBase)) {
            System.out.println(timeoutBase + ": bad");
            timeoutBase += timeoutStepMilli;
        }
        System.out.println(timeoutBase + ": ok");
    }
}

结果是

10: bad
30: bad
50: bad
70: bad
90: bad
110: bad
130: bad
150: bad
170: bad
190: bad
210: bad
230: bad
250: bad
270: bad
290: ok

我不知道为什么会发生这种情况。当我在本端或远程端设置 2000ms netem 延迟时,这是相同的 290ms 超时。

任何帮助将不胜感激。

java ping icmp network-traffic
© www.soinside.com 2019 - 2024. All rights reserved.