IPv6 представляет собой новую версию протокола IP (Internet Protocol), протокола сетевого уровня в стеке TCP/IP. IPv6 по сути является преемником четвёртой версии протокола IP, и призван прийти ему на смену по весьма банальной причине – адреса протокола IPv4 стремительно заканчиваются, и очень скоро свободных адресов не останется совсем. Так, что же такое протокол IPv6, как он работает и чем он отличается от протокола версии номер четыре? Попробуем разобраться. Поехали!
Зачем он вообще понадобился?
Итак, как мы уже сказали в самом начале, пул адресов IPv4 – близок к исчерпанию. Математика здесь очень простая: так как длина IP-адреса в четвёртой версии составляет 4 байта (32 бита), то общее количество уникальных адресов IPv4 равняется 232, а это – 4 294 967 296. При этом, население нашей планеты на данный момент составляет около восьми миллиардов. Теперь представьте, что будет, если каждый второй на Земле займёт по одному IP-адресу (смартфон, планшет, ноутбук и т.п.). А если не по одному? А ведь ещё огромное количество адресов заняты серверами, маршрутизаторами, интернет-ресурсами и т.д.
В далёком 1981-ом, когда был описан протокол IPv4, число устройств в почти 4,3 миллиона единиц, наверное, не казалось таким уж легко достижимым. Но, уже меньше чем через десять лет после этого, проблема сохранения запаса адресов обрела свою актуальность. Были разработаны технологии, позволяющие замедлить темпы расходования уникальных адресов, типа NAT или CIDR, но, несмотря на это, недостаточность таких мер становилась всё более очевидной. Для того, чтобы предотвратить исчерпание пула адресов, нужны были более кардинальные изменения.
В 1992 году возникло несколько предложений по решению проблемы исчерпания пула IP-адресов, и Инженерным Советом Интернета (IETF) был объявлен конкурс. Цель конкурса – разработка интернет-протокола следующего поколения. В результате чего, в конце 1995 года произошла регистрация первого рабочего предложения RFC 1883 с описанием интернет-протокола версии 6 (номер 5 ранее был присвоен протоколу, разработка которого носила экспериментальный характер).
Создание IPv6 послужило решением, которое должно отложить проблему нехватки адресов на значительно более далёкую перспективу. Всё дело в том, что, в отличие от протокола четвёртой версии, длина адреса IPv6 составляет 128 бит. А это значит, что использование интернет-протокола шестой версии обеспечивает существование уникальных адресов в количестве 340 282 366 920 938 463 463 374 607 431 768 211 456
штук. Проще говоря, это – чуть больше, чем 3.4х1038
.
Как выглядит IPv6
Итак, длина адреса IPv6 – 128 бит. Запись такого адреса представляет собой восемь групп, каждая из которых состоит из четырёх цифр в шестнадцатеричном формате. Такие шестнадцатеричные группы (гекстеты) разделяются друг от друга при помощи двоеточия. Пример написание адреса IPv6 выглядит так:
2001:0db8:abf2:29ea:5298:ad71:2ca0:4ff1
В написании IP-адреса шестой версии существуют несколько общепринятых правил:
- Во-первых, в текстовом представлении адреса договорились опускать начальные нули. То есть, группу, которая выглядит
04fd
, принято записывать как4fd
, а группу0003
– как3
. Например, адрес
2001:0db8:0000:42e9:000f:c360:008a:0b00
при применении данного правила будет выглядеть как
2001:db8:0:42e9:f:c360:8a:b00
- Во-вторых, двойным двоеточием (
::
) принять заменять одну или несколько идущих подряд групп, содержащих одни нули. Например,
2001:0db8:0000:42e9:000f:c360:008a:0b00
можно записать как
2001:db8::42e9:f:c360:8a:b00
или, написание адреса
2001:0db8:0000:0000:0000:c360:008a:0b00
можно сократить до
2001:db8::c360:8a:b00
Второе правило сокращения можно использовать в адресе только один раз, иначе возникнет неоднозначность в его написании.
Ну и плюс к этому, в текстовом представлении IPv6 общепринято использовать строчные латинские символы, а не заглавные.
В браузере при использовании IPv6 в URL необходимо помещать адрес в квадратные скобки, например:
https://[2001:db8::42e9:f:c360:8a:b00]
А при необходимости указать номер порта, его ставят после квадратных скобок через двоеточие:
https://[2001:db8::42e9:f:c360:8a:b00]:443
Пакет IPv6
Пакеты, поддерживающие IPv6, состоят из данных, которые нужны для доставки пакета, а также, информации, которая пересылается непосредственно адресату. По сравнению с IP-протоколом четвёртой версии в формат пакета IPv6 были внесены определённые изменения. В связи с тем, что размер IPv6-адреса вырос с 32 бит до 128, также изменился и размер заголовка пакета – с 20 байт он увеличился до 40 байт. При этом, структура заголовка стала проще: длина адреса увеличилась в четыре раза, а длина заголовка – всего в два. Необходимая для маршрутизации информация – находится в фиксированном заголовке.
Фиксированный заголовок состоит из следующих полей:
- Версия – в данной версии протокола значение должно равняться
0110
в битах (6 – в десятичной системе). Длина поля, как вы понимаете, составляет 4 бита. - Класс трафика – приоритет пакета. Длина поля – 8 бит, старшие 6 их которых классифицируют пакет, а ещё два бита используются для контроля перегрузки (8 бит).
- Метка потока – используется для передачи устройствам маршрутизации информации о последовательности пакетов в данном потоке, которые должны подвергаться определённой обработке (20 бит).
- Длина полезной нагрузки – определяет размер пакета в его полезной нагрузке (16 бит).
- Следующий заголовок – указывает тип расширенного заголовка, идущего следующим (8 бит).
- Предельное число шагов – аналог TTL в протоколе четвёртой версии (8 бит).
- Оставшиеся два поля – адреса отправителя пакета и его получателя. Длина каждого из этих полей – 128 бит.
Также, протокол IPv6 использует информацию, которая помещается между фиксированным заголовком и заголовком более высокого уровня в форме расширенных заголовков. Такая информация является дополнительной и используется не всегда. Расширенные заголовки обрабатываются конечным устройством, кроме заголовка Hop-By-Hop Options. Заголовок Hop-By-Hop Options обрабатывается каждым промежуточным узлом, в том числе отправителем и получателем пакета.
Наименование расширенного заголовка | Тип | Описание |
Hop-by-Hop Options | 0 | Параметры, считываемые всеми устройствами при прохождении |
Routing Header | 43 | Содержит список транзитных устройств для пакета |
Fragment Header | 44 | Содержит данные по фрагментации пакета |
Encapsulating Security Payload Header | 50 | Содержит информацию по шифрованию |
Authentication Header | 51 | Содержит данные по аутентификации пакета |
Destination Options | 60 | Содержит данные для считывания конечными устройствами |
Типы адресов IPv6
Адреса IPv6 делятся на следующие типы:
- Unicast-адреса: предназначены для идентификации интерфейса узла, работающего под управлением IP-протокола шестой версии.
- Multicast-адреса: предназначены для отправки пакетов на несколько адресов (в шестой версии протокола является заменой широковещательного (broadcast) адреса).
- Anycast-адреса: назначается сразу нескольким устройствам, при этом пакет, отправляемый на anycast-адрес, получает узел, являющийся ближайшим из имеющих данный адрес.
Unicast-адреса, в свою очередь, также делятся на типы:
- Global: публичный адрес (является аналогом публичного адреса в протоколе четвёртой версии). К таким адресам в интернете можно проложить полноценный маршрут. Он – уникален, и может настраиваться как статически, так и присваиваться провайдером динамически.
- Unique Local: это – аналог частного адреса в IPv4. Такие адреса не предназначены для маршрутизации в глобальном протоколе шестой версии.
- Link Local: канальные (локальные) адреса, автоматически назначаемые самим хостом. Пакеты, имеющие канальный адрес источника или конечного узла, не могут маршрутизироваться в глобальном интернете и используются только в пределах того канала, в котором созданы. К этим адресам не предъявляется требование уникальности, они могут быть одними и теми же в каждой из сетей. Канальные адреса используются, например, при проведении процедуры обнаружения соседей, примерно так же, как это делает ARP в IPv4. Эти адреса находятся в диапазоне
fe80::/10
, то есть, первый гекстет имеет значения отfe80
доfebf
.
За распределение всех префиксов адресов IPv6 отвечает «Администрация адресного пространства Интернет» IANA. Различные блоки префиксов назначаются различным реестрам. Всего таких реестров – пять. Один из них – RIPE NCC, распределяет префиксы IPv6 для Европы, Ближнего Востока и Центральной Азии. Ещё один – ARIN, распределяет их для Северной Америки. Также, есть и другие: APNIC – для Азии и Тихоокеанского региона; LACNIC — для Латинской Америки и Карибского региона; AfriNIC — для Африки и региона Индийского океана. Например, RIPE NCC получил от IANA диапазон адресов 2001: 800:: /23
, а ARIN – 2001: 0400::/23
и так далее.
Некоторые диапазоны являются зарезервированными. Например, диапазон fd
зарезервирован для адресов Unique Local, диапазон ff
– для адресов Multicast, а диапазон fe80
– для адресов Link Local.
Подсети
Разделение адресов IPv6 на подсети использует иной подход в отличие от того, как это происходит в сетях IPv4. Разделение на подсети в IPv6 не преследует своей целью экономию адресов в глобальном пространстве. В шестой версии протокола более важным является обеспечение иерархической структуры сети.
В обычной ситуации префикс глобальной маршрутизации является идентификатором всей сети, в которой находится адрес. Как правило, это – 48 бит. В свою очередь идентификатор интерфейса определяет сетевой интерфейс данного узла. Обычно, это – 64 бита. Всё остальное, а это, как правило, 16 бит, представляет из себя идентификатор вашей подсети. При помощи этих самых 16-ти бит можно создать 65536 подсетей – от подсети 0000
до подсети ffff
.
Как правило, адреса IPv6 настраиваются автоматически, при этом маршрутизатор сообщает о том, какой префикс доступен в данной ситуации. Под префиксом маршрутизатор понимает префикс глобальной маршрутизации плюс идентификатор данной подсети. То есть, речь идёт о первых 64-х битах. Внутри же подсети интерфейсы устройств идентифицируются при помощи канальных (локальных) адресов. Настраиваемый узел может заполнить 64 бита идентификатора интерфейса самостоятельно, используя префикс канального адреса fe80
. Для этого устройство имеет несколько возможностей.
В большинстве случаев это происходит при помощи использования MAC-адреса интерфейса данного узла. Для генерации идентификатора интерфейса существует определённый алгоритм. Для устройства с MAC-адресом, например, f8:ac65:2b:ba:11
это выглядит следующим образом:
- В середину MAC-адреса нужно вставить
ff:fe
– и привести запись к формату IPv6 –f8ac:65ff:fe2b:ba11
. - Первый октет необходимо перевести из шестнадцатеричной системы в двоичную:
f8
->11111000
. - Шестой бит (начиная с нулевого) нужно инвертировать:
11111000
– >11111010
. - Полученное число необходимо снова перевести в шестнадцатеричную систему:
11111010
->fa
. - Первый октет нужно заменить на полученное значение:
faac:65ff:fe2b:ba11
.
Таким образом, вместо того, чтобы получать адрес по DHCP, как это происходит в IPv4, сетевой адаптер самостоятельно назначает себе адрес IPv6, используя для этого свой же MAC-адрес.
Вместо заключения
Несмотря на свою неидеальность, IPv6 имеет ряд неоспоримых преимуществ перед IP-протоколом четвёртой версии. IPv6 более эффективно маршрутизируется не применяя фрагментацию пакетов, “из коробки” поддерживает IPsec и автоконфигурацию адресов. И по причине исчерпания адресов IPv4 переход на IPv6 неизбежен, хотя и довольно сложен. Требуются значительные вложения по времени и финансам в обновление программно-технической базы провайдеров. Поэтому, по мере модернизации оборудования мы постепенно будем отходить от IPv4.