--- status: stable type: concept tags: - network - networking - protocols - ipv6 created: 2025-12-17 updated: 2026-05-07 aliases: - IPv6 --- # IPv6 При использовании IPv4 с 4 миллиардами адресов, в какой-то момент очевидно столкнулись с проблемой их нехватки. Даже создание PAT и использование локальной адресации не сильно спасло ситуацию. Решением проблемы стало изобретение IP версии 6, где используется не 32 бита для кодирования адреса, а 128, при этом, увеличение количества бит на единицу, увеличивает кол-во доступных адресов ровно в два раза, следовательно, для 128 бит вакантных адресов примерно... $$\large 340\ 282\ 366\ 920\ 938\ 463\ 463\ 374\ 607\ 431\ 768\ 211\ 456$$ Это много, даже очень. IPv5 А что случилось с IPv5? Хороший вопрос ... IP-версия 5 была использована для экспериментального проекта под названием "Протокол интернет-потока". Он определен в RFC, если вас интересуют исторические причины: [http://www.faqs.org/rfcs/rfc1819.html](http://www.faqs.org/rfcs/rfc1819.html) ## Отличия IPv4 И IPv6 В чем же основная проблема перехода на IPv6? А в том, что нет совместимости протоколов для IPv4 и новых поколений. - **OSPF** был обновлен с 2 (IPv4) до 3 (IPv6) версии. - **ICMP** был обновлен до ICMP 6. - **ARP** был заменен на _NDP_ (Neighborhood Discovery Protocol). ![](IPv6_image.png) Вместо того чтобы уже добавлять все поля в заголовок, заголовок IPv6 использует "следующий заголовок", который ссылается на необязательные заголовки. Поскольку заголовок намного проще, маршрутизаторам придется выполнять меньше работы. Маршрутизация тоже сильно поменялась при переходе на новую версию: 1. RIP -> RIPng (RIP Next Generation) 2. BGP (Border Gateway Protocol) - протокол, объединяющий интернет вместе. MP-BGP - Multi-Protocol BGP, он может маршрутизировать IPv6. EIGRP также поддерживает IPv6. Надо учитывать, что даже при условии поддержки OSPF и EIGRP адресации обоих версий, это два **разных протокола**. Из этого следует, что сначала надо поднять протокол для одной версии, а потом для другой. Использование двух версий IP называется **двойным стеком**. > Поскольку эти два протокола несовместимы, в будущем будет происходить переход с IPv4 на IPv6. Это означает, что вы будете запускать оба протокола в своей сети и, возможно, однажды вы сможете отключить IPv4, так как весь интернет будет настроен на IPv6. ## Формат IPv6 ```text 2041:0000:140F:0000:0000:0000:875B:131B ``` Он сильно длиннее, чем IPv4, состоит из 8 частей, каждая часть состоит из 4 шестнадцатиричных чисел. ![](5_IPv6_image.png) Таблица перевода шестнадцатиричных чисел в двоичные Существуют некоторые правила, позволяющие упростить работу с адресами: 1. Если есть несколько частей с нулями, то их можно убрать, заменив на `::` `2041:0000:140F:0000:0000:0000:875B:131B` -> `2041: 0000:140F:: 875B:131B` 2. Если есть одиночный блок с нулями, то можно его заменить на один ноль `2041: 0000:140F:: 875B:131B` -> `2041:0:140F:: 875B:131B` 3. При наличии в блоке значащих чисел и нулями перед ними, нули можно опустить `2001:0001:0002:0003:0004:0005:0006:0007` -> `2001:1:2:3:4:5:6:7` При использовании IPv4 и нехватке адресов, люди начали адаптироваться, придумав частные сети и [[VLSM]] (сегментацию сети), использовали [[NAT]] и так далее. При переходе на IPv6 такой проблемы уже не будет, т.к. пула доступных адресов будет достаточно для снабжения адресами нескольких планет, таких, как Земля. Протокол IPv6 предлагает два варианта для одноадресной рассылки: 1. Global Unicast 2. Unique Local Ранее, как отголосок IPv4 существовал третий диапазон адресов "site local", который начинался с `FEC0::/10`. Он предназначался для использования во внутренних сетях (аналог `192.168.0.0/24`), но был удален из стандарта IPv6. **Global Unicast** передачи похожи на публичные IPv4 адреса. Каждая компания, желающая подключится к интернету, получает пул адресов, которые они, на своё усмотрение, делят на более мелкие префиксы, чтобы все устройства сети поулчили IPv6 адрес, притом уникальный во всем мире. Зарезервированный блорк называется префиксом глобальной маршрутизации. ## Получение Префиксов - **IANA** отвечает за распределение всех префиксов IPv6. Они будут назначать реестрам разные блоки, которыми будут управлять региональные компании. - **ISP**, попадлающие под реестр региональной компании, заправшивает блок IPv6. Они получают свой пул адресов, которые могут распределять между провайдерами. ! ![](4_IPv6_image.png) > Некоторые префиксы **FD**: Unique Local **FF**: Multicast **FE80**: Link-Local ## Local И Link-Local После получения клиентом от провайдера префикса, например, `2001: 828:105:: / 48`, необходимо его разбить на подсети для различных VLAN и point-to-point соединений, которые могут быть. Поскольку адресное пространство настолько велико, все используют префикс `/64` для подсетей. Не имеет смысла брать меньшие подсети. Когда мы используем IPv4, мы вынуждены, для подсетей, дробить хостовую часть! ![](12_IPv6_image.png) Тогда, у нас, в целом, будет меньше хостов на подсеть. ![](3_IPv6_image.png)  В IPv6 такой проблемы нет: ![](11_IPv6_image.png) Префикс Global Routing был назначен провайдером. Последние 64 бита называются **идентификатором интерфейса**, это эквивалетно части хоста в IPv4. Путем несложно математики, получается, что у нас 16 бит на подсети, а это около 65536 подсетей (как правило, этого _более чем_ достаточно). В этой же схеме, на хосты в каждой подсети отводится около **18 квинтиллионов** хостов. Если клиент получил префикс `2001: 828: 105:: / 48`, то он может создать такие подсети:  ![](2_IPv6_image.png) ```text - 2001:828:105:0000::/64; - 2001:828:105:0001::/64; - 2001:828:105:0002::/64; - 2001:828:105:0003::/64; - 2001:828:105:0004::/64; - 2001:828:105:0005::/64; - 2001:828:105:0006::/64; - 2001:828:105:0007::/64; - 2001:828:105:0008::/64; - 2001:828:105:0009::/64; - 2001:828:105:000A::/64; - 2001:828:105:000B::/64; - 2001:828:105:000C::/64; - 2001:828:105:000D::/64; - 2001:828:105:000E::/64; - 2001:828:105:000F::/64; - 2001:828:105:0010::/64; - 2001:828:105:0011::/64; - 2001:828:105:0012::/64; - 2001:828:105:0013::/64; - 2001:828:105:0014::/64; ... ```