НАЗВАНИЕ
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.
СМОТРИ ТАКЖЕ
RFC792, где описан протокол ICMP.
ПЕРЕВОД
Перевел с английского Алексей Миллер <asm [AT] asm.ua> 2000