table of contents
ICMP(7) | Руководство программиста Linux | 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.
СМОТРИ ТАКЖЕ¶
RFC792, где описан протокол ICMP.
ПЕРЕВОД¶
Перевел с английского Алексей Миллер <asm@asm.kiev.ua> 2000
27 апреля 1999 | Страница руководства по Linux |