Протокол IPv6

8 minute read

Протокол IPv6 пришел на замену протоколу IPv4 и хотя в настоящее время IPv4 всё еще везде используется, придет время и протокол IPv6 вытеснит своего предшественника полностью.

Первое, что стоит упомянуть когда рассматривают протокол IPv6 - это измененная структура адреса и количество возможных адресов. Если в IPv4 используется 2^32 адресов, то в новой версии это число достигает невероятных значений 2^128. Структура адреса выглядит следующим образом: 2001:1536:a0b8:3491:c800:00ef:fe74:0c00 - 8 хекстетов, разделенных символом :

Типы адресов IPv6

Всего существует три основных типа IPv6 адресов:

  • Unicast адреса
  • Anycast адреса
  • Multicast адреса

В отличие от IPv4, в IPv6 нет broadcast адресов. Однако, группа multicast адресов “all nodes” делает ту же работу, что и broadcast адреса.

Unicast

IPv6 unicast адреса работают в точности так же как и в IPv4. Данные адреса определяют один интерфейс или устройство. Существует три типа IPv6 unicast адресов:

  • Global адреса - это те же адреса, что и публичные адреса в IPv4. Они глобально маршрутизируются и могут использоваться при коммуникации через сеть Интернет. В настоящее время вся глобальная одноадресная адресация выделяется из префиксного блока 2000::/3.
Global address structure
  • Unique local unicast адреса - адреса, которые в IPv4 определены как “серые”, т.е. адреса, описанные в RFC 1918. Данные адреса маршрутизируются в пределах внутренней коммуникации организации и не маршрутизируются в сети Интернет. RFC 4193 определяет блок префиксов fc00::/7 для уникальной локальной одноадресной адресации. Данные адреса всегда начинаются с двоичного значения 1111 110, которое соответствует префиксу fc00::/7. Восьмой бит - бит L в настоящее время установлен в 1, чтобы указать, что адрес назначен локально. Установка бита L на 0 еще не определена и зарезервирована для использования в будущем. Объединение префикса (первых 7 бит) и бита L создает два потенциальных адресных блока:
    • fc00::/8: зарезервировано для будущего использования
    • fd00::/8: локальная одноадресная адресация
Unique local address structure
  • Link-local адреса - немаршрутизируемые адреса, используются для коммуникации в пределах одного непосредственно подключенного канала. Основное назначение данных адресов - обнаружение соседей и определение дубликата адресов. Адреса выделяются из префиксного блока fe80::/10. Данные адреса могут назначаться как вручную, так и динамически с использованием механизма SLAAC (stateless address autoconfiguration). При использовании SLAAC часть Interface ID выводится из MAC-адреса модификацией формата EUI-64.
Link local address structure

Anycast

Anycast адреса представляют скорее сервис нежели чем отдельное устройство, поэтому один адрес может быть назначен разным устройствам, предоставляющим один и тот же сервис. Основное предназначение anycast адресов - обеспечение отказоустойчивости.

На следующей схеме приведён пример того как может выглядеть это в реальности

Anycast

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

В случае если в сети произойдет падение одного из маршрутизаторов, находящихся рядом с серверами, произойдет перестроение пути следования трафика для одного из клиентов и трафик для этого клиента пойдет по новому пути. В этом случае оба клиента будут обращаться к одному и тому же серверу.

Какого определённого формата для данных типов адресов не существует, поэтому теоретически любой unicast адрес может быть anycast. Для корректной работы anycast адресов может быть желательно отключать механизм определения дубликата адресов (DAD - Duplicate Address Detection). В операционной системе Cisco IOS и Cisco IOS XE механизм DAD отключается для всего префикса, делается это следующей командой:

1
2
Cisco_CSR1000v(config)# interface gigabitEthernet 1
Cisco_CSR1000v(config-if)# ipv6 address 2001:abcd:1111::1/64 anycast 

Для операционной системы Cisco IOS XR механизм DAD отключается для всего интерфейса (включая префиксы link-local) с помощью команды:

1
2
RP/0/0/CPU0:Cisco_XRv(config)# interface gigabitEthernet 0/0/0/0
RP/0/0/CPU0:Cisco_XRv(config-if)# ipv6 nd dad attempts 0

Multicast

Multicast адреса определяют не одно устройство, а группу устройств - multicast группу, при этом в данной группе может состоять как множество устройств, так и одно. Multicast адреса не могут выступать в качестве адреса источника в пакете. В IPv6 не существует как такового broadcast адреса, вместо него есть multicast группа "All nodes", которая по сути имеет то же предназначение, что и broadcast в IPv4.

В IPv6 multicast адреса имеют различное назначение: передача информации о протоколе маршрутизации, обнаружение соседних устройств, разрешение IPv6-адресов. Более подробно об этом будет описано в статье по протоколу Neighbor Discovery Protocol

Multicast address structure

Как видно из рисунка выше, первые 8 бит всегда установлены в 1, следующие 4 бита отвечают за флаги. Первые три бита из поля Flags установлены в 0 и в настоящее время не используются. Четвёртый бит из поля Flags - флаг transient.

Флаг T - transient имеет два возможных значения:

  • 0 - постоянный адрес, который широко известен и присваивается IANA
  • 1 - временный адрес, используется для целей тестирования

Поле Scope используется для того, чтобы маршрутизатор мог определить является ли multicast адрес маршрутизируемым. Все диапазоны таких адресов описаны в RFC 4291. Краткая выдержка представлена в таблице ниже.

Типы диапазонов IPv6 префикс Описание
Reserved ff00 Зарезервировано
Interface-Local ff01 Interface-Local диапазон не позволяет multicast пакетам проходить через интерфейс. Данный диапазон аналогичен адресу unicast loopback, поскольку multicast пакеты содержатся внутри одного устройства.
Link-Local ff02 Link-Local диапазон содержит multicast трафик для локальной интерфейсной связи.
Admin-Local ff04 Admin-Local диапазон является маршрутизируемым и считается наименьшей административным диапазоном. Граница диапазона действия не имеет определенных ограничений, но обычно трафик ограничен одним отделом или этажом в здании.
Site-Local ff05 Site-Local диапазон является также маршрутизируемым и считается большим, чем admin-Local диапазон. Граница обычно ограничивается зданием или регионом.
Organization-Local ff08 Organization-Local диапазон является также маршрутизируемым и должен располагаться в одной организации.
Global ff0е Global диапазон не имеет никаких ограничений на достижимость.

Поле Group ID определяет индивидуальную multicast группу. На данное поле отводится 112 бит, 80 из которых в настоящее время не используются и установлены в 0.

Наиболее широко известные и используемые адреса представлены в таблице ниже

Адрес Описание
ff02::1 All nodes адрес
ff02::2 All-routers адрес
ff02::5 Aдрес OSPFv3 all routers
ff02::6 Aдрес OSPFv3 all DR
ff02::8 IS-IS
ff02::9 RIPng
ff02::a EIGRP
ff02::d PIM
ff02::1:2 Адрес всех DHCPv6 relay агентов и серверов
ff05::1:3 Адрес всех DHCPv6 серверов
ff02::1:ffxx:xxxx Адрес запрашиваемого узла, используется для обнаруженя соседних узлов для разрешения адресов (последние 24 бита [xx:xxxx] адреса сопоставляются с последними 24 битами unicast адреса IPv6)

Более полный список можно увидеть, перейдя по ссылке

Каждое устройство автоматически присоединяется к двум multicast группам: all nodes - ff02::1 и solicited-node - ff02::1:ffxx:xxxx. Группа all nodes используется для связи со всеми интерфейсами на локальном канале, а группа solicited-node требуется для разрешения адресов на уровне канала. Маршрутизаторы также присоединяются к третьей multicast группе all-routers - ff02::2.

Для того чтобы посмотреть в какой группе состоит тот или иной интерфейс необходимо выполнить команду show ipv6 interface <тип интерфейса номер интерфейса>

Cisco IOS

1
2
3
4
5
6
7
8
9
10
11
12
Cisco_CSR1000v# show ipv6 interface gigabitEthernet 1
GigabitEthernet1 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::1 
  No Virtual link-local address(es):
  Global unicast address(es):
    2001:ABCD::1, subnet is 2001:ABCD::/64 
  Joined group address(es):
    FF02::1
    FF02::2
    FF02::1:FF00:1
  MTU is 1500 bytes
---часть информации пропущена---

Cisco IOS XR

1
2
3
4
5
6
7
8
9
RP/0/0/CPU0:Cisco_XRv# show ipv6 interface gigabitEthernet 0/0/0/0
Sat Oct 23 16:45:56.754 UTC
GigabitEthernet0/0/0/0 is Up, ipv6 protocol is Up, Vrfid is default (0x60000000)
  IPv6 is enabled, link-local address is fe80::2 
  Global unicast address(es):
    2001:abcd::2, subnet is 2001:abcd::/64 
  Joined group address(es): ff02::1:ff00:2 ff02::2 ff02::1
  MTU is 1514 (1500 is available to IPv6)
  ---часть информации пропущена---

Специальные IPv6 адреса

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

  • Неопределенный адрес - указывает на то, что на интерфейсе еще нет никакого адреса, обозначается как 0:0:0:0:0:0:0:0 или просто ::. Данный адрес используется устройством когда оно только инициализированно и не получило еще никакого другого адреса
  • Loopback адрес - используется для того чтобы отправлять пакеты самому себе, обозначается как 0:0:0:0:0:0:0:1 или ::1

Структура заголовка IPv6

Формат заголовка протокола IPv6 представлен на рисунке ниже

Header IPv6

Version - 4-битное поле, также как и в протоколе IPv4 отвечает за версию протокола. Принимает значение 0110.

Version

Traffic Class - 8-битное поле, идентично полю DiffServ в протоколе IPv4.

Traffic Service

Flow Label - 20-битное уникальное для IPv6 поле. Данное поле позволяет помечать определенный поток трафика, при балансировке трафика метка позволяет более точно определять путь, по которому пойдет тот или иной пакет, предотвращая возможное изменение следования порядка пакетов.

Поток определяется как совокупность адреса и порта источника и назначения. Однако, определить порт источника и назначения для маршрутизатора может быть сложной задачей и возможным падением производительности для него. Расширения заголовка IPv6 позволяют маршрутизатору определить заголовок транспортного уровня.

Flow Label

Payload Length - 16-битное поле, определяющее длину содержимого пакета в байтах. Размер заголовка IPv6 всегда фиксирован и составляет 40 байт, поэтому, в отличие от протокола IPv4, вычитать размер заголовка из общего содержимого пакета нет необходимости.

Payload Length

Next Header - 8-битное поле, определяющее заголовок протокола, который следует за протоколом IPv6. Данное поле идентично полю Protocol в заголовке IPv4 и используется для тех же самых целей. Однако, в протоколе IPv6 вместо протокола, располагающегося выше протокола IPv6, можеть быть расширение заголовка IPv6.

Hext Header

Hop Limit - 8-битное поле, выполняющее те же функции, что и поле Time to Live в протоколе IPv4. Если данное поле примет значение 0 на пути следования пакета, то пакет будет отброшен.

Hop Limit

Source и Destination Address - 128-битные поля, определяющие адреса источника и назначения соответственно.

Source и Destination Address

В данном дампе можно более подробно рассмотреть все поля протокола IPv6.

Расширение заголовка IPv6

Расширение заголовка IPv6 используется в случае когда необходимо добавить дополнительные функции для протокола (фрагментация, аутентификация и др.). В случае применения данных расширений, они добавляются в конец заголовка IPv6.

Extensions Header

Каждое расширение заголовка, как и сам заголовок IPv6, имеет поле Next Header, которое определяет какой заголовок будет следовать за текущим. RFC 1883 описывает формат всех основных расширений, используемых в протоколе IPv6, а также порядок следования данных расширений заголовка. Некоторые из расширений описаны в таблице ниже.

Заголовок Значение Next Header Значение
Hop-By-Hop Options 0 Содержит информацию, которая должна быть проверена каждый узлов на всём протяжении пути передачи данных
Fragment 44 В случае фрагментации пакета, содержит информацию, которая необходима приёмной стороне для сборки пакета воедино. Основное отличие от протокола IPv4 - это то, что фрагментация пакета производится только источником сообщения. Следовательно, источник должен использовать сообщение Path MTU Discovery для определения наименьшего MTU на пути следования пакета
Encapsulating Security Payload - ESP 50 Используется в случае если содержимое пакета шифруется
Authentication Header 51 Используется в случае когда пакет должен быть аутентифицирован между источником и назначением
TCP/IP Protocol TCP = 6, UDP = 17, OSPF = 89 и т.д. Стандартные номера протоколов
No next header 59 Следующий заголовок отсутствует

P.S. вся информация представленная здесь используется исключительно в образовательных целях. Все совпадения с реальными объектами, адресами, именами и т.д. случайна и не несёт цели получить от этого выгоду или причинить кому-либо вред.

Back to top ↑

Leave a comment