Начать урок по IPv6 лучше всего с вот такой картинки. В 2010 году всего 7 сетей класса A остались свободными. Картинка хоть и старая, но отлично дает понять, как мало адресов IPv4 осталось.
Разработчики стека протоколов TCP/IP не ожидали, что за каких-то 20 лет будет израсходовано почти все адресное пространство IPv4, а это 2^32 или 4 294 467 295 IP адреса.
Даже невзирая на классные решения по типу NAT, все равно ощущается большая нехватка IP адресов. Например, если вы купите виртуальную машину в облаке и захотите обеспечить ей доступ из сети Интернет, то вам придется отдельно купить белый IP адрес. Например, в Яндекс.Облако стоимость такого IP адреса около 170 рублей в месяц, что составляет более 15% от общей стоимости сервера.
Поэтому очень хочется начать использовать IPv6.
Хороший вопрос - что случилось с IPv5? Это был экспериментальный протокол реального времени, описанный в RFC 1819. Кому интересно, можете о нем почитать.
Размер адреса в IPv6 равен 128 бит, это на много больше, чем 32 бита в IPv4. Держите в голове, что каждый бит удваивает количество IP адресов и начинаем мы с 4 миллиардов. 128 бит это очень большое число и он позволяет адресовать аж 340 282 366 920 938 463 463 374 607 431 768 211 456 IP адресов.
Чтобы попробовать представить себе это число, это 4 294 467 295 адресных пространств IPv4. А в процентном отношении, количество адресов IPv4 занимает лишь 0.00000000000000000000000000126% от IPv6.
Внедрение IPv6 это не только решение проблемы нехватки IPv4 адресов, также это:
-
Отсутствие широковещательных пакетов. В IPv6 нет ARP протокола, он там попросту не нужен.
-
Нет нужды использовать NAT
-
Мобильность - хост может переезжать из одной сети в другую со своим IP адресом.
-
IPsec - встроенный механизм использования протокола IPsec (безопасный IP)
-
Улучшенный заголовок, например, больше нет нужды считать контрольную сумму.
Для записи IPv6 адреса не используются десятичные цифры, вместо этого используют шестнадцатеричные, а сам IP адрес записывается в виде 8 хекстетов (группа из 4-х цифр), например
2041:1234:140F:1122:AC91:494E:875B:131B
Постоянно записывать IPv6 адрес может быть не самым легким делом. Например, вам нужно продиктовать адрес по телефону. Поэтому, для IPv6 адресов есть два правила, которые позволяют сократить их запись:
-
Выбирается самая длинная подпоследовательность хекстетов состоящая из 0 и она просто удаляется. Такое можно делать только один раз. Если такую подпоследовательность удалить два раза, то мы потом не сможем однозначно восстановить оригинальный IPv6 адрес. Например, есть IPv6 адрес
2001:0DB8:AA10:0001:0000:0000:0000:15FB.
Применяя это правило, мы можем записать его как
2001:0DB8:AA10:0001::15FB
-
В каждом хекстете (группе из 4-х цифр) ведущие нули удаляются. Если весь хекстет состоит из нулей, остается только последний 0. Возьмем опять наш IP адрес
2001:0DB8:AA10:0001:0000:0000:0000:15FB
Применив это правило адрес становится
2001:DB8:AA10:1:0000:0000:0000:15FB
Итого, применив первое и второе правило наш IP адрес можно теперь записать как 2001:DB8:AA10:1::15FB. Выглядит уже не так страшно.
Давайте еще для примера рассмотрим IPv6 адрес
2001:0DB0:0000:123A:0000:0000:0000:0030
Для начала используем правило 2 и уберем все лидирующие 0, получим
2001:DB0:0:123A:0:0:0:30
А теперь воспользуемся правилом 1, найдем самую длинную подпоследовательность из 0 и уберем ее. В результате получим
2001:DB0:0:123A::30
Итого:
-
Самую длинную подпоследовательность 0 можно удалить, но только 1 раз
-
Хекстет полностью состоящий из 0 можно заменить на 0
-
Лидирующие 0 можно убрать
В IPv6 выделяется несколько типов адресов:
-
Глобальный юникаст (Global unicast) – это аналог публичных адресов в IPv4. Большая часть всех адресов относятся именно к этому классу. Эти адреса должны быть уникальными в пределах всей глобальной сети Интернет. Это все адреса, у которых первые три бита равны “001”. Другими словами, у которых первый хекстет лежит в диапазоне от 2000 до 3FFF.
-
Локальные адреса (Link-local) – адреса, использующиеся для взаимодействия с другими устройствами в том же широковещательном домене. Отличительной особенностью этих адресов является то, что трафик «с» или «на» эти адреса не маршрутизируется и в принципе не может выйти за пределы той сети, в которой он был создан. Уникальность от этих адресов не требуется – в каждой сети они могут быть одними и теми же. Адреса применяются для разных специальных целей, например, для процедуры обнаружения соседей (аналог ARP в IPv6). Диапазон таких адресов FE80::/10 – что означает все адреса у которых первый хекстет в диапазоне от FE80 до FEBF.
-
Групповые адреса (Multicast) – адреса, использующиеся для мультикастовой рассылки. Все эти адреса находятся в диапазоне FF00::/8, или всё что начинается с FF.
-
Loopback – специальный адрес ::1. Все пакеты, идущие на него, не выходят за пределы устройства, а попадают обратно на уровень IP. Таким образом, этот адрес аналогичен 127.0.0.1 в IPv4.
-
Если у вас Linux или MacOS, то можно командой
ping6 ::1
можно проверить, установлен ли на компьютере IPv6.
-
А если у вас Windows, то в командной строке наберите
ping ::1
-
-
Неопределенный адрес (Unspecified address) – адрес, состоящий из одних нулей. Записывается в сокращенной форме как ::. Такой адрес не может быть назначен интерфейсу, но может использоваться в некоторых пакетах в качестве адреса отправителя. Например, когда устройство ещё не получило IP адрес с помощью автоматической конфигурации, о ней – тоже в одной из следующих статей.
-
Уникальные локальные адреса (Unique local) – аналог приватных адресов в IPv4, то есть они могут маршрутизироваться в пределах нашей внутренней сети, но в интернет их анонсировать нельзя. Для них выделена сеть
FC00::/7
Вообще, IPv6 подразумевает отказ от приватных адресов в том смысле, в котором они использовались до этого.
-
Адреса IPv4, отображенные в IPv6 (IPv4 embedded) – это адреса вида
::FFFF:xxxx:xxxx
где xxxx:xxxx – это некоторый IPv4 адрес, переведенный в шестнадцатеричный вид. Эти адреса используются для устройств, не поддерживающих IPv6 и обеспечивают способ отображения адресного пространства старой версии протокола в адресное пространство новой. Еще эти адреса называются IPv4-mapped. Подробней о них можно почитать в RFC 4291
Если у вас включен IPv6 на хосте, то вы можете увидеть ваши IPv6 адреса на сетевых интерфейсах. Для просмотра IPv6 адреса используется та же команда, что и для просмотра IPv4 адреса. Например, у меня на MacOS адрес
fe80::49c:1c45:94ae:a37b
как показано на рисунке ниже.
Можно пропинговать свой собственный интерфейс, чтобы убедиться, что все работает. Так как IPv6 адрес моего интерфейса fe80::49c:1c45:94ae:a37b, то я воспользуюсь командой ping:
ping6 -I en0 fe80::49c:1c45:94ae:a37b
В моем случае, команде ping нужно указать имя интерфейса, с которого пинговать.
Чтобы посмотреть свой IPv6 адрес под Windows, как обычно, воспользуйтесь командой ipconfig.
В сетях IPv4 у нас есть:
-
Маска подсети
-
Адрес сети
-
Адрес хоста
Как показано на рисунке ниже.
В сетях IPv6 используются чуть другие термины, как показано на рисунке:
-
Длина префикса
-
IPv6 префикс
-
Адрес хоста
В качестве примера IPv6 адреса я использую свой, который у меня установлен под MacOS. В IPv6 длина префикса (в нашем примере это /64) означает количество бит с начала адреса, которые отводятся под префикс. Остальные биты отводятся под адрес хоста (еще его называют адрес интерфейса). Как видно, длина префикса это что-то похожее на маску подсети.
Например, на рисунке выше длина префикса /64, значит сам префикс
FE80:0000:0000:0000
Когда выделяете префикс в IPv6 адресе убедитесь, что вы его правильно определили. Для удобства, преобразуйте адрес из короткой записи в полную и только после этого определяйте префикс.
Кстати, посмотрите на мой IPv6 адрес, он начинается с FE80 (и под MacOS и под Windows). Помните, мы совсем недавно говорили, что это локальные адреса (Link-local). Используются для взаимодействия с другими устройствами в той же локальной сети. Отличительной особенностью этих адресов является то, что трафик «с» или «на» эти адреса не маршрутизируется и в принципе не может выйти за пределы той сети, в которой он был создан.