В этой статье я расскажу самую базовую и основную информацию о протоколе IPv6, его работе, типах адресации и настройках.
Адресация IPv6
Адресация IPv6 представляется в виде 16-битных шестнадцатеричных групп, разделенных двоеточиями. Например,
3ffe:1944:0100:000a:0000:00bc:2500:0d0b.
Правила короткой записи:
1) Одна группа, состоящая только из нулевых сегментов, может быть представлена в виде двойного двоеточия (::).
2) Нули в начале каждой группы могут быть опущены.
Идентификатор подсети ипв6 записывается в нотации CIDR, т. е. просто указывается количество бит (например, /64).
::/0 представляет собой нулевой адрес (адрес по-умолчанию).
::/128 представляет собой «неопределенный» адрес; отличается от нулевого только длиной префикса.
Типы адресов
Адреса IPv6 могут быть трех типов: юникаст (unicast, одноадресный), эникаст (anycast) или мультикаст (multicast, многоадресный или групповой).
Функции броадкаста выполняет мультикастовый адрес «все узлы» (all-nodes).
Типы адресов определяются по их начальным битам:
Binary Hex Тип адреса ------------ --------- ------------------------------------ 11111111 FF00::/8 Мультикаст 11111110 10 FE80::/10 Link-local unicast 11111110 11 FEC0::/10 Site-local unicast (устарели) 001 2000::/3 Global unicast(используются сейчас)
Global Unicast адресация
Глобальный юникаст-адрес ипв6 разбит на три секции:
Global routing prefix (48 бит)
Subnet ID (16 бит)
Interface ID (64 бита)
Local Unicast адресация
Адреса типа «Link-local unicast» уникальны только в пределах одного L2-линка.
Адреса типа «Site-local unicast» были определены в первоначальном стандарте IPv6, но были заменены на Unique Local Addresses (FC00::/7), согласно RFC 4193.
Anycast адресация
Эникаст представляет собой один адрес, сконфигурированный на нескольких оконечных узлах; динамический маршрут в идеале должен перенаправить трафик к «ближайшему» (или имеющему наименьшую стоимость) узлу, объявляющему в сеть такой эникаст-адрес.
Любой глобальный юникаст-адрес, назначенный более чем одному устройству, может рассматриваться как эникастовый.
Multicast адресация
Мультикаст представляет собой логическую группу устройств.
Структура мультикастового адреса:
- Мультикастовый префикс (8 бит) — всегда 0xFF
- Флажки (4 бита)
- Область (4 бита)
- ID группы (112 бит)
Области адресов:
- 0x0 — Зарезервировано
- 0x1 — Node-local
- 0x2 — Link-local
- 0x5 — Site-local
- 0x8 — Org-local
- 0xE — Global
- 0xF — Зарезервировано
Встроенная (Embedded) адресация IPv4
Разные технологии перехода с 4-й версии на 6-ю используют разные способы встраивания IPv4 в IPv6.
Разные примеры для 10.23.1.5:
- FE80::5EFE:10.23.1.5 (ISATAP)
- ::FFFF:10.23.1.5 (SIIT)
- FEC0:0:0:1::10.23.1.5 (TRT)
- 2002:0A17:0105::/48 (6to4)
Заголовок IPv6
Заголовок IPv6 имеет фиксированную длину в 40 байт.
Формат заголовка:
- Version (4 бита) — всегда равна 6
- Traffic class (8 бит) — DiffServ Code Point (DSCP)
- Flow label (20 бит) — произвольное поле для различения потоков трафика
- Payload length (16 бит) — длина полезной нагрузки (без учета длины заголовка)
- Next header (8 бит) — указывает на Extension Header или протокол верхнего уровня, следующий за заголовком IPv6
- Hop limit (8 бит) — уменьшающийся счетчик узлов (TTL)
- Source address (128 бит) — адрес отправителя
- Destination address (128 бит) — адрес получателя
Расширенные заголовки (Extension Headers)
Расширенные заголовки дают возможность использовать дополнительные функции вроде опций «hop-by-hop» или шифрования IPsec.
Значения поля Next header:
- 0 — Hop-by-hop options
- 43 — Routing
- 44 — Fragment
- 50 — ESP
- 51 — AH
- 59 — Нет следующего заголовка
- 60 — Destination options
Если заголовок — последний в стеке, его поле «next header» будет указывать на протокол верхнего уровня, следующего за ним (т. е. 6 для TCP либо 17 для UDP). В RFC 1883 определяется последовательность, в которой расширенные заголовки должны следовать друг за другом, если они используются.
ICMPv6
IPv6 использует собственную версию ICMP, описываемую в RFC 2463.
Как и в ICMPv4, ICMPv6 использует пары тип/код для определения типов полей.
Обычные типы полей:
- 1 — Получатель недостижим
- 2 — Пакет слишком велик
- 3 — Превышен временной интервал
- 4 — Проблема в параметре
- 128 — Эхо-запрос
- 129 — Эхо-ответ
- 130 — Запрос на членство в группе
- 131 — Отчет о членстве в группе
- 132 — Членство в группе сокращено
Neighbor Discovery Protocol (NDP)
NDP описан в RFC 4861. Его функции:
- определение маршрутизатора
- определение префикса
- определение параметра — MTU линка и т. д.
- автонастройка адреса — замена DHCP
- определение адреса — замена ARP
- определение следующего узла — L2-адрес следующего прыжка
- детекция недоступности соседей
- детекция задвоенных адресов
- перенаправление — маршрутизатор может проинформировать узел о наличии лучшего маршрута
Для обмена сообщениями в NDP используется ICMPv6.
Типы сообщений NDP:
- Router Solicitation (RS) (Тип 133) — посылается хостом для запроса RA
- Router Advertisement (RA) (Тип 134) — генерируется маршрутизаторами для объявления о собственном существовании
- Neighbor Solicitation (NS) (Тип 135) — для определения L2-адресов и обнаружения задвоенных адресов
- Neighbor Advertisement (NA) (Тип 136) — ответ на NS
- Redirect (Тип 137) — используется маршрутизатором для информирования узла о наличии лучшего пути
Автонастройка адреса
На широковещательных линках ID интерфейса (вторая половина адреса IPv6) может генерироваться автоматически путем конвертации 48-битного MAC-адреса в 64-битный адрес EUI-64.
Конвертация MAC-to-EUI64:
- Между двумя 24-битными половинками MAC-адреса вставляется 0xFFFE
- Бит Universal/Local (7-й бит) меняется с 0 на 1
Например, MAC 0000:0A0B:1234 превращается в 0200:0AFF:FE0B:1234.
Идентификатор EUI-64 может быть объединен с префиксом типа «link-local» (FE80::/10) для формирования полного локального адреса линка.
Узел может получать глобальный адрес IPv6 при помощи stateful либо stateless автоконфигурации. Stateful использует DHCPv6 для запроса IPv6 с сервера. В stateless автоконфигурации узел просто добавляет ID своего интерфейса к префиксу, полученному из сообщения-объявления маршрутизатора (RA).
Duplicate Address Detection (DAD)
DAD применяется при первоначальной конфигурации всех адресов кроме эникаста. Новые адреса помечаются как предварительные и не могут быть использованы до тех пор, пока не будут проверены.
Neighbor Address Resolution
L2-информация о IPv6 соседях хранится в кэше соседей (похожем на кэш ARP в IPv4).
Privacy Addresses
RFC 3041 определяет частные адреса IPv6 для облегчения сохранения приватности, избегая привязки к статичному уникальному глобальному идентификатору (MAC) в качестве ID интерфейса. Частные адреса пользуются случайно сгенерированными ID интерфейсов, меняющимися на регулярной основе либо при получении нового префикса.