Максимальная задержка ICMP между эхо-запросом и ответом, поддерживаемая NAT маршрутизатора
Я пытался замедлить работу сети на моем сервере (arch linux vm) с netem
sudo tc qdisc add dev eth0 root netem delay 1600ms
С задержкой 1600 мс клиент не получает пакет ответа эха, хотя пакет генерируется со стороны сервера. Однако он может выдержать до 1500ms
задержка. Если задержка меньше, чем эхо-ответ получен на стороне клиента.
Но в RFC определяет ли он фиксированную максимальную задержку между эхо-запросом и эхо-ответом?
я использовал ping
так же как scapy
чтобы генерировать ICMP
пакеты эхо-запроса и tcpdump
проверить входящие эхо-ответные пакеты. Так что это не проблема ping
программа.
Поэтому я думаю, что где-то в промежуточном маршрутизаторе ECHO reply
пакеты отбрасываются из-за задержки. Итак, какова максимальная величина задержки между эхо-запросом и ответом, которую поддерживают обычные маршрутизаторы?
2 ответа
В RFC 5508 есть рекомендации"Поведенческие требования NAT для ICMP" относительно того, как долго маршрутизатор должен сохранять состояние для пакетов ICMP, но нет гарантии, что кто-то последует за ними.
Контекст: ICMP не является протоколом с отслеживанием состояния.
В сценарии, когда вы сидите за маршрутизатором, который NAT для вашего трафика, и вы пингуете устройство на другой стороне маршрутизатора, маршрутизатор должен отслеживать ваши эхо-запросы ICMP, чтобы позволить соответствующим эхо-ответам ICMP войти. Как это сделать, если ICMP не с состоянием? Просто запишите запись в таблицу NAT и держите ее некоторое время.
Производитель вашего маршрутизатора решил, что 1500 мс - это хороший компромисс между функциональностью (работает ICMP) и безопасностью:
1) Маршрутизатор может быстро освободить память, вместо того чтобы хранить потенциально миллионы записей для односторонних ICMP.
2) Маршрутизатор блокирует нежелательные эхо-ответы ICMP, потенциально используемые для проверки, снятия отпечатков пальцев и т. Д.
Как следует из примечаний, по умолчанию время ожидания ping для Windows составляет 4 секунды, а для многих дистрибутивов Linux - 10 секунд (в сравнении с инструментами ping по умолчанию в обеих ОС).