ИМЯ
icmp - модуль
    ядра Linux,
    реализующий
    протокол IPv4
  ICMP
ОПИСАНИЕ
Этот
    модуль
    ядра
    реализует
    Internet Control Message Protocol,
    описанный
    в RFC 792. Он
    используется
    для
    извещения
    об ошибках
    и для
    диагностики.
    Пользователь
    не
    взаимодействует
    напрямую с
    этим
    модулем;
    вместо
    этого он
    работает с
    другими
    протоколами
    в ядре, а они
    при помощи
    протокола
    ICMP передают
    ошибки на
    уровень
    приложения.
    Кроме того,
    этот
    модуль
    отвечает
    на
    ICMP-запросы.
Пользовательский
    протокол
    может
    получать
    ICMP-пакеты
    для всех
    локальных
    сокетов,
    если
    откроет
    неструктурированный
    (raw) сокет,
    используя
    протокол
    IPPROTO_ICMP. Более
    подробную
    информацию
    смотрите в
    raw(7). Типы
    ICMP-пакетов,
    передаваемые
    в сокет,
    могут быть
    отфильтрованы
    с помощью
    параметра
    сокета ICMP_FILTER.
    Пакеты ICMP
    всегда
    обрабатываются
    ядром, даже
    когда
    передаются
    в
    пользовательский
    сокет.
Linux
    ограничивает
    для
    каждого
    получателя
    поток
    ICMP-пакетов с
    сообщениями
    об ошибках.
    Количество
    ICMP_REDIRECT и ICMP_DEST_UNREACH
    также
    ограничивается
    для
    каждого
    отправителя
    приходящих
    пакетов.
Интерфейсы
  в /proc
Для
    настройки
    некоторых
    глобальных
    параметров
    IP ICMP
    поддерживает
    набор
    интерфейсов
    в /proc. Эти
    параметры
    доступны
    на чтение и
    запись
    через
    файлы в
    каталоге
    /proc/sys/net/ipv4/.
    Большинство
    параметров
    служит для
    управления
    ограничением
    потока
    пакетов ICMP
    определённых
    типов. В Linux 2.2
    для
    ограничения
    ICMP
    используется
    фильтр
    «протекающего
    ведра» (token bucket).
    Значение —
    задержка в
    jiffy,
    отведённая
    на очистку
    фильтра
    после
    всплеска.
    Величина jiffy
    зависит от
    архитектуры
    машины,
    обычно, это
    10мс на i386 и
    около 1мс на
    alpha и ia64.
  - icmp_destunreach_rate
    (в Linux с 2.2 по 2.4.9)
- Максимальная
      частота
      посылки
      ICMP-пакетов с
      типом Destination Unreachable
      по каждому
      конкретному
      маршруту
      или
      получателю.
      Ограничение
      не влияет
      на посылку
      пакетов
      ICMP_FRAG_NEEDED,
      необходимых
      для
      определения
      MTU для
      маршрута.
- icmp_echo_ignore_all
    (начиная с Linux
    2.2)
- Если
      значение
      больше
      нуля, то Linux
      будет
      игнорировать
      все
      запросы
    ICMP_ECHO.
- icmp_echo_ignore_broadcasts
    (начиная с Linux
    2.2)
- Если
      значение
      больше
      нуля, то Linux
      будет
      игнорировать
      все пакеты
      ICMP_ECHO,
      посланные
      по
      широковещательным
      адресам.
- icmp_echoreply_rate
    (в Linux с 2.2 по 2.4.9)
- Максимальная
      частота
      посылки
      пакетов
      ICMP_ECHOREPLY в ответ
      на запросы
      ICMP_ECHOREQUEST.
- icmp_errors_use_inbound_ifaddr
    (логический;
    по
    умолчанию:
    выключено;
    начиная с Linux
    2.6.12)
- Если
      выключено,
      то
      сообщения
      ICMP об
      ошибках
      посылаются
      с
      первичным
      адресом
      существующего
      интерфейса.
  
  - Если
      включено,
      то
      сообщения
      будут
      посылаться
      с
      первичным
      адресом
      интерфейса,
      на который
      поступил
      пакет,
      вызвавший
      ошибку ICMP.
      Такое
      поведение
      соответствует
      работе
      маршрутизаторов,
      как этого
      ожидают
      сетевые
      администраторы.
      Также, это
      позволяет
      облегчить
      диагностику
      проблем в
      сложных
      сетях.
- Заметим,
      что если на
      нужном
      интерфейсе
      первичный
      адрес не
      задан, то
      используется
      адрес
      первого
      интерфейса,
      не
      являющегося
      обратной
      петлёй, и
      значение
      данного
      параметра
      не
      учитывается.
  - icmp_ignore_bogus_error_responses
    (логический;
    по
    умолчанию:
    выключено;
    начиная с Linux
    2.2)
- Некоторые
      маршрутизаторы
      нарушают RFC1122,
      отправляя
      фиктивные
      ответы на
      широковещательные
      пакеты. Эти
      нарушения,
      обычно,
      протоколируются
      предупреждением
      ядра. Если
      этот
      параметр
      включён, то
      ядро не
      будет
      выдавать
      такие
      предупреждения,
      что
      позволяет
      не
      засорять
      файл
      журнала.
- icmp_paramprob_rate
    (в Linux с 2.2 по 2.4.9)
- Максимальная
      частота
      посылки
      пакетов
      ICMP_PARAMETERPROB. Эти
      пакеты
      посылаются,
      когда
      приходит
      пакет с
      ошибочным
      заголовком
      IP.
- icmp_ratelimit
    (целое; по
    умолчанию:
    1000; начиная с
    Linux 2.4.10)
- Ограничивает
      скорость
      отправки
      пакетов ICMP
      для
      определённого
      получателя,
      чьи типы
      совпадают
      с icmp_ratemask
      (смотрите
      далее).
      Значение 0
      отключает
      ограничение,
      иначе
      указывается
      минимальная
      задержка
      между
      ответами в
      миллисекундах.
- icmp_ratemask
    (целое; по
    умолчанию:
    смотрите
    далее;
    начиная с Linux
    2.4.10)
- Маска
      типов ICMP, для
      которых
      накладывается
      ограничение.
  
  - Расстановка
      битов: IHGFEDCBA9876543210
    
    Маска по
      умолчанию:
      0000001100000011000 (0x1818)
- Описание
      битов
      (смотрите
      файл include/linux/icmp.h
      из
      исходного
      кода ядра
    Linux):
  
    | 0 Ответное
      эхо | 
  
    | 3
      Назначение
      недостижимо
      * | 
  
    | 4 Погасить
      источник * | 
  
    | 5
      Перенаправление | 
  
    | 8 Запрос
      эхо | 
  
    | B Время
      вышло * | 
  
    | C Проблема
      с
      параметром
      * | 
  
    | D Запрос
      метки
      времени | 
  
    | E Ответ
      меткой
      времени | 
  
    | F Запрос
      информации | 
  
    | G Ответ
      информацией | 
  
    | H Запрос
      маски
      адреса | 
  
    | I Ответ
      маской
      адреса | 
 
Для битов,
    помеченных
    звёздочкой,
    ограничение
    включено
    по
    умолчанию
    (смотрите
    маску по
    умолчанию,
    приведённую
    ранее).
  - icmp_timeexceed_rate
    (в Linux с 2.2 по 2.4.9)
- Максимальная
      частота
      посылки
      пакетов
      ICMP_TIME_EXCEEDED. Эти
      пакеты
      посылаются
      для
      предотвращения
      зацикливания,
      когда
      пакет
      прошёл
      слишком
      большое
      количество
      транзитных
      участков
    (hops).
- ping_group_range
    (два целых
    числа;
    значение
    по
    умолчанию
    смотрите
    далее;
    начиная с Linux
    2.6.39)
- Диапазон ID
      групп
      (минимальный
      и
      максимальный
      ID группы,
      включительно),
      которым
      разрешено
      создавать
      сокеты ICMP Echo.
      По
      умолчанию
      «1 0», что
      означает,
      что всем
      группам
      запрещено
      создавать
      сокеты ICMP Echo.
ВЕРСИИ
Поддержка
    запроса ICMP_ADDRESS
    была
    удалена из
    2.2.
Поддержка
    ICMP_SOURCE_QUENCH была
    удалена из
    Linux 2.2.
ЗАМЕЧАНИЯ
Так как
    многие
    реализации
    не
    поддерживают
    неструктурированные
    сокеты IPPROTO_ICMP,
    то
    использование
    этой
    возможности
    нежелательно
    при
    написании
    переносимых
    программ.
Пакеты
    ICMP_REDIRECT не
    посылаются,
    если Linux не
    работает
    как
    маршрутизатор.
    Также, они
    принимаются
    только от
    старых
    шлюзов,
    определённых
    в таблице
    маршрутизации,
    причем
    информация
    о
    перенаправлении
    маршрутов
    устаревает
    через
    некоторое
    время.
Значения
    64-битных
    временных
    меток,
    возвращаемых
    по ICMP_TIMESTAMP,
    отсчитываются
    в
    миллисекундах
    с начала
    Эпохи, 1970-01-01 00:00:00 +0000
  (UTC).
В
    Linux-реализации
    ICMP для
    посылки
    ICMP-пакетов
    используются
    неструктурированные
    сокеты.
    Такие
    сокеты
    могут
    показываться
    программой
    netstat(8), при этом
    их inode будет
    равен 0.
СМОТРИТЕ
  ТАКЖЕ
ip(7), rdisc(8)
В RFC 792
    приведено
    описание
    протокола
    ICMP.