Я пінгую хост:
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=47 time=53.8 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=47 time=54.2 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=47 time=49.1 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 49.112/52.401/54.202/2.329 ms
І одразу після переривання першої команди ping, я роблю це знову:
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2016ms
100% втрата пакетів. Чому?
Це відбувається кожного разу. Тільки чекаючи принаймні 30 секунд (дайте або приймайте секунду) після переривання першого пінгу перед виконанням другого пінгу, другий пінг буде працювати як слід. Виконує пінг раніше минулі 30 секунд призведуть до невдачі пінга (як видно вище), навіть якщо я дозволю йому пробіг через 30 секунд, але 30 секундний "таймер" не буде скинутий.
Pinging різних хостів в першій і другій спробі нічого не змінює.
Запускаючи tcpdump під час тестування, я бачу, що ICMP-ехо відправляється і що відповіді ICMP отримані в обох випадках.
Я також відтворив проблему, використовуючи модуль Net :: Ping Perl, тому проблема не обмежена / bin / ping (якщо Net :: Ping використовує / bin / ping безпосередньо).
Я використовую досить стандартну, поточну установку Debian, яка працює як брандмауер, і робить NAT, використовуючи те, що я вважаю досить стандартними правилами iptables.
netstat
і lsof
.