IPv6-адрес
IPv6-адрес (англ. Internet Protocol Version 6 address) — цифровая метка, используемая для идентификации сетевого интерфейса компьютера или любого другого сетевого узла, работающего в IPv6-сети. В отличие от обычных IP-адресов вроде 192.168.0.3, IPv6-адрес имеет вид вроде 2001:0db8:85a3:0000:0000:8a2e:0370:7334.
Протокол IPv6 призван заменить протокол IPv4, широко используемый в сети Интернет. В отличие от IPv4, в котором используются 32-битные адреса, в IPv6 используются адреса длиной 128 бит. Поэтому IPv6 обладает значительно большим адресным пространством, нежели IPv4.
Типы IPv6-адресов
IPv6-адреса можно классифицировать по способу адресации: одноадресные (Unicast), Anycast и групповые (Multicast)[1].
- Unicast адреса идентифицируют только один сетевой интерфейс. Протокол IPv6 доставляет пакеты, отправленные на такой адрес, на конкретный интерфейс.
- Anycast адреса назначаются группе интерфейсов, обычно принадлежащих различным узлам. Пакет, отправленный на такой адрес, доставляется на один из интерфейсов данной группы, как правило наиболее близкий к отправителю с точки зрения протокола маршрутизации.
- Multicast адрес также используется группой узлов, но пакет, отправленный на такой адрес, будет доставлен каждому узлу в группе.
В IPv6 не реализованы широковещательные адреса. Традиционная роль широковещательной рассылки реализована с помощью групповой рассылки на адрес ff02::1, однако использование этой группы не рекомендуется.
Структура адреса
IPv6-адрес состоит из 128 бит, которые, в зависимости от типа адреса, делятся на различные логические группы.
Структура Unicast и Anycast адреса
Unicast и Anycast адреса как правило состоят из двух логических частей: 64-битного префикса сети, используемого для маршрутизации и 64-битного идентификатора интерфейса, используемого для идентификации сетевого интерфейса узла.
биты | 48 (или больше) | 16 (или меньше) | 64 |
---|---|---|---|
поле | routing prefix | subnet id | interface identifier |
Префикс сети (комбинация полей префикс маршрутизации (routing prefix) и идентификатор подсети (subnet id)) содержится в старших 64 битах адреса. Размер префикса маршрутизации может увеличиваться, отнимая биты адреса у поля subnet id. Биты поля subnet id могут использоваться сетевым администратором для создания подсетей. Поле идентификатор интерфейса (interface identifier) может быть получено одним из способов:
- автоматически сгенерирован из MAC-адреса с помощью модифицированного EUI-64;
- получен от DHCPv6 сервера;
- автоматически установлен случайным;
- настроен вручную.
Локальные (англ. Link-local) адреса также основываются на идентификаторе интерфейса, но используют другой формат префикса сети.
биты | 10 | 54 | 64 |
---|---|---|---|
поле | prefix | нули | interface identifier |
Поле prefix содержит двоичное значение 1111111010, а 54 нуля делают префикс сети одинаковым для всех сетей, что делает локальные адреса немаршрутизируемыми.
Структура Multicast адреса
Multicast адрес формируется в соответствии с несколькими правилами, в зависимости от применения.
биты | 8 | 4 | 4 | 112 |
---|---|---|---|---|
поле | prefix | flg | sc | group ID |
Поле prefix содержит двоичное значение 11111111 в любом multicast адресе.
Запись адреса
IPv6 адрес, состоящий из 128 битов, можно представить в виде восьми групп из четырёх шестнадцатеричных цифр, по 16 битов на группу. В тексте они разделяются двоеточием:
- 2001:0db8:85a3:0000:0000:8a2e:0370:7334
Стандарт RFC 5952 определяет вид IPv6 адреса в тексте, определяя однозначный способ записи адреса в тексте максимально коротким способом, удобным при этом для символьной обработки программами:
- В записи используются латинские буквы только нижнего регистра. Несмотря на то, что шестнадцатеричные цифры сравниваются по коду символа без учёта регистра, IETF предлагает использовать только строчные буквы, например 2001:db8::1 вместо 2001:DB8::1.
- Незначащие нули в каждом поле можно опустить, однако каждая группа должна иметь хотя бы один знак, даже если она состоит из одних нулей. Например, 2001:0db8::0001:0000 записывается как 2001:db8::1:0.
- Самая длинная последовательность нулевых полей заменяется двумя двоеточиями ("::"). Если таких последовательностей несколько, для предотвращения неоднозначности сжимается крайняя левая. Например 2001:db8:0:0:1:0:0:1 записывается как 2001:db8::1:0:0:1, а не как 2001:db8:0:0:1::1. Кроме того, "::" может использоваться для сокращения последовательности из только одного нулевого поля, то есть 2001:db8:0000:1:1:1:1:1 сокращается до 2001:db8:0:1:1:1:1:1 либо до 2001:db8::1:1:1:1:1.
Эти правила позволяют очень коротко записывать некоторые распространённые адреса. Например, localhost 0:0:0:0:0:0:0:1 записывается как ::1, а незаданный адрес 0:0:0:0:0:0:0:0 как ::.
Для плавного перехода от IPv4 к IPv6 предусмотрена специальная нотация, при которой IPv4-адреса могут быть записаны в IPv6 таким образом: последние 32 младших бита записываются как IPv4-адрес, а перед ними идут только нулевые поля и одно единичное, записанные в нотации IPv6. Так, IPv6-адрес ::ffff:c000:0280, соответствующий IPv4-адресу 192.0.2.128, записывается как ::ffff:192.0.2.128.
Символ ":" может быть неправильно интерпретирован в других синтаксисах, в частности в URI и URL. Двоеточие традиционно используется для завершения пути к хосту перед номером порта, потому IPv6-адрес ограничивается квадратными скобками, например
- http://[2001:db8:85a3:8d3:1319:8a2e:370:7348]/
или вариант с портом:
- https://[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443/.
Для адресов с областью действия, отличной от глобальной, и, в частности, для адресов локальной связи, выбор сетевого интерфейса для отправки пакета может зависеть от того, к какой зоне принадлежит адрес: один и тот же адрес может быть действительным в разных зоны и использоваться разными хостами в каждой из этих зон. Даже в том случае, если адрес не используется в разных зонах, префиксы для адресов в этих зонах могут быть идентичными, что мешает операционной системе выбрать исходящий интерфейс, основываясь только на информации в таблице маршрутизации (основанной на префиксах). Чтобы устранить такую неоднозначность, к адресу при помощи знака "%" должен быть добавлен индекс зоны, синтаксис которого в общем случае определяется реализацией. Например, локальный адрес
- fe80::1ff:fe23:4567:890a
может быть записан как
- fe80::1ff:fe23:4567:890a%eth2
или
- fe80::1ff:fe23:4567:890a%3.
Первый вариант (с помощью указания имени интерфейса) распространён в Unix-подобных системах, второй вариант же является стандартными синтаксисом в Windows. Этот же вариант является стандартным, и потому должен поддерживаться во всех системах.
Подсети
Сеть IPv6 использует блоки адресов, представляющие собой непрерывную группу адресов размером равным одной из степеней двойки. Согласно нотации CIDR, эти блоки обозначаются первым адресом в блоке (оканчивающимся нулями), косой чертой "/" и десятичным значением, равным числу бит, которое занимает префикс. Префикс определяется левой ненулевой частью первого адреса. Например, сеть, записанная как 2001:db8:1234::/48, имеет префикс 2001:db8:1234, начинается с адреса 2001:db8:1234:0000:0000:0000:0000:0000 и заканчивается на 2001:db8:1234:ffff:ffff:ffff:ffff:ffff.
Префикс сети может быть указан вместе с адресом, как например адрес 2001:db8:a::123 в подсети 2001:db8:a::/64 может быть записан как 2001:db8:a::123/64.
Размер блока, то есть число адресов в нём, зависит от размера префикса. Например, блок с префиксом длины 48 бит будет содержать 2128 − 48 = 280 адресов. Уменьшение длины префикса позволит вмещать больше адресов.
См. также
Примечания
- R. Hinden, S. Deering (February 2006) IP Version 6 Addressing Architecture, IETF. RFC 4291.