Литмир - Электронная Библиотека
Содержание  
A
A

Первые 32 бита сообщений совпадают для ICMPv4 и ICMPv6 и приведены на рис. А.10. ICMPv4 документируется в RFC 792 [95], а ICMPv6 — в RFC 2463 [21].

UNIX: разработка сетевых приложений - img_178.png

Рис. А.10. Формат сообщений ICMPv4 и ICMPv6

Восьмиразрядное поле тип (type) указывает тип сообщения ICMPv4 или ICMPv6, а некоторые типы имеют дополнительную 8-разрядную информацию, указанную в поле кода (code). Поле контрольной суммы (checksum) является стандартной контрольной суммой, используемой в сети Интернет. Отличия между ICMPv4 и ICMPv6 заключаются в том, какие именно поля используются при подсчете контрольной суммы.

С точки зрения сетевого программирования необходимо понимать, какие сообщения ICMP могут быть возвращены приложению, что именно вызывает ошибку и каким образом эта ошибка возвращается приложению. В табл. А.5 приведены все сообщения ICMPv4 и показано, как они обрабатываются операционной системой 4.4BSD. В последнем столбце приведены значения переменной

errno
— то есть те ошибки, которые возвращаются приложениям. В табл. А.6 приведен список сообщений ICMPv6. При использовании TCP ошибка не возвращается приложению немедленно. Если TCP разрывает соединение по тайм-ауту, все накопленные ошибки возвращаются приложению. При использовании UDP ошибка возвращается при очередной операции чтения или записи, но только на присоединенном сокете (раздел 8.9).

Таблица А.5. Обработка различных типов ICMP-сообщений в 4.4BSD

Тип Код Описание Обработчик или errno
0 0 Echo-reply (Эхо-ответ) Пользовательский процесс (Ping)
3 Destination unreachable (Получатель недоступен)
0 Network unreachable (Сеть недоступна) EHOSTUNREACH
1 Host unreachable (Узел недоступен) EHOSTUNREACH
2 Protocol unreachable (Протокол недоступен) ECONNREFUSED
3 Port unreachable (Порт недоступен) ECONNREFUSED
4 Fragmentation needed but DF bit set (Необходима фрагментация, но установлен бит DF) EMSGSIZE
5 Source route failed (Сбой маршрута отправителя) EHOSTUNREACH
6 Destination network unknown (Неизвестна сеть получателя) EHOSTUNREACH
7 Destination host unknown (Неизвестен узел получателя) EHOSTUNREACH
8 Source host isolated (Узел отправителя изолирован). Устаревший тип сообщений EHOSTUNREACH
9 Destination network administratively prohibited (Сеть получателя запрещена администратором) EHOSTUNREACH
10 Destination host administratively prohibited (Узел получателя запрещен администратором) EHOSTUNREACH
11 Network unreachable for TOS (Сеть недоступна для TOS) EHOSTUNREACH
12 Host unreachable for TOS (Узел недоступен для TOS) EHOSTUNREACH
13 Communication administratively prohibited (Связь запрещена администратором) (Игнорируется)
14 Host precedence violation (Нарушение порядка старшинства узлов) (Игнорируется)
15 Precedence cutoff in effect (Действует старшинство узлов) (Игнорируется)
4 0 Source quench (Отключение отправителя) Обрабатывается ядром в случае TCP, игнорируется в случае UDP
5 Redirect (Перенаправление)
0 Redirect for network (Перенаправление для сети) Ядро обновляет таблицу маршрутизации
1 Redirect for host (Перенаправление для узла) Ядро обновляет таблицу маршрутизации
2 Redirect for type-of-service and network (Перенаправление для типа сервиса и сети) Ядро обновляет таблицу маршрутизации
3 Redirect for type of service and host (Перенаправление для типа сервиса и узла) Ядро обновляет таблицу маршрутизации
8 0 Echo request (Эхо-запрос) Ядро генерирует ответ
9 0 Router advertisement (Извещение маршрутизатора) Пользовательский процесс
10 0 Router solicitation (Запрос маршрутизатору) Пользовательский процесс
11 Time exceeded (Превышено время передачи)
0 TTL equals 0 during transit (Время жизни равно 0 во время передачи) Пользовательский процесс
1 TTL equals 0 during reassembly (Время жизни равно 0 во время сборки) Пользовательский процесс
12 Parameter problem (Проблема с параметром)
0 IP header bad (Неправильный IP-заголовок). Типичная ошибка ENOPROTOOPT
1 Required option missed (Пропущен необходимый параметр) ENOPROTOOPT
13 0 Timestamp request (Запрос отметки времени) Ядро генерирует ответ
14 0 Timestamp reply (Ответ об отметке времени) Пользовательский процесс
15 0 Information request (Информационный запрос). Устаревший тип сообщений (игнорируется)
16 0 Information reply (Информационный ответ). Устаревший тип сообщений Пользовательский процесс
17 0 Address mask request (Запрос маски адреса) Ядро генерирует ответ
18 0 Address mask reply (Ответ маски адреса) Пользовательский процесс
371
{"b":"225366","o":1}