НАЗВАНИЕ¶
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