IPv6-адреса: 21da:00d3:0000:2f3b:02aa:00ff:fe28:9c5a.
Существует несколько способов сокращения записи IPv6-адресов. Первый из
них заключается в удалении начальных нулей в каждом 16-битном блоке.
Поскольку в каждом блоке должен остаться хотя бы один знак, адрес
приобретет вид: 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A.
Второй вариант заключается в замещении одного блока или группы
последовательных блоков, состоящих из нолей, на двойное двоеточие.
Например, адрес 21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A можно
превратить в 21DA:D3::2F3B:2AA:FF:FE28:9C5A, убрав начальные ноли и
заменив нулевой блок на (::). Важно то, что в адресе может быть только
одно двойное двоеточие, поэтому заменять следует либо какой-то один
разряд, либо группу последовательных.
Хорошим примером служит сокращение адреса многоадресной рассылки
FF02:0000:0000:0000:0000:0000:0000:0002, который после применения
правила принял вид FF02::2.
Следующее изменение связано с отсутствием такого понятия, как маска
подсети. IPv6-адрес делится на три части:
Глобальный префикс (Global Routing Prefix) - аналогичен
идентификатору сети (Network ID) в IPv4 и присваивается провайдерам.
Определяется он тремя первыми блоками.
Идентификатор подсети (Subnet ID) - представлен четвертым блоком и,
по сути, очень похож на идентификатор подсети (Subnet ID) в IPv4.
Идентификатор интерфейса (Interface ID) - аналог Host ID в IPv4,
определяет уникальный адрес хоста вашей сети.
Существует несколько способов получения уникального 64-битного
идентификатора интерфейса: он может быть настроен вручную, определен
DCHP-сервером или получен путем преобразования MAC-адреса сетевой
карты. Вместо маски в IPv6 указывается префикс - это количество бит,
которые определяют часть блоков, отвечающих за Global Routing Prefix.
Пишется префикс через косую черту после самого адреса.
Возьмем для примера IPv6-адрес:
2001:0F68:0000:0000:0000:0000:1986:69af/48. Поскольку префикс (/48)
указывает на первые 48 бит, можно сделать вид, что 2001:0f68:0000 будет
являться частью Global Routing Prefix. Следующее поле, 0000, указывает
на идентификатор подсети. Оставшиеся блоки 0000:0000:1986:69af - это
идентификатор интерфейса.
В IPv6 существует три различных типа адресов:
Unicast - определяет конкретный уникальный хост в сети;
Multicast - идентифицирует группу хостов или интерфейсов, при
отправке пакета на этот адрес он доставляется на каждый хост группы;
Anycast - тоже объединяет несколько хостов, но имеет существенное
отличие от Multicast - пакет, посланный на Anycast-адрес, доставляется
только ближайшему к отправителю участнику группы.
Еще одно существенное отличие заключается в появлении нового протокола
канального уровня модели OSI Neighbor Discovery, который призван
заменить IPv4 широковещательные пакеты типа Address Resolution Protocol
(ARP), ICMPv4 Router Discovery, and ICMPv4 Redirect на более
эффективные Unicast- и Multicast-пакеты. Поскольку функций у Neighbor
Discovery довольно много, их принято делить на функции Host-Router
Discovery и Host-Host Communication.
В первую группу попадает задача Router Discovery, как понятно по
названию, это метод обнаружения хостом маршрутизаторов в своей
локальной сети. Далее на ND висит задача определения префикса сети
(Prefix discovery), который дает понять клиенту, в какой сети он
находится. Кроме этого с помощью ND клиент получает от маршрутизатора
информацию о том, как производится получение IP-адреса (через DHCPv6
или через роутер), и дополнительные параметры, такие как максимальный
размер пакета (Parameter Discovery).
Задачи группы Host-Host Communication - это разрешение имен, замена тех
функций, которые в IPv4 выполнялись протоколом ARP (IP в MAC), а также
определение доступности партнера по передачи данных и выявление
нарушения уникальности IP-адресов, то есть появления одинаковых IP.
Плюсов у ND довольно много. Если резюмировать, то, во-первых, можно
забыть о broadcasts-пакетах, ибо разрешение имен идет через Multicast.
Во-вторых, устройства, использующие маршрутизатор, в случае если он
перестает быть достижим, обнаруживают это и автоматически переключаются
на другой (при его наличии). Поскольку ND работает на сетевом уровне,
это дает возможность аутентифицировать и шифровать средствами IPSec
такие задачи, как разрешение имен или обнаружение адреса
маршрутизатора. И, конечно, автоконфигурация, несмотря на появление
DHCPv6, значимость этой службы может оказаться под большим вопросом.
Итак, мы определились с типами IPv6-адресов. На одном из типов, а
именно на Unicast, следует остановиться подробней. Он бывает трех
видов:
Global Unicast - эквивалентен "белому" IPv4-адресу, он
маршрутизируется в Интернете и доступен в IPv6-участке Глобальной сети.
Первые 48-бит адреса являются уникальными по всему Интернету (Global
Routing Prefix), а провайдер, используя следующие 16 бит (идентификатор
подсети), может создать до 65536 подсетей (см. рис. 1). Пример
сокращения нолей был показан на Global Unicast-адресе.
Рисунок 1. Схема IPv6-адреса (Global Unicast)
Link Local Unicast - уникальный IP-адрес, автоматически получаемый
хостом вне зависимости от наличия в сети маршрутизаторов и
DHCPv6-серверов. Генерируется адрес довольно просто. Глобальный префикс
(Global Routing Prefix) изначально определен (fe80) и занимает лишь
первые 10 бит адреса. Так как префикс стал короче (по сравнению
с Global unicast-адресом), то пространство, отведенное под
идентификатор подсети, увеличилось с 16 бит до 54 бит. А поскольку
адрес LLU создан только для локальной сети, то данные биты не
используются и выражаются нолями. Оставшиеся 64 бита (идентификатор
интерфейса) получаются путем несложного преобразования 48-битного
MAC-адреса компьютера (см. рис. 2).
Рисунок 2. Схема IPv6-адреса (Link Local Unucast)
Пример такого преобразования: Узел A имеет MAC-адрес Ethernet
00-AA-00-3F-2A-1C. Сначала этот адрес преобразуется в формат EUI-64
путем вставки разрядов FF-FE между третьим и четвертым байтами:
00-AA-00-FF-FE-3F-2A-1C. Затем инвертируется бит U/L (седьмой бит в
первом байте). Первый байт в двоичной форме имеет вид 00000000.
При инвертировании седьмого бита он принимает вид 00000010 (0x02).
Конечный результат, 02-AA-00-FF-FE-3F-2A-1C, после преобразования в
двухточечно-шестнадцатеричную нотацию становится идентификатором
интерфейса: 2AA:FF:FE3F:2A1C. Таким образом, сетевому адаптеру с
MAC-адресом 00-AA-00-3F-2A-1C соответствует адрес локальной связи
FE80:: 2AA:FF:FE3F:2A1C.
Одной из главных задач Link Local Unicast является поддержка работы
протокола Neighbor Discovery, именно поэтому адрес конфигурируется в
любом случае. Передача данных внутри локальной сети осуществляется с
использованием Link Local Unicast , даже при наличии
сконфигурированного Global Unicast-адреса.
Unique Local Unicast - идеологически напоминает IPv4-адрес из
зарезервированных диапазонов (10.0.0.0/8 или 192.168.0.0/24). Они также
предназначены для работы в сетях, напрямую не связанных с Интернетом.
Global Routing Prefix определяется первыми 8 битами и уже изначально
задан (FD00::/8). Следующие 40 бит формируют Global ID - уникальный
идентификатор, который представляет организацию. Он должен быть
случайным, чтобы минимизировать возможность совпадения с другими
организациями. Такая уникальность позволит осуществить объединение
сетей и настроить маршрутизацию без их переконфигурирования. Еще 16 бит
дают возможность создать 65536 подсетей и настроить маршрутизацию для
внутреннего использования. Ну и наконец, последние 64 бита отданы под
уже знакомый идентификатор интерфейса (см. рис. 3).
Рисунок 3. Схема IPv6-адреса (Unique Local Unicast)
Одна из задач разработчиков протокола IPv6 состояла в предоставлении
возможности автоконфигурирования интерфейсов. Важно понимать, что один
интерфейс может иметь множество различных адресов IPv6. (В принципе, и
при IPv4 интерфейс может иметь несколько адресов.) Таким образом,
интерфейс может одновременно иметь Link Local и Global IPv6-адреса.
Процесс автоконфигурации начинается с получения Link Local-адреса,
проверки его уникальности и определения того, какая информация должна
быть получена автоматически (адреса, дополнительные параметры или и то,
и другое). В случае если надо автоматически получить адрес, то через
какой механизм он должен быть сконфигурирован: stateless или stateful?
Механизм stateless требует минимального конфигурирования
маршрутизатора, при этом дополнительные серверы не нужны. При stateless
механизме хост генерирует собственный адрес из локальной информации
(MAC-адрес) и информации, предоставленной маршрутизатором.
Маршрутизатор объявляет префикс, идентифицирующий подсеть, а хост
использует уникальный идентификатор интерфейса. Соединив их вместе,
хост получает адрес IPv6. В отсутствии маршрутизатора хост может
сформировать только Link Local-адрес. Однако даже такой адрес дает ему
возможность работать с машинами, находящимися в его подсети.
Автоконфигурирование по механизму stateful производится с помощью
DHCPv6. В случае stateful хост получает адрес интерфейса и/или другую
информацию с сервера (адреса DNS, как вариант). Администратор сети
может определить, какой способ будет использоваться при помощи
специальных ICMPv6-сообщений Router Advertisement messages. Механизмы
stateless и stateful могут дополнять друг друга и использоваться
совместно.
Stateless может использоваться, когда точные адреса непринципиальны.
Stateful, наоборот - когда требуется выдача конкретных адресов
конкретным хостам.
Адрес IPv6 выдаётся на фиксированное (либо бесконечное) время. Каждый
адрес привязан к интерфейсу в течение времени жизни. По истечении
времени жизни адрес теряет связь с интерфейсом и может быть присвоен
другому хосту в Интернете. Чтобы избежать возможных проблем, время
жизни адреса делится на две стадии:
preferred - использование адреса предпочтительно;
deprecated - адрес, который вскоре будет утрачен.
Новые соединения должны использовать адрес в состоянии preferred. Адрес
deprecated может использоваться только приложениями, которые уже
используют его и пока не могут переключиться на новый адрес. Для
решения проблем с уникальностью IPv6-адресов существует механизм
Duplicate Address Detection. Маршрутизаторы также имеют Link
Local-адрес, полученный аналогичным образом.
