我使用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 超时。
任何帮助将不胜感激。