UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Первые 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
Таблица А.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 (Ответ маски адреса) | Пользовательский процесс |