Этот модуль ядра реализует протокол, контролирующий сообщения в Интернет
(ICMP - Internet Control Message Protocol), определенный в RFC792. Протокол
предназначен для сообщений об ошибках и для их диагностики. Пользователи не
работают с этим модулем непосредственно; вместо этого он сообщается с другими
протоколами ядра, а они помещают ошибки ICMP на уровень приложений. Кроме того,
модуль ICMP-ядра отвечает на запросы ICMP.
Протокол пользователя может получать пакеты ICMP для всех локальных сокетов,
открывая raw-сокет с протоколом
IPPROTO_ICMP.
За дополнительной информацией обращайтесь к
raw(7).
Пакеты ICMP, передаваемые сокету, могут быть отсортированы согласно
их типу с помощью опции
ICMP_FILTER.
Пакеты ICMP всегда обрабатываются ядром, даже если передаются сокету
пользователя.
Linux ограничивает темп отправки пакетов ICMP с сообщениями об ошибках
в определенный пункт назначения.
ICMP_REDIRECT
и
ICMP_DEST_UNREACH
также ограничиваются согласно маршруту назначения приходящих пакетов.
СИСТЕМНЫЕ ВЫЗОВЫ
ICMP поддерживает интерфейс sysctl для настройки некоторых общих параметров IP.
Доступ к sysctl можно получить путем чтения или записи информации в
/proc/sys/net/ipv4/*
или с помощью интерфейса
sysctl(2).
Большинство вызовов sysctl ограничивают темп определенных типов ICMP.
Linux 2.2 для ограничения ICMP использует буферный фильтр (token bucket
filter). Указываемые значения - это время в тиках (jiffies) до очищения
буферного фильтра после передачи данных (burst).
Тик - это системозависимый отрезок времени, обычно 10 мс в архитектуре
x86 и около 1 мс в alpha или IA64.
icmp_destunreach_rate
Определяет максимальный темп передачи пакетов ICMP в недоступный пункт
назначения. Ограничивает темп, в котором пакеты передаются по определенному
маршруту или в определенный пункт назначения.
Ограничение не касается отправки пакетов
ICMP_FRAG_NEEDED,
необходимых для выяснения MTU-пути.
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.
Эти пакеты посылаются для предотвращения зацикливания, если пакет совершил
слишком много "hops" - переходов от одной машины к другой.
ЗАМЕЧАНИЯ
Так как многие реализации не поддерживают raw-сокеты
IPPROTO_ICMP,
то переносимые (portable) программы не должны зависеть от наличия этой возможности.
Пакеты
ICMP_REDIRECT
не посылаются, если Linux не работает как маршрутизатор.
Кроме того, от старых шлюзов, определенных в таблице маршрутизации,
пакеты могут только приниматься, и перенаправленные маршруты
через некоторое время устаревают.
64-битная отметка времени, возвращаемая
ICMP_TIMESTAMP,
рассчитается в миллисекундах с 1 января 1970 г.
ICMP Linux для отправки ICMP использует raw-сокет. Этот сокет
может появляться в выводимой команде
netstat(8)
с нулевым узлом.
ВЕРСИИ
Поддержка запроса
ICMP_ADDRESS
была удалена из Linux версии 2.2.
Поддержка запроса
ICMP_SOURCE_QUENCH
была удалена из Linux версии 2.2.