UNIX: разработка сетевых приложений
Шрифт:
Неопределенный адрес
Адрес IPv6, состоящий из 128 нулевых битов, записываемый как 0::0 или просто ::, является неопределенным адресомIPv6 ( unspecified address). В пакете IPv6 он может появиться только как адрес получателя в пакетах, посланных узлом, который находится в состоянии загрузки и еще не знает своего IPv6-адреса.
В API сокетов этот адрес называется универсальным адресом, и его использование, например, в функции
Адрес локальной связи
Адрес локальной связи (link-local, локальный в пределах физической подсети) используется для соединения в пределах одной физической подсети, когда известно, что дейтаграмма не будет перенаправляться. Примерами использования таких адресов являются автоматическая конфигурация адреса во время загрузки и поиска соседних узлов (neighbor discovery) (подобно ARP для IPv4). На рис. А.8 приведен формат такого
Рис. А.8. IPv6-адрес локальной связи
Такие адреса всегда начинаются с
Адрес, локальный на уровне сайта
На момент написания этой книги рабочей группой IETF по IPv6 было принято решение отменить локальные в пределах сайта адреса в их текущей форме. В тех адресах, которые придут им на замену, может использоваться тот же диапазон, который был отведен для локальных на уровне сайта адресов изначально (fec0/10).
Адрес, локальный в пределах сайта, должен был использоваться для адресации внутри предприятия, когда не требуется глобальный префикс. На рис. А.9 показан формат таких адресов.
Рис. А.9. IPv6-адрес, локальный в пределах сайта
Маршрутизатор IPv6 не должен перенаправлять дейтаграммы, для которых в поле отправителя или получателя указан такой адрес, за пределы предприятия.
А.6. ICMPv4 и ICMPv6: протоколы управляющих сообщений в сети Интернет
Протокол ICMP (Internet Control Message Protocol) является необходимой и неотъемлемой частью любой реализации IPv4 или IPv6. Протокол 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. В последнем столбце приведены значения переменной
Таблица А.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