Книга: UNIX: разработка сетевых приложений
А.6. ICMPv4 и ICMPv6: протоколы управляющих сообщений в сети Интернет
А.6. ICMPv4 и ICMPv6: протоколы управляющих сообщений в сети Интернет
Протокол ICMP (Internet Control Message Protocol) является необходимой и неотъемлемой частью любой реализации IPv4 или IPv6. Протокол ICMP обычно используется для обмена сообщениями об ошибках между узлами, как маршрутизирующими, так и обычными, но иногда этот протокол используется и приложениями. Например, приложения ping
и traceroute
(см. главу 28) используют протокол ICMP.
Первые 32 бита сообщений совпадают для ICMPv4 и ICMPv6 и приведены на рис. А.10. ICMPv4 документируется в RFC 792 [95], а ICMPv6 — в RFC 2463 [21].
Рис. А.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 (Ответ маски адреса) | Пользовательский процесс |
Таблица А.6. Сообщения ICMPv6
Тип | Код | Описание | Обработчик или errno |
---|---|---|---|
1 | Administratively prohibited, firewall filter (Запрещено администратором, фильтр брандмауэра) | EHOSTUNREACH | |
2 | Not a neighbor, incorrect strict source route (He сосед, некорректный маршрут отправителя) | EHOSTUNREACH | |
3 | Address unreachable (Адрес недоступен) | EHOSTDOWN | |
4 | Port unreachable (Порт недоступен) | ECONNREFUSED | |
2 | 0 | Packet too big (Слишком большой пакет) | Ядро выполняет обнаружение транспортной MTU |
3 | Time exceeded (Превышено время передачи) | ||
0 | Hop limit exceeded in transit (При передаче превышено значение предельного количества транзитных узлов) | Пользовательский процесс | |
1 | Fragment reassembly time exceeded (Истекло время сборки из фрагментов) | Пользовательский процесс | |
4 | Parameter problem (Проблема с параметром) | ||
0 | Erroneous header filed (Ошибочное поле заголовка) | ENOPROTOOPT | |
1 | Unrecognized next header (Следующий заголовок нераспознаваем) | ENOPROTOOPT | |
2 | Unrecognized option (Неизвестный параметр) | ENOPROTOOPT | |
128 | 0 | Echo request (Эхо-запрос (Ping)) | Ядро генерирует ответ |
129 | 0 | Echo reply (Эхо-ответ (Ping)) | Пользовательский процесс (Ping) |
130 | 0 | Group membership query (Запрос о членстве в группе) | Пользовательский процесс |
131 | 0 | Group membership report (Отчет о членстве в группе) | Пользовательский процесс |
132 | 0 | Group membership reduction (Сокращение членства в группе) | Пользовательский процесс |
133 | 0 | Router solicitation (Запрос маршрутизатору) | Пользовательский процесс |
134 | 0 | Router advertisement (Извещение маршрутизатора) | Пользовательский процесс |
135 | 0 | Neighbor solicitation (Запрос соседу) | Пользовательский процесс |
136 | 0 | Neighbor advertisement (Извещение соседа) | Пользовательский процесс |
137 | 0 | Redirect (Перенаправление) | Ядро обновляет таблицу маршрутизации |
Запись «пользовательский процесс» в этой таблице означает, что ядро не обрабатывает сообщение и ждет обработки данного сообщения от пользовательского процесса с символьным сокетом. Также следует отметить, что различные реализации могут обрабатывать одни и те же сообщения по-разному. Например, в Unix сообщения типа Router solicitation
(Запрос маршрутизатору) и Router advertisement
(Извещение маршрутизатора) обычно обрабатываются как пользовательские процессы, но некоторые реализации могут обрабатывать эти сообщения в ядре.
Версия ICMPv6 сбрасывает старший бит поля тип для сообщения об ошибке (типы 1-4) и устанавливает этот бит для информационного сообщения (типы 128–137).
- А.1. Введение
- Приложение А Протоколы IPv4, IPv6, ICMPv4 и ICMFV6
- Раздел VII Левиафан в Сети: защита права на тайну частной жизни после событий 2013 г.
- Работа с ресурсами локальной сети
- Сохранение информации из Интернета
- УПРАВЛЕНИЕ РЕПУТАЦИЕЙ В ИНТЕРНЕТЕ
- 10.4. Локальные сети
- Вот как мы можем повлиять на коммерческий фактор (иными словами, повысить доверие посетителей к сайту)
- 3.1. Стратегии интернет-продвижения вашего проекта
- Глава 1 Что такое интернет-маркетинг
- Глава 2 Выбор стратегии интернет-маркетинга
- Как сделать заказ в интернет-магазине