ICMP

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

Міжмережевий протокол керуючих повідомлень ICMP (Internet Control Message Protocol), специфікований у RFC 792, відіграє роль транспортного протоколу для керуючої і діагностичної інформації, який обмінюються між собою IP-, TCP- або UDP-модулі потай від додатків. Протокол ICMP підтримується в обов'язковому порядку кожним IP-модулем. Його транспортна адреса в IP-заголовку дорівнює 1.


Заголовок ICMP-пакета

Оскільки протокол ICMP використовується для транспортування досить різної інформації, то фіксується лише загальна структура заголовка ICMP-пакета, що має формат, показаний на малюнку нижче:

        0         7          15                      31
       +-----------+-----------+-----------------------+
       |    Тип    |    Код    |   Контрольна сума   |
       +-----------+-----------+-----------------------+
       |                    Різне                     |
       +-------------------------------------------------+
       :                  Тіло пакета:                 :
       : IP-заголовок і наступні за ним 8 байт даних :
       :                      або                      :
       :                тестові дані                :
       +--------------------------------------------------+

Тип однобайтове поле, що містить ідентифікатор типу ICMP-пакета. Можливі значення цього поля приведені в таблиці.

   ---------------+---------------------------
   Поле "Тип" | Призначення
   ---------------+----------------------------
       0        Відповідь на запит луни (эхо)
       3        Адресат недоступний
       4        Придушення джерела
       5        Перенаправлення
       8        Запит луни
      11        Вичерпаний час життя
      12        Помилка в параметрі
      13        Запит тимчасової мітки
      14        Відповідь на запит тимчасової мітки
   --------------+------------------------------

Код: однобайтове поле, значення якого конкретизує призначення ICMP-пакета визначеного типу.

Контрольна сума: 16-бітове поле, що містить Internet-контрольну суму, підраховану для всього ICMP-пакета цілком.

Різне: чотирибайтове поле, призначене для збереження різноманітної інформації, специфічної для ICMP-пакетів визначеного типу (наприклад, номера в TCP-послідовності, IP-адреси і т.п.).

Тіло пакета: тут утримується заголовок IP-сегмента, який є породженням даного ICMP-пакета, і перші 8 байт дані тіла цього IP-сегмента. Якщо ICMP-пакет є результат прояву аномалії в TCP- або UDP-взаємодії, то ці 8 байт будуть являти собою перші вісім байтів, відповідно, TCP- або UDP-заголовка, що дає можливість визначити, зокрема, номери портів (а, отже, і їхні прикладні програми, що використовують,). Для ICMP-пакетів деяких типів це може містити не початок IP-сегмента, а тестові дані.

Джерелами й оброблювачами ICMP-пакетів могуть бути як IP-модулі, так і TCP- і UDP-модулі (але ніколи прикладні програми).

Проблеми в доставці й обробці ICMP-пакетів ніколи не приводять до породження нових ICMP-пакетів, що повідомляють про ці проблеми. Зроблено це з метою уникнути можливих нескінченних циклів генерації ICMP-пакетів у мережі.

Типи ICMP-пакетів

Тут розглядаються 6 типів ICMP-пакетів, реалізованих у всіх клонах і версіях ОС UNIX.

Адресат недоступний ICMP-пакет цього типу генерується в наступних випадках: - мережа, вузол мережі, протокол або порт є недоступними; - у ході просування по мережі IP-сегмента потрібна була його фрагментація, однак у заголовку сегмента встановлений прапор DF, що забороняє робити це; - маршрут, що пропонується, зазначений у поле додаткових даних IP-сегмента, виявився недійсним (неіснуючим або неактивним).

Придушення джерела У ситуаціях, коли деякий вузол (як правило, шлюз) не має досить місця у своїх буферах для розміщення даних, що інтенсивно надходять до нього, він може послати вузлам-джерелам ICMP-пакет даного типу (source quench). Вузол-джерело у відповідь на таке повідомлення зобов'язаний зменшити темп передачі даних.

У ранніх UNIX-реалізаціях протоколів TCP/IP ICMP-пакети цього типу ігнорувалися. У TCP-реалізаціях, що підтримують алгоритм повільного старту, у відповідь на це повідомлення зменшується розмір "вікна перевантаженості". UDP-модулі ігнорують це повідомлення, інформуючи при цьому прикладну програму, що обслуговується, про вимогу приймача зменшити інтенсивність і/або розмір дэйтаграмм.

Перенапрямок ICMP-пакет цього типу посилається джерелу даних, коли вузол-шлюз виявляє, що джерело може направляти свої дані безпосередньо до наступного шлюзу маршруту. Такий ICMP-пакет містить у собі IP-адреса цього шлюзу. Ця IP-адреса повинна бути включена в таблицю маршрутизації на вузлі-джерелі даних.

Луна (Эхо) Для реалізації луни IP-модуль на вузлі A відправляє вузлові B ICMP-пакет типу "запит луни", що містить у своєму тілі замість IP-заголовка тестові дані довільної довжини. Вузол B, одержавши такий запит, повертає вузлу A ICMP-пакет типу "відповідь на запит луни", що містить ті ж дані, що й у запиті. Луни-посилки використовуються для перевірки досяжності вилучених вузлів мережі і виміри часу проходження даних.

Вичерпано час життя ICMP-пакет даного типу посилається джерелу IP-сегмента, що повинний бути скинутий по одній із двох причин: 1) вичерпаний час життя IP-сегмента; 2) вичерпаний припустимий час на зборку фрагментированного IP-сегмента.

Невірний параметр За допомогою ICMP-пакета даного типу джерело IP-сегмента інформується про те, що даний сегмент скинутий унаслідок наявності помилки в якому-небудь з полів його заголовка


TCP/IP