Найти в Дзене
птица говорун

Основы IPv6

Оглавление

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

при этом что надо отметить, что количество пользователей google на IPv6 приближается к 50%. надо ещё отметить недавно Россия лидирующие позиции по переходу на IPv6. телеком в России действительно развит хорошо. доля IPv6 трафика в Росси составляла 46%. но благодоря действиям РКН упала до жалких 15%.

Адреса IPv6

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

пример полной записи адреса: 2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d.

полная запись может быть сокращена. например 2001:0db8:0000:0000:0000:8a2e:0370:7334 ведущие нули в каждой группе можно опускать. нулевые группы можно заменить на :: которым заменяют самую длинную непрерывную последовательность групп, состоящих из одних нулей.

при всех этих упрощениях надо руководствоваться одним единственным правилом "однозначность".

0001 = 1
1000 != 1
2001 != 21

и если употребите :: два раза непонятно какой длины какая последовательность нулей. пример равнозначен адресу 2001:db8::8a2e:370:7334.

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

000a =a
0010=10
005b= 5b
0c07= c07
0100= 100
2001:00d0:0000:0000:0000:90a5:0000:abcd = 2001:d0::90a5:0:abcd

в общем то все тоже самое как и в десятичной системе 000050786 = 50786

распространённое опасение о сложности запоминания длинных
IPv6-адресов на практике не так актуально, так как основным механизмом
разрешения имён является DNS. IPv6 действительно требует более
структурного подхода к проектированию сетей, что в долгосрочной
перспективе является преимуществом.

простой пример.

вы пришли куда-то с ноутбуком вам дали в руки шланг с IPv6. вы просто воткнули его в ноут и... оказались в интернете. а вроде бы в сети отсутствуют вспомогательные серверы - вот такая вот магия.

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


кроме того надо понимать что в IPv6 очень много разных типов адресов. рассмотрим основные т.е. не все.

публичный IP адрес

юникаст (Global unicast) – это аналог публичных адресов в IPv4 это в общем-то обычный IP адрес, который можно использовать в интернете. ничем примечательным не выделяется. кроме своего размера - 128 бит. в IPv4 адрес 32-битный. т.е. адресов в v6 значительно больше. это делает не нужными такие механизмы IPv4, как NAT (преобразование сетевых адресов) для экономии адресов.

IP адрес уникальный на линьке

адреса и начинается на FE80. классический механизм формирования адреса называется EUI-64. однако ввиду того что адрес жестко привязан к МАС адресу устройства в настоящее время механизм применяется редко т.к. может упростить отслеживание устройства. адрес уникальный в пределах L2 сегмента, в качестве которого как правило выступает сеть Ethernet. современные ОС как правило генерят случайный адрес, проверяют его уникальность и используют его. эти адреса не маршрутизируются за пределы локального сегмента (линка).

приватный IP адрес

Unique Local Address (ULA, FD00::/7) — это аналог приватных (private) адресов IPv4 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). они используются внутри сетей организации и не маршрутизируются в глобальном интернете.

начинаются такие адреса на FD00::/7 - (зарезервирован FC00::/7) адреса предназначенные для построения приватных сетей. обращаю внимание на то, что их невозможно NATтить в публичные адреса. в классическом понимании слова, NAT в IPv6 просто нет. есть некоторые специальные случаи некоторые из которых описаны здесь

кстати говоря FD00::/7 можно записать как FD0::/7 ? а как FD::/7 ?

многоадресный (мультикаст) адрес

специальный диапазон FF00::/8. То есть, все адреса, начинающиеся с FF – мультикастовые. в IPv6 используются мультикастовые адреса двух типов:

  1. назначенные (Assigned multicast) — специальные адреса, назначение которых предопределено. отправляемый на такой адрес пакет будет получен всеми устройствами, для которых этот адрес предназначен.
  2. запрошенные (Solicited-Node Multicast Address) — остальные адреса, которые устройства могут использовать устройством для решения своих шкурных интересов.

назначенные адреса зарезервированы для определённых групп устройств. отправляемый на такой адрес пакет будет получен всеми устройствами, входящими в группу.

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

сети IPv6

сети в IPv6 значат не то что в IPv4. они предназначены для обозначения группы адресов, а не для экономии адресного пространства. т.е. нельзя сделать сеть из 4 адресов (правильнее сказать 2) как в IPv4. подсеть в IPv6 /64 - это ну очень много адресов.

кто тут скажет: "стой как же так - такая большая подсеть и нет NAT что клиенту выдавать /64?" можно и так - делегировать префикс, а можно любому устройству подключающемуся к сети давать свой адрес из подсети к которой клиент подключается. например у абонента 10 устройств. 10 IPv6 адресов устройства а получили.

адреса можно кстати по прежнему назначать с помощью DHCP, но я не буду рассматривать этот случай. сеть провайдера с IPv6 я не так давно уже рассматривал.

разрешение адресов.

вторым сюрпризом будет то что в IPv6 нет прямого аналога ARP. вместо этого в IPv6 есть протокол обнаружения соседей (Neighbor Discovery Protocol, NDP) который служит для того, чтобы устройства могли обнаруживать и общаться с соседними устройствами на одном канале т.е. в одном L2 сегменте.

в FF02::1 входят все устройства в локальной сети. таким образом адрес ведёт себя как широковещательный адрес в IPv4. используется для широковещательных задач вместо broadcast-адреса из IPv4

некоторые функции NDP:

  • разрешение адреса. Когда устройство хочет общаться с другим устройством через свой локальный IPv6-адрес, оно отправляет сообщение Neighbor Solicitation
  • Neighbor Solicitation не использует широковещание как ARP, а использует мультикаст. я не буду на этом подробно останавливаться, смысл в том, что этот адрес можно вычислить. в результате только удаленный хост получит запрос соседа. это намного эффективнее, чем использование широковещательная передача, которую получают все.
  • обнаружение маршрутизатора. NDP обеспечивает автоматическое обнаружение маршрутизаторов на канале. маршрутизаторы периодически отправляют сообщения Router Advertisement, чтобы предоставить хостам важную сетевую информацию, включая префиксы, информацию о шлюзе по умолчанию.
    узел также может отправлять Router Solicitation (RS) работает это следующим образом: сообщение RS отправляется на многоадресный (мукльтикаст) адрес "
    все маршрутизаторы"

NDP работает на сетевом уровне и использует сообщения ICMPv6

получение IP адреса.

адрес по прежнему можно настроить в ручную или с помощью DHCP и такой способ, например в сети провайдера, предпочтительнее т.к. даёт больше контроля, но мы рассмотрим механизм SLAAC.

  • клиент отправляет сообщение Router Solicitation (RS), чтобы определить, есть ли какие-либо маршрутизаторы, подключённые к локальному линку.
  • затем он ждёт, пока маршрутизатор отправит Router Advertisement (RA), в котором есть информация о префиксе, используемый маршрутизатором, его адрес на линьке.
  • после этого клиент использует информацию о префиксе для создания своего собственного IPv6-адреса в той же сети, что и интерфейс маршрутизатора, который сгенерировал RA.
    при этом существует механизм DAD (Duplicated Address Detection) позволяющий решать конфликты адресов.
  • в RA также есть указания каким образом взять дополнительные настройки сети - самая важная из них DNS сервер.

наш пример чуть подробнее

  1. вы включили устройство. оно автоматически сгенерировало уникальный адрес на линке на основании своего MAC или случайным образом, проверило его уникальность.
  2. используя уникальный адрес на линьке и протокол NDP отправило запрос на определение маршрутизатора, в ответ получило RA.
  3. используя информацию из RA, устройство сконфигурировало свой публичный IPv6 адрес, проверило уникальносить и узнало адрес маршрутизатора. теперь у устройства два IPv6 адреса.
  4. используя указания в RA определило DNS, сервер.
  5. ну и собственно все - вы в итернетах.

ответ на вопрос

FD00::/7 можно записать как FD0::/7 00 -> 0, как FD::/7 нет.
FD::/7 это 0FD0:0000:... или FD00:0000: ... или 00FD:0000:... ?