Категории
Самые читаемые
PochitayKnigi » Компьютеры и Интернет » Программное обеспечение » UNIX: разработка сетевых приложений - Уильям Стивенс

UNIX: разработка сетевых приложений - Уильям Стивенс

Читать онлайн UNIX: разработка сетевых приложений - Уильям Стивенс

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 241 242 243 244 245 246 247 248 249 ... 263
Перейти на страницу:

В разделе 11.2 был показан IPv6-адрес 3ffe:b80:1f8d:1:a00:20ff:fea7:686b для узла freebsd (см. рис. 1.7). Идентификатор 6bone имеет значение 0x0b801f8d, а идентификатор подсети 0x1. Младшие 64 разряда представляют собой модифицированный адрес EUI-64, полученный из MAC-адреса Ethernet-карты узла.

Адреса IPv4, преобразованные к виду IPv6

Адреса IPv4, преобразованные к виду IPv6 (IPv4-mapped IPv6 addresses), позволяют приложениям, запущенным на узлах, поддерживающих как IPv4, так и IPv6, связываться с узлами, поддерживающими только IPv4, в процессе перехода сети Интернет на версию протокола IPv6. Такие адреса автоматически создаются на серверах DNS (см. табл. 11.3), когда приложением IPv6 запрашивается IPv6-адрес узла, который имеет только адреса IPv4.

Рисунок 12.3 показывает, что использование данного типа адресов с сокетом IPv6 приводит к отправке IPv4-дейтаграммы узлу. Такие адреса не хранятся ни в каких файлах данных DNS — при необходимости они создаются сервером.

Рис. А.6. Адреса IPv4, преобразованные к виду IPv6

На рис. А.6 приведен формат таких адресов. Младшие 32 бита содержат адрес IPv4.

При записи IPv6-адреса последовательная строка из нулей может быть сокращена до двух двоеточий. Вложенный IPv4-адрес представлен в точечно-десятичной записи. Например, преобразованный к виду IPv6 IPv4-адрес 0:0:0:0:0:FFFF:206.62.226.33 можно сократить до ::FFFF:206.62.226.33.

Адреса IPv6, совместимые с IPv4

Для перехода от версии IPv4 к IPv6 планировалось также использовать адреса IPv6, совместимые с IPv4 (IPv4-compatible IPv6 addresses). Администратор узла, поддерживающего как IPv4, так и IPv6, и не имеющего соседнего IPv6-маршрутизатора, должен создать DNS запись типа AAAA, содержащую адрес IPv6, совместимый с IPv4. Любой другой IPv6-узел, посылающий IPv6-дейтаграмму на адрес IPv6, совместимый с IPv4, должен упаковать (encapsulate) IPv6-дейтаграмму в заголовок IPv4 — такой способ называется автоматическим туннелированием (automatic tunnel). Однако после рассмотрения вопросов, связанных с внедрением IPv6, использование этой возможности заметно сократилось. Более подробно вопросы туннелирования будут рассмотрены в разделе Б.3, а на рис. Б.2 будет приведен пример IPv6-дейтаграмм такого типа, упакованных в заголовок IPv4.

На рис. А.7 показан формат адреса IPv4, совместимого с IPv6.

Рис. А.7. Адрес IPv6, совместимый с IPv4

В качестве примера такого адреса можно привести ::206.62.226.33.

Адреса IPv6, совместимые с IPv4 могут появляться и в пакетах IPv6, не передающихся по туннелю, если используется механизм перехода SIIT IPv4/IPv6 (RFC 2765 [83]).

Адрес закольцовки

Адрес IPv6 ::1, состоящий из 127 нулевых битов и единственного единичного бита, является адресом закольцовки IPv6. В API сокетов он называется in6addr_loopback или IN6ADDR_LOOPBACK_INIТ.

Неопределенный адрес

Адрес IPv6, состоящий из 128 нулевых битов, записываемый как 0::0 или просто ::, является неопределенным адресом IPv6 (unspecified address). В пакете IPv6 он может появиться только как адрес получателя в пакетах, посланных узлом, который находится в состоянии загрузки и еще не знает своего IPv6-адреса.

В API сокетов этот адрес называется универсальным адресом, и его использование, например, в функции bind для связывания прослушиваемого сокета TCP означает, что сокет будет принимать клиентские соединения, предназначенные любому из адресов узла. Этот адрес имеет имя in6addr_any или IN6ADDR_ANY_INIT.

Адрес локальной связи

Адрес локальной связи (link-local, локальный в пределах физической подсети) используется для соединения в пределах одной физической подсети, когда известно, что дейтаграмма не будет перенаправляться. Примерами использования таких адресов являются автоматическая конфигурация адреса во время загрузки и поиска соседних узлов (neighbor discovery) (подобно ARP для IPv4). На рис. А.8 приведен формат такого адреса.

Рис. А.8. IPv6-адрес локальной связи

Такие адреса всегда начинаются с fe80. Маршрутизатор IPv6 не должен перенаправлять дейтаграммы, у которых в поле отправителя или получателя указан адрес локальной связи, по другому соединению. В разделе 11.2 приведен адрес локальной связи, связанный с именем aiх-611.

Адрес, локальный на уровне сайта

На момент написания этой книги рабочей группой IETF по IPv6 было принято решение отменить локальные в пределах сайта адреса в их текущей форме. В тех адресах, которые придут им на замену, может использоваться тот же диапазон, который был отведен для локальных на уровне сайта адресов изначально (fec0/10).

Адрес, локальный в пределах сайта, должен был использоваться для адресации внутри предприятия, когда не требуется глобальный префикс. На рис. А.9 показан формат таких адресов.

Рис. А.9. IPv6-адрес, локальный в пределах сайта

Маршрутизатор IPv6 не должен перенаправлять дейтаграммы, для которых в поле отправителя или получателя указан такой адрес, за пределы предприятия.

А.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

1 ... 241 242 243 244 245 246 247 248 249 ... 263
Перейти на страницу:
Тут вы можете бесплатно читать книгу UNIX: разработка сетевых приложений - Уильям Стивенс.
Комментарии