Чтение онлайн

на главную

Жанры

UNIX: разработка сетевых приложений
Шрифт:

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

Адрес 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

Поделиться:
Популярные книги

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Барон устанавливает правила

Ренгач Евгений
6. Закон сильного
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Барон устанавливает правила

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5

Пенсия для морского дьявола

Чиркунов Игорь
1. Первый в касте бездны
Фантастика:
попаданцы
5.29
рейтинг книги
Пенсия для морского дьявола

Низший - Инфериор. Компиляция. Книги 1-19

Михайлов Дем Алексеевич
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
5.00
рейтинг книги
Низший - Инфериор. Компиляция. Книги 1-19

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Безумный Макс. Ротмистр Империи

Ланцов Михаил Алексеевич
2. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
4.67
рейтинг книги
Безумный Макс. Ротмистр Империи

Ветер перемен

Ланцов Михаил Алексеевич
5. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ветер перемен

По дороге пряностей

Распопов Дмитрий Викторович
2. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
5.50
рейтинг книги
По дороге пряностей

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Повелитель механического легиона. Том I

Лисицин Евгений
1. Повелитель механического легиона
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Повелитель механического легиона. Том I
Тип Код Описание Обработчик или 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 (Истекло время сборки из фрагментов) Пользовательский процесс