3.5.2. Сообщения об ошибках ICMP

Как видно из табл. 3.5, в ICMP определено множество различных типов сообщений, включая пять типов сообщений об ошибках.

Сообщения об ошибках «пункт назначения недоступен»

Изначально ICMP требовался для того, чтобы маршрутизатор мог сообщить о проблемах при доставке пакета. Если маршрутизатор не в состоянии направить пакет по нужному пути, он генерирует сообщение об ошибке типа 3 и посылает его компьютеру-источнику. Поскольку генерация такого рода сообщений была основной задачей ICMP, сообщения «пункт назначения недоступен» имеют наибольшее количество вариантов. Шестнадцать (0—15) кодов ошибок сообщения «пункт назначения недоступен» приведены в табл. 3.6.

Таблица 3.6

Сообщения об ошибках ICMP типа пункт назначения недоступен

Код

Описание

0

Сеть недоступна (network unreacnable)

1

Компьютер недоступен (host unreachable)

2

Протокол недоступен (protocol unreachable)

3

Порт недоступен (port unreachable)

4

Фрагментация необходима, но запрещена (fragmentation needed and DF set)

5

Маршрутизация на заказ не удалась (source route failed)

6

Сеть назначения неизвестна (destination network unknown)

7

Компьютер назначения неизвестен (destination host unknown)

8

Компьютер-источник изолирован (устарело) (source host isolated)

9

Доступ в сеть назначения запрещен (destination network administratively prohibited)

10

Доступ в компьютер назначения запрещен (destination host administratively prohibited)

11

Для этого типа службы сеть недоступна (network unreachable ,for type-of-service, TOS)

12

Для этого типа службы компьютер недоступен (host unreachable for type-of-service, TOS)

13

Связь запрещена из-за фильтрации (communication administratively prohibited by filtering)

14

He соблюдается приоритет хоста (host precedence violation)

15

Снижение приоритета (precedence cutoff in effect)

Протокол IP не гарантирует доставку данных. С другой стороны, он почти всегда успешно справляется с доставкой. Если IP не удается доставить датаграмму, значит, возникла сетевая проблема, например ошибки при маршрутизации. Если вы внимательно изучили табл. 3.6, то, наверное, заметили, что большинство сообщений об ошибках относятся либо к компьютеру, либо к сети. Как правило, сообщения, относящиеся к компьютеру, означают проблему с доставкой, а сообщения, относящиеся к сети, — проблему с маршрутизацией. Так, например, код ошибки «сеть недоступна» означает проблему с маршрутизацией. На рис. 3.13 изображен формат ICMP-сообщения «пункт назначения недоступен».

Формат сообщения подобен общему формату, изображенному на рис. 3.12. Тип сообщения в поле типа равен трем, а поле кода (Code) соответствует коду ошибки от 0 до 15. Кроме того, в ICMP-сообщении содержится заголовок IР-датаграммы, вызвавшей его появление, и первые 64 бита (восемь байт) ее данных.

32 бита

Позиции битов

0                   7

8                   15

16                                              31

Тип (3)

Код (0-15)

Контрольная сумма

Не используется (заполняется нулями)

IP-заголовок, включая опции и первые 64 бита данных их первоначальной датаграммы

Рис. 3.13. Формат ICMP-сообщения «пункт назначения недоступен»

Пункт назначения может быть недоступен, если IP-заголовок содержит неправильный адрес назначения, либо если какое-нибудь промежуточное сетевое устройство выключено, либо, что менее вероятно, в таблице маршрутизации отсутствует путь к сети назначения. Все маршрутизаторы обязаны сообщать о сбое при доставке пакета источнику этого пакета. К сожалению, сами эти сообщения могут теряться. Существующая вероятность потери сообщения об ошибке делает протокол ICMP ненадежным.

Сообщения об ошибках перенаправления

Чтобы выяснить, по какому маршруту послать пакет, переключатели пакетов TCP/IP пользуются таблицами маршрутизации. Маршрутизация пакета основывается на номере сети назначения, а идентификатор сети назначения — это часть IP-адреса. Каждый маршрутизатор знает своего соседа, то есть следующую «остановку», которых может быть несколько, на пути пакета данных. В некоторых случаях к определенной сети могут вести несколько маршрутов. Для постоянного слежения за состоянием сети маршрутизаторы периодически обмениваются сообщениями. Тем не менее таблицы маршрутизации обновляются не очень часто. Исходные данные для них хранятся в местных файлах конфигурации — это минимально необходимая для начала работы маршрутизатора информация, как правило, адрес другого маршрутизатора или шлюза.

Компьютеры обновляют свои таблицы, основываясь на информации от маршрутизаторов и сообщения о перенаправлении ICMP — один из способов решать эту задачу.

Предположим, что ваш компьютер посылает датаграмму на компьютер коллеги, расположенный, как показано на рис. 3.14, в другой физической сети. Чтобы послать датаграмму, необходимо обратиться к маршрутизатору. Предположим, что датаграмма посылается маршрутизатору номер 2. Исследовав свою таблицу, маршрутизатор обнаружит, что компьютер коллеги находится на расстоянии одного «прыжка» от маршрутизатора номер 1 и что именно ему следует послать датаграмму. В результате датаграмма отправляется к маршрутизатору номер 1.

Кроме того, маршрутизатор номер 2 знает (из содержимого датаграммы и собственной таблицы), что ваш компьютер подсоединен к маршрутизатору номер 1 напрямую, а следовательно, датаграмму можно слать сразу ему — это будет оптимальный маршрут. Как только маршрутизатор определит, что существует лучший маршрут, он отправит ICMP-сообщение о перенаправлении компьютеру-источнику датаграммы. На рис. 3.15 показан формат сообщения о перенаправлении.

32 бита

Позиции битов

0                    7

8                     15

16                                          31

Тип (5)

Код (0-3)

Контрольная сумма

IP-адрес маршрутизатора

IP-заголовок, включая опции и первые 64 бита данных их первоначальной датаграммы

Рис. 3.15. ICMP-сообщение о перенаправлении (тип 5)

Компьютер-передатчик выясняет, что следующие датаграммы лучше слать маршрутизатору, IP-адрес которого содержится в ICMP-сообщении. Другими словами, получив ICMP-сообщение о перенаправлении, ICMP-модуль компьютера должен исследовать содержимое заголовка IP-датаграммы (в теле сообщения) и IP-адрес маршрутизатора (второе 32-битное слово в заголовке сообщения). IP-заголовок даст адрес, по которому датаграммы шли неверным маршрутом, а IP-адрес маршрутизатора — тот маршрутизатор, который нужно использовать следующим. Эта информация может потребоваться для обновления таблицы маршрутизации сетевого компьютера. В табл. 3.7 приведены четыре кода сообщений о перенаправлении (тип 5). В примере на рис. 3.14 маршрутизатор пошлет сообщение типа 5 с кодом 1 (перенаправление для хоста).

Таблица 3.7

ICMP-сообщения об ошибках перенаправления (тип 5)

Код

Описание

0

Перенаправление для сети

1

Перенаправление для хоста (сетевого компьютера)

2

Перенаправление для сети по типу сетевой службы (TOS)

3

Перенаправление для хоста по типу сетевой службы (TOS)

Как видим, маршрутизатор может перенаправить сообщение, основываясь на содержимом поля «тип сетевой службы» (TOS) IP-заголовка датаграммы. Поле TOS заголовка датаграммы определяет ее приоритет. Хотя это поле применяется редко, в будущем, несомненно, его значение возрастет. Поэтому в ICMP заложена возможность помогать сетевым компьютерам обновлять таблицы маршрутизации, в зависимости от типа сетевой службы, которой принадлежит та или иная датаграмма. Протокол ICMP ограничивает сферу применения сообщений о перенаправлении. Каждый сетевой компьютер, в принципе, может работать маршрутизатором. Однако только системы, сконфигурированные как маршрутизаторы, могут посылать ICMP-сообщения о перенаправлении. Обыкновенный сетевой компьютер сделать этого не может. Далее, маршрутизаторы не обновляют свои таблицы, основываясь на сообщениях о перенаправлении. Вместо этого маршрутизаторы используют специальные протоколы.

Ошибки типа «лимит времени исчерпан»

Как известно, ошибки в таблицах маршрутизации могут привести к зацикливанию пакета между двумя маршрутизаторами. Это может случиться, когда каждый из них считает, что соседний маршрутизатор — наилучшее место для передачи пакета по назначению. Заголовок IP-датаграммы содержит специальное поле «время существования» (Time-to-Live, TTL), в котором время существования датаграммы ограничивается. Каждый маршрутизатор на пути пакета уменьшает время его существования. Время существования также уменьшается каждую секунду, которую пакет проводит во входной или выходной очереди маршрутизатора.

Как только время существования в поле TTL IP-датаграммы сравняется с нулем, сетевые программы уничтожат пакет и вышлют ICMP-сообщение «лимит времени исчерпан» (тип 11) компьютеру-источнику пакета. Формат ICMP-сообщения «лимит времени исчерпан» такой же, как у сообщения «пункт назначения недоступен», но поле Туре равно 11 вместо 3. Сообщения «лимит времени исчерпан» бывают двух видов, как показано в табл. 3.8. Код 0 устанавливается в случае, если датаграмма исчерпала время существования во время пересылки (например, из-за описанного выше зацикливания). Код 1 устанавливается, если произошел сброс таймера сборки фрагментов датаграммы до того, как все фрагменты прибыли.

Таблица 3.8

ICMP-сообщения об ошибках «лимит времени исчерпан» (тип 11)

Код

Описание

0

Поле время существования (TTL) сравнялось с нулем во время передачи датаграммы

1

Таймер сборки фрагментов истек

Когда компьютер-получатель принимает датаграмму с установленным флагом «фрагмент-продолжение», запускается таймер сборки фрагментов. Все фрагменты обязаны появиться до того, как этот таймер истечет. Если таймер истек, а датаграмма все еще не собрана, она уничтожается. В этом случае генерируется ICMP-сообщение типа 11 с кодом 1.

Ошибки «неверный параметр»

Компьютеры и маршрутизаторы высылают такое сообщение, если источник проблемы с маршрутизацией или доставкой неизвестен. Существуют два типа таких ICMP-сообщений, как показано в табл. 3.9.

Таблица 3.9

ICMP-сообщение об ошибке «неверный параметр» (тип 12)

Код

Описание

0

Неверный IP-заголовок

1

Необходимая опция отсутствует

Сообщение с кодом 1 генерируется, если датаграмма не содержит всех необходимых для нормальной работы TCP/IP атрибутов (опций). Предположим, вы разработали криптозащищенный протокол для работы с приложениями государственной важности. Если программа-клиент попытается передать запрос к серверу и не приложит специального секретного ключа к датаграмме, сервер ответит сообщением об ошибке типа «необходимая опция отсутствует». Сообщение типа «неверный IP-заголовок» генерируется во всех остальных случаях, когда источник ошибки невозможно распознать. На рис. 3.16 приведен формат сообщения ICMP «неверный параметр». Поле указателя (pointer) идентифицирует тот байт датаграммы, который привел к возникновению ICMP-сообщения. Для сообщений с кодом 1 («необходимая опция отсутствует») поле указателя равно нулю.

32 бита

Позиции битов

0                 7

8                    15

16                                        31

Тип (12)

Код (0-1)

Контрольная сумма

Указатель

Не используется (заполняется нулями)

IP-заголовок, включая опции и первые 64 бита данных их первоначальной датаграммы

Рис. 3.16. Формат ICMP -сообщения «неверный параметр» (тип 12)

Сообщение об ошибке «столкновение данных»

Механизм контроля потока данных гарантирует, что передатчик не будет передавать быстрее, чем приемник в состоянии принять и обработать. Другими словами, гарантируется, что входной буфер приемника не переполнится. Протокол TCP обеспечивает механизм управления потоком в качестве одной из сетевых служб. К сожалению, управление потоком возможно лишь тогда, когда протокол ориентирован на соединение. Поскольку IP не ориентирован на соединение, он не умеет управлять потоком данных. Поскольку маршрутизаторы работают на уровне IP, в их входных очередях может создаваться аналог транспортной пробки в часы пик в результате слишком большого количества вновь приходящих IP-пакетов. Если маршрутизатор не успевает обработать все приходящие пакеты, то «лишние» пакеты уничтожаются, а компьютеру-источнику пакета направляется ICMP-сообщение об ошибке «столкновение данных» (тип 4). Сообщение «столкновение данных» указывает компьютеру на необходимость снизить скорость передачи. На самом деле, механизм сообщений «столкновение данных» является некоторым подобием управления потоком данных на уровне IP. Для каждого уничтоженного в результате столкновения пакета, маршрутизатор высылает ICMP-сообщение. Как только компьютер получает его, он тут же снижает скорость передачи.

Если маршрутизатор продолжает передавать ICMP-сообщения «столкновение данных», компьютер продолжает снижать скорость передачи. Как только ICMP-сообщения перестают появляться, компьютер вновь начинает увеличивать скорость. И так до тех пор, пока не будет достигнута оптимальная скорость. Формат сообщения

ICMP «столкновение данных» тот же, что и у сообщения «пункт назначения недоступен», только поле типа имеет значение 4. Сообщение «столкновение данных» бывает только единственного вида, то есть поле кода у него всегда имеет значение 0 — других кодов не бывает.