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