ICMP(7)

НАЗВАНИЕ
icmp, IPPROTO_ICMP - модуль ядра Linux, реализующий протокол IPv4 ICMP.

ОПИСАНИЕ
Этот модуль ядра реализует Internet Control Message Protocol (описанный в RFC792). Он используется для извещения об ошибках и для диагностики. Пользователь не взаимодействует напрямую с этим модулем; вместо этого он общается с другими протоколами в ядре, а они при помощи протокола ICMP передают ошибки на уровень приложения. Кроме того, этот модуль отвечает на ICMP-запросы.

Пользовательский протокол может получать ICMP-пакеты для всех локальных сокетов, если откроет "сырой" сокет, используя протокол IPPROTO_ICMP. Смотри описание raw(7), где приведена более подробная информация. Типы ICMP-пакетов, передаваемые в сокет, могут быть отфильтрованы, используя параметр сокета ICMP_FILTER. Пакеты ICMP всегда обрабатываются ядром, даже когда передаются в пользовательский сокет.

Linux ограничивает для каждого получателя поток ICMP-пакетов с сообщениями об ошибках. Количество ICMP_REDIRECT и ICMP_DEST_UNREACH также ограничивается для каждого отправителя приходящих пакетов.

SYSCTLS
ICMP поддерживает интерфейс sysctl для настройки некоторых глобальных параметров IP. К этим параметрам можно обращаться, читая и записывая файлы /proc/sys/net/ipv4/*, или же при помощи интерфейса sysctl(2). Большая часть этих параметров управляет ограничением потока разнообразных ICMP-пакетов. Linux 2.2 использует token bucket фильтр для ограничения ICMP пакетов. Значение таких параметров -- задержка в jiffies, пока token-bucket-фильтр очищается после всплеска. "Jiffy" -- это системо-зависимая единица измерения, обычно 10мс на x86 и около 1ms на Alpha и IA64.

icmp_destunreach_rate
    Максимальная частота посылки ICMP-пакетов Destination Unreachable по каждому конкретному маршруту или получателю. Ограничение не влияет на посылку пакетов ICMP_FRAG_NEEDED, необходимых для определения MTU маршрута (path MTU discovery).

icmp_echo_ignore_all
    Если этот параметр больше нуля, Linux будет игнорировать все запросы ICMP_ECHO.

icmp_echo_ignore_broadcasts
    Если этот параметр больше нуля, Linux будет игнорировать все пакеты ICMP_ECHO, посланные по широковещательным адресам.

icmp_echoreply_rate
    Максимальная частота посылки пакетов ICMP_ECHOREPLY в ответ на запросы ICMP_ECHOREQUEST.

icmp_paramprob_rate
    Максимальная частота посылки пакетов ICMP_PARAMETERPROB. Эти пакеты посылаются, когда приходит пакет с ошибочным заголовком IP.

icmp_timeexceed_rate
    Максимальная частота посылки пакетов ICMP_TIME_EXCEEDED. Эти пакеты посылаются для предотвращения зацикливания, когда пакет прошел слишком большое количество хопов.

ПРИМЕЧАНИЯ
Так как многие реализации не поддерживают "сырые" сокеты с параметром IPPROTO_ICMP, то использование этой особенности нежелательно при написании переносимых программ.

Пакеты ICMP_REDIRECT не посылаются, когда Linux не является маршрутизатором. Они принимаются только от старых шлюзов, определенных в таблице маршрутизации, причем информация о перенаправлении маршрутов устаревает через некоторое время.

64-битные временные метки ICMP_TIMESTAMP возвращаются в миллисекундах, прошедших с 1-го января 1970 года.

Реализация ICMP в Linux внутри себя использует для посылки ICMP-пакетов "сырые" сокеты. Такие сокеты могут показываться программой netstat(8), причем их inode будет равен нулю.

ВЕРСИИ
Поддержка запроса ICMP_ADDRESS была прекращена в ядре 2.2.

Поддержка ICMP_SOURCE_QUENCH была прекращена в ядре Linux 2.2.

СМОТРИ ТАКЖЕ
ip(7)

RFC792, где описан протокол ICMP.

ПЕРЕВОД
Перевел с английского Алексей Миллер <asm@asm.kiev.ua> 2000