logo
Part_3

Повідомлення icmp

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

Рис. 3.31. ICMP-повідомлення, інкапсульоване в IP-данограму.

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

Тип (type)

тип ICMP-повідомлення; всього існує 15 різних типів;

Код (code)

код ICMP-повідомлення одного типу;

Контрольна сума ICMP (checksum)

16-бітова контрольна сума, що охоплює все ICMP-повідомлення, обчислюється так само як для IP-заголовку; для обчислення контрольної суми поле повинне мати значення 0.

Ідентифікатор (identifier)

Ідентифікатор, який застосовується для узгодження запиту/відповіді; повинен дорівнювати нулю.

Номер послідовності (sequence number)

Номер послідовності, який застосовується для узгодження запити/відповіді; повинен дорівнювати нулю.

Маска адреси (address mask)

32-бітова маска адреси

Дані ICMP (body)

Саме повідомлення, має змінну довжину, його формат залежить від типу ICMP-повідомлення.

Нижче наведені всі типи ICMP-повідомлень та їх короткий опис.

Тип

Зміст

0

ехо (відповідь)

3

призначення недосяжне

4

обірвання джерела

5

переспрямування

8

ехо (запит)

9

оголошення раутера

10

вимога раутера

11

час вичерпаний (TTL=0)

12

проблема із параметром

13

запит часової позначки

14

відповідь про часову позначку

15

запит інформації (застаріле)

16

відповідь про інформацію (застаріле)

17

запит мережевої маски

18

відповідь про мережеву маску

Поле код містить код помилки для данограми, про яку повідомляється у даному ICMP-повідомленні. Інтерпретація коду залежить від типу повідомлення:

Тип

Код

Зміст

3

0

мережа недосяжна

3

1

станція недосяжна

3

2

протокол недосяжний

3

3

порт недосяжний

3

4

необхідна фрагментація і встановлено DF-біт

3

5

невдалий маршрут від джерела

3

6

невідома мережа призначення

3

7

невідомий станція призначення

3

8

станція-джерело ізольована (застаріла)

3

9

доступ до мережі призначення адміністративно заборонений

3

10

доступ до станції-призначення адміністративно заборонений

3

11

для вибраного TOS мережа недосяжна

3

12

для вибраного TOS комп’ютер недосяжний

3

13

зв’язок адміністративно заборонений за допомогою фільтрування:

3

14

порушення приорітету комп’ютера

3

15

роз’єднання на основі приорітету

5

0

переспрямування для мережі

5

1

переспрямування для станції

5

2

переспрямування для мережі на основі TOS

5

3

переспрямування для станції на основі TOS

11

0

TTL рівне 0 під час транзитної передачі

11

1

TTL рівне 0 під час реасемблювання данограми

12

помилка в параметрі:

12

0

неправильний IP-заголовок

12

1

опція, що вимагається, відсутня

Існують два прості і дуже поширені застосування, які базуються на ICMP – ping і traceroute. Ping використовує повідомлення Echo і Echo Reply для визначення, чи потрібна станція досяжна. Traceroute висилає IP-данограму з малим значенням TTL, так що таймер TTL вичерпується на маршруті до призначення. Тоді traceroute використовує ICMP-повідомлення Time Exceeded для встановлення, де в об’єднанні мереж данограма вичерпала час існування і поєднує це з маршрутом до станції. Важливе застосування протоколу ICMP для раутінгу IP-данограм буде розглянене нижче.

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4