IPv6 теория и практика: виды пакетов и автоконфигурация

  • Tutorial
Эта вторая статья, продолжающая цикл, посвященный IPv6. В первой вводной статье речь шла о структуре IPv6 пакета, записи адресов, префиксе. Сегодня мы поговорим о том, какие виды пакетов бывают в IPv6, о важности мультикастов, а также, о видах автоматической конфигурации хоста в IPv6.
Примечание: в этой и других статьях под словом «маршрутизатор» я подразумеваю «маршрутизатор cisco».

Типы вещания в IPv6


В IPv6 существует три вида рассылки:
  1. Unicast – один источник, один получатель
  2. Multicast – один источник, несколько получателей
  3. Anycast – один источник, несколько потенциальных получателей, но отсылается только одному из них.

Как мы видим, здесь нет широковещательной (Broadcast) рассылки. Там, где раньше использовалось широковещание, в IPv6 используются мультикастовые адреса. Действительно, зачем ограничивать себя рамками broadcast, когда multicast гораздо гибче – иногда можно отослать сообщение группе хостов, а иногда – всем.

Подробнее о мультикастах


В IPv6 для мультикастовых адресов выделен специальный диапазон FF00::/8. То есть, все адреса, начинающиеся с FF – мультикастовые.
Адреса мультикаст бывают двух типов:
  1. Назначенные (Assigned multicast) – специальные адреса, назначение которых предопределено.
  2. Запрошенные (Solicited multicast) – остальные адреса, которые устройства могут использовать для прикладных задач.

Назначенные адреса

Назначенные адреса – это зарезервированные для определённых групп устройств мультикастовые адреса. Отправляемый на такой адрес пакет будет получен всеми устройствами, входящими в группу. Существует два специальных назначенных мультикастовых адреса:
  1. FF02::1 – в эту группу входят все устройства в локальной сети. Таким образом, данный специальный мультикастовый адрес ведёт себя как широковещательный адрес в IPv4. Все устройства обязаны принимать пакеты, отправленные на FF02::1.
  2. FF02::2 – в эту группу входят все маршрутизаторы. С помощью данного адреса возможно сделать рассылку по маршрутизаторам, присутствующим в локальной сети. Как только на маршрутизаторе Cisco включается режим маршрутизации для IPv6, он автоматически становится участником этой группы и начинает принимать весь трафик, адресованный на FF02::2.

Запрошенные адреса

Адрес этого типа автоматически появляется, когда на некотором интерфейсе появляется юникастовый адрес. Адрес формируется из сети FF02:0:0:0:0:1:FF00::/104, оствашиеся 24 бита – такие же как у настроенного юникастового адреса. Обратите внимание, что /104 означает, что из данной сети только первые 104 бита берутся для формирования адреса (последние два нуля в записи не участвуют).
Когда некоторое устройство получает пакет, у которого адреса получателя находится в сети FF02:0:0:0:0:1:FF00/104, оно обязано принять этот пакет в том случае, если оставшиеся 24 бита в этом адреса равны последним 24-м битам в юникастовом адресе самого устойства.
Допустим, есть устройство с адресом 2001:0DB8:ABCD:0001:0000:0000:0123:A050. Последние 24 бита (6 шестнадцатеричных цифр) в данном случае – это «23:A050». Значит это устройство обязано принимать так же и трафик, приходящий на муьтикастовый адрес FF02:0:0:0:0:1:FF23:A050.
Такие мультикастовые адреса активно используются в ситуации, когда некоторое устройство хочет узнать MAC адрес своего соседа (аналог ARP в IPv4).
Например, некоторое устройство хочет отправить пакет на локальный адрес FE80::1234:5678. Это локальный адрес (так как начинается с FE80, подробнее о типах адресов в предыдущей статье), значит он находится в нашей локальной сети. Соответственно, чтобы на него что-то отправить, надо узнать MAC-адрес целевого устройства (для формирования Ethernet-фрейма). Хост отправляет на запрошенный (solicited) мультикастовый адрес, FF02:0:0:0:0:1:FF34:5678 пакет. Последние 24 бита «34:5678» были взяты из IPv6-адреса искомого устройства. В случае связки IPv4 и ARP, этот пакет отправлялся бы на адрес 255.255.255.255.
Далее искомое устройство отвечает на этот мультикастовый пакет юникастом, сообщая в ответе свой MAC-адрес.
Возможны ситуации, когда несколько устройств обработают такой пакет (если у них совпадают последние 24 бита адреса), но в этом нет ничего страшного, так как это в любом случае лучше широковещания, когда все устройства обрабатывали запрос.

Автоконфигурация


В IPv6 появился новый механизм автоконфигурации узла. Называется он Stateless Address Autoconfiguration или SLAAC. Используется он для автоматического получения IP адреса и сетевого префикса узлом, без использования DHCPv6 сервера, или совместно с ним.
Действительно, когда мы создаём некоторую сеть, мы прописываем адрес шлюза и префикс этой сети на маршрутизаторе. Этой информации достаточно, чтобы выдавать адреса устройствам. Механизм SLAAC позволяет маршрутизатору назначать устройствам адреса даже если в сети нет DHCPv6.
Маршрутизатор Cisco с рабочим IPv6 интерфейсом рассылает в сеть информацию об этой сети, включающую в себя сетевую часть IP адреса и длину префикса. Кроме того, в этом сообщении содержится адрес шлюза по умолчанию для сети. Сообщение это называется Router Advertisement (RA) и отправляется обычно раз в 200 секунд на мультикастовый адрес FF02::.
Если в сети появилось новое устройство, которому необходим адрес, ему необязательно ждать 200 секунд до ближайшей рассылки, оно может направит запрос маршрутизатору (Router Solicitation или RS) и попросить его выслать настройки немедленно. Запрос маршрутизатору выполняется на адрес FF02::2.
Оба сообщения RA и RS отправляются посредством протокола ICMPv6, с мультикастовым адресом получателя в IP пакете.
Для того чтобы маршрутизатор начал полноценно обслуживать сеть (рассылать в неё RA и отвечать на RS), мало настроить IPv6 адрес на интерфейсе, необходимо так же включить режим маршрутизации для IPv6 сетей, введя команду ipv6 unicast routing в режиме глобальной конфигурации.
Существует три способа назначения адреса:
  1. Маршрутизатор выдаёт подсеть, префикс и адрес шлюза. Другую информацию устройства не получают.
  2. Маршрутизатор выдаёт подсеть, префикс и адрес шлюза, а отдельный DHCPv6 сервер выдаёт дополнительную информацию: опции, маршруты, адреса DNS серверов и другую – по необходимости.
  3. Stateless Address Autoconfiguration вообще не используется – устройство не использует RA от маршрутизатора, а обращается к DHCPv6 серверу, который предоставляет всю необходимую информацию, включая адрес, шлюз, префикс, DNS сервера и другую – в зависимости от настроек DHCP.

В случае использования третьего варианта, DHCP сервер выдаёт клиенту полный IPv6 адрес – все 128 бит, который назначается на интерфейсе клиента. В случае использования первых двух вариантов, маршрутизатор сообщает клиенту только сеть, в которой он находится, шлюз и префикс. Таким образом, клиенту недостаёт второй половины IP адреса (идентификатора интерфейса). Напомню, что адрес состоит из 128 бит, а маршрутизатор выдаёт максимум, только первые 64. Оставшиеся 64 бита, где должна находиться информация о хосте, должны быть заполнены самим устройством, маршрутизатору не важно, что именно устройство туда поместит, важно, чтобы первые 64 бита (сеть) были правильными. Для генерации правой половины IP адреса используется алгоритм EUI-64 или вообще генерируется случайный набор цифр.
UPD1: Спрашивали меня в личку на счёт правой части адреса, почему так мало информации о ней. Отвечаю. Выдали вам в IPv4 сетку 192.168.0.0/24, и придумывайте себе правую часть какую изволите. То же и тут, только теперь есть где фантазии разгуляться :) У кого фантазия скудная — есть EUI-64
Share post

Similar posts

Comments 13

    +1
    3. Stateless Address Autoconfiguration не используется – устройство не использует префикс из RA от маршрутизатора, а обращается к DHCPv6 серверу, который предоставляет необходимую информацию, включая адрес, DNS сервера и другую – в зависимости от настроек DHCP.
    При этом маршрут по умолчанию все так же берется из RA пакета маршрутизатора (если прием не запрещен на клиенте), как и вообще возможность stateful конфигурирования адреса.
      +1
      Мультикасты плохо описаны. Их там много — по типам локальных сетей. Например, есть бродкаст all-site-routers или как-то так. Не путать с all-link-local-routers.
        +1
        Был бы рад сам почитать хорошую статью чисто по мультикастам. Если у вас есть обширные знания и время написать — я бы первый поставил плюсик.
        +1
        Я бы добавил про SLAAC следующее:
        1. Описание механизма DAD. Штука очень важная.
        2. Ну и rfc4941 (Privacy Extensions for Stateless Address Autoconfiguration in IPv6). Там как бы не совсем случайный набор цифр:)
        3. Не упомянута возможность передачи RDNSS в RA, которая описана в rfc6106. Не все клиенты это умеют, но тем не менее.
          +1
          Спасибо за испорченный сон. Проснулся в 4 часа утра и прочитал первые две статьи.
          Отлично. С нетерпением жду продолжения.
            0
            прям неделя IPv6 :)
              –1
              Астрологи объявляют неделю IPv6, количество постов про IPv6 увеличивается! :)
              0
              А что обозначает знак процента в адресе? Например,

              Default Gateway . . . . . . . . . : fe80::20c:42ff:fe06:ec64%17
                +1
                Нашёл уже сам…
                Поскольку все сетевые карты имеют ipv6-адрес из сети fe80, то для указании шлюза его ip-адреса недостаточно, нужен ещё и номер интерфейса (сетевой карты в системе), за которой расположен шлюз.
                0
                Отличный цикл, очень доступно все разжевываете. С интересом прочту следующие статьи.
                  0
                  Дальше планирую уже писать про настройку на цисках, так как всё что нужно из теории для базовых конфигов мы теперь уже знаем.
                  0
                  Объясните мне, пожалуйста, следующий момент:
                  … Допустим, есть устройство с адресом 2001:0DB8:ABCD:0001:0000:0000:0123:A050. Последние 24 бита (6 шестнадцатеричных цифр) в данном случае – это «23:A050». Значит это устройство обязано принимать так же и трафик, приходящий на мультикастовый адрес FF02:0:0:0:0:1:FF23:A050.

                  Хост, который хочет узнать mac-адрес описанного выше устройства, делает мультикастовый запрос по адресу FF02:0:0:0:0:1:FF23:A050 (level 3). А что отправитель в поле mac-адреса (level 2) вставляет? Никак «вкурить» не могу… ((
                    0
                    на l2 все спокойно без перемен, мак адреса хостов, как обычно.
                    хост шлет neighbor solicitation на мультикаст адрес ff02::1:ff23:a050, в пакете присутствует опция link local address этого же хоста.
                    в ответ, 2001:0db8:abcd:1::123:a050 шлет neighbor advertise на адрес отправителя, и в пакете тоже присутствует опция link local address отправителя.
                    зачем нужен повтор мак адреса в виде опций в теле l3 пакета, если они есть на l2 уровне? например для маршрутизации с промежуточными шлюзами и для более легкой обработки neighbor discovery пакетов софтом, не имеющим доступа к l2 заголовкам.

                  Only users with full accounts can post comments. Log in, please.