Skip to content

Latest commit

 

History

History
168 lines (103 loc) · 14.9 KB

lecture.adoc

File metadata and controls

168 lines (103 loc) · 14.9 KB

IPv6

Нехватка IPv4

Начать урок по IPv6 лучше всего с вот такой картинки. В 2010 году всего 7 сетей класса A остались свободными. Картинка хоть и старая, но отлично дает понять, как мало адресов IPv4 осталось.

Использование адресного пространства в IPv4 в 2010 году.
Figure 1. Использование адресного пространства в IPv4 в 2010 году.

Разработчики стека протоколов TCP/IP не ожидали, что за каких-то 20 лет будет израсходовано почти все адресное пространство IPv4, а это 2^32 или 4 294 467 295 IP адреса.

Даже невзирая на классные решения по типу NAT, все равно ощущается большая нехватка IP адресов. Например, если вы купите виртуальную машину в облаке и захотите обеспечить ей доступ из сети Интернет, то вам придется отдельно купить белый IP адрес. Например, в Яндекс.Облако стоимость такого IP адреса около 170 рублей в месяц, что составляет более 15% от общей стоимости сервера.

Поэтому очень хочется начать использовать IPv6.

Хороший вопрос - что случилось с IPv5? Это был экспериментальный протокол реального времени, описанный в RFC 1819. Кому интересно, можете о нем почитать.

Адресное пространство IPv6

Размер адреса в 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 адрес может быть не самым легким делом. Например, вам нужно продиктовать адрес по телефону. Поэтому, для IPv6 адресов есть два правила, которые позволяют сократить их запись:

  1. Выбирается самая длинная подпоследовательность хекстетов состоящая из 0 и она просто удаляется. Такое можно делать только один раз. Если такую подпоследовательность удалить два раза, то мы потом не сможем однозначно восстановить оригинальный IPv6 адрес. Например, есть IPv6 адрес

    2001:0DB8:AA10:0001:0000:0000:0000:15FB.

    Применяя это правило, мы можем записать его как

    2001:0DB8:AA10:0001::15FB
  2. В каждом хекстете (группе из 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

В 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
Команда ping на Loopback IPv6 адрес под ОС Windows.
Figure 2. Команда ping на Loopback IPv6 адрес под ОС Windows.
  • Неопределенный адрес (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 адрес под MacOS.
Figure 3. IPv6 адрес под MacOS.

Можно пропинговать свой собственный интерфейс, чтобы убедиться, что все работает. Так как IPv6 адрес моего интерфейса fe80::49c:1c45:94ae:a37b, то я воспользуюсь командой ping:

ping6 -I en0 fe80::49c:1c45:94ae:a37b

В моем случае, команде ping нужно указать имя интерфейса, с которого пинговать.

Чтобы посмотреть свой IPv6 адрес под Windows, как обычно, воспользуйтесь командой ipconfig.

IPv6 адрес под Windows.
Figure 4. IPv6 адрес под Windows.

Префикс в IPv6

В сетях IPv4 у нас есть:

  • Маска подсети

  • Адрес сети

  • Адрес хоста

Как показано на рисунке ниже.

Адрес сети
Figure 5. Адрес сети, адрес хоста и маска подсети в IPv4.

В сетях IPv6 используются чуть другие термины, как показано на рисунке:

  • Длина префикса

  • IPv6 префикс

  • Адрес хоста

Префикс
Figure 6. Префикс, адрес хоста и длина префикса в IPv6.

В качестве примера IPv6 адреса я использую свой, который у меня установлен под MacOS. В IPv6 длина префикса (в нашем примере это /64) означает количество бит с начала адреса, которые отводятся под префикс. Остальные биты отводятся под адрес хоста (еще его называют адрес интерфейса). Как видно, длина префикса это что-то похожее на маску подсети.

Например, на рисунке выше длина префикса /64, значит сам префикс

FE80:0000:0000:0000

Когда выделяете префикс в IPv6 адресе убедитесь, что вы его правильно определили. Для удобства, преобразуйте адрес из короткой записи в полную и только после этого определяйте префикс.

Кстати, посмотрите на мой IPv6 адрес, он начинается с FE80 (и под MacOS и под Windows). Помните, мы совсем недавно говорили, что это локальные адреса (Link-local). Используются для взаимодействия с другими устройствами в той же локальной сети. Отличительной особенностью этих адресов является то, что трафик «с» или «на» эти адреса не маршрутизируется и в принципе не может выйти за пределы той сети, в которой он был создан.