1

Я пинг хоста:

$ 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 секунд (дайте или возьмите секунду) после прерывания первого пинга перед выполнением второго пинга второй пинг будет работать так, как должен. Выполнение команды ping до истечения 30 секунд приведет к сбою команды ping (как показано выше), даже если я позволю ему пройти за 30-секундную отметку, но 30-секундный "таймер" не будет сброшен.

Пинг разных хостов с первой и второй попытки ничего не меняет.

Запустив tcpdump во время пинга, я вижу, что эхо-сигналы ICMP отправляются и ответы ICMP принимаются в обоих случаях.

Я также воспроизвел проблему, используя модуль Perl Net::Ping, поэтому проблема не ограничивается /bin /ping (если только Net::Ping не использует /bin /ping).

Я использую довольно стандартную, текущую установку Debian, которая работает как брандмауэр и использует NAT, используя, как я полагаю, довольно стандартные правила iptables.

1 ответ1

2

Вполне вероятно, что вы получаете ограничение скорости на эхо-запросы. Исходный адрес ICMP-ответов на неудавшиеся запросы должен указывать, где вы ограничены.

Ограничение скорости относительно тривиально для настройки в iptables.

Попытка прогнать такую программу, как mtr , должна показать, где вы быстро ограничены.

РЕДАКТИРОВАТЬ: Проверьте, если вы ограничиваете скорость с iptables. Возможно, вы захотите ограничить скорость входящих запросов ECHO, но если указано неверно, вы можете ограничить скорость всех входящих ICMP-пакетов. Ищите limit в выводе iptables -L -n .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .