История развития IP от версии 0 до IPv6, причины исчерпания адресного пространства IPv4 и задачи, которые решает IPv6.
В каком году IANA полностью исчерпала свободные блоки /8 адресов IPv4?
Чем IPv6 заменяет broadcast?
Каков статус IPsec в IPv6?
Кто выполняет фрагментацию в IPv6?
Какой минимальный MTU установлен для IPv6?
Почему NAT не считается средством безопасности?
Первый модуль нашего курса посвящен общему обзору IPv6: зачем он нужен, чем отличается от предыдущей версии протокола и другие общие моменты. Для начала поговорим о том, что у нас было в IPv4, чтобы потом было с чем сравнивать.
IP (Internet Protocol) — протокол межсетевого взаимодействия — начал разрабатываться в 1974 году. В то время компьютеры были совсем не такими, как сейчас, и сети компьютерные тоже. Компьютеров было мало, доступны они были далеко не всем. Каналы связи в основном использовали коммутацию цепей — пакетной коммутации практически не существовало, лишь отдельные экспериментальные протоколы.
Поэтому IPv4 был во многом пионерским. Многие вещи, заложенные в 1974 году, актуальны до сих пор. Но создатели исходили из предпосылки, что компьютеры не получат такого распространения, как произошло на самом деле. То, что они смогли предусмотреть — предусмотрели. А машины времени у них не было, и знать, как все обернется спустя 40 лет, они не могли.
По факту протокол IPv4, которым мы пользуемся сегодня, оптимизирован под технологии 40-летней давности. Служебные протоколы — ICMP, ARP и другие — тоже оптимизированы под старые технологии. Поэтому сегодня IPv4 вынужден использовать множество дополнительных механизмов, которые позволяют ему хоть как-то существовать в современных сетях. Все эти костыли усложняют работу протокола, и на оригинал это уже мало похоже.
Для работы IPv4 в современных сетях требуются:
Если маршрутизацию выполнять строго по стандартам — это достаточно сложная вычислительная задача. Поэтому все производители на практике игнорируют рекомендации и маршрутизируют IP-пакеты с помощью аппаратных ускорителей. Эти чипы «пережевывают» маршруты из таблицы маршрутизации, складывают их в отдельную оптимизированную таблицу, и специальный чип быстро перекладывает пакеты с одного интерфейса на другой. Результат похож на то, что должно быть по стандарту, но внутри маршрутизатора все происходит иначе.
Примеры таких технологий:
Сегодня IPv4 увешан костылями по самое «не могу» — самого протокола уже не видно. В частности, у современного IPv4 нет связности от края до края (end-to-end connectivity). Это требование было изначальным, но мы вынуждены его нарушать из-за нехватки адресов.
Мы используем NAT, разбиваем адресное пространство на частное и публичное. В частном пространстве сидим, в публичном — кто-то отдельно. Из публичного в частное добраться вроде как нельзя. Если очень надо — можно, но это все отдельные костыли.
Мы используем бесклассовую адресацию (CIDR). Изначально была красивая идея: по первым битам IP-адреса определять, в какой сети он находится. Механизм был элегантный, но приводил к исключительно неэффективному расходованию адресов. Это стало понятно буквально сразу после выхода протокола, механизм быстро выпилили, и красивая идея так и осталась на бумаге. А механизмы реализации бесклассовой адресации — это тоже, так или иначе, костыли.
В итоге IPv4 целиком состоит из компромиссов. Того, что было изначально, мы даже не видим.
Примерная история протокола. Здесь указаны даты ключевых событий.
| Год | Событие |
|---|---|
| 1974 | Начало разработки протокола IP (тогда ещё как часть TCP) |
| 1978 | Финальная версия IPv4 более-менее зафиксирована |
| 1981 | Опубликован RFC 791 — основной стандарт IPv4 |
| 1982 | IPv4 используется в ARPANET |
| ~1985-86 | IPv4 задействуется в CERN |
| 1990 | Появляется первый веб-сервер и первый веб-браузер (HTTP, WWW), разработанные Тимом Бернерсом-Ли |
| 1993 | Выходит первый массовый веб-браузер Mosaic |
| 1994 | Начало разработки IPv6 |
| 1996 | Первая тестовая сеть на IPv6 — 6bone |
| 1998 | Опубликован RFC 2460 — стандарт IPv6 |
| ~2006 | IPv6 «устаканился»: опубликованы RFC с требованиями к узлам и маршрутизаторам |
| 2010 | 3GPP признает IPv6 основным протоколом для мобильных сетей (4G/LTE) |
| 2016 | Опубликован черновик RFC «Закат IPv4» (предложение объявить IPv4 устаревшим) |
Изначально протокол назывался Transmission Control Protocol. Потом из него вычленили отдельно протокол межсетевого взаимодействия, а TCP переехал в отдельный документ. Так из одного протокола получилось два: TCP и IP. Именно поэтому заголовки TCP и IP очень похожи друг на друга — много полей устроены одинаково. Это не случайность: изначально это был один протокол, который потом искусственно разделили.
RFC — коротенькие документы. Если отбросить вступление и заключение с выводами, останется очень мало, но очень насыщенного текста. Если хотите разобраться в какой-то технологии — читайте RFC напрямую.
К 1993 году, когда интернет только зарождался и публика еще не вкусила даже десятой доли его возможностей, уже практически четверть адресного пространства IPv4 была использована. Адреса выделены, кто-то заплатил за них деньги — может, и не использует, но пространство заканчивается стремительно.
В 1994 году началась разработка IPv6. К 1994 году стало ясно: IPv4 настолько хорошо «взлетел», что все стали им пользоваться, и адресов просто не хватит.
На диаграмме IANA (Internet Assigned Numbers Authority) показано количество свободных блоков /8. Эти блоки не появляются заново — их ограниченное количество.
Из всего адресного пространства IPv4:
1110) — зарезервирован под multicast1111) — зарезервирован IANA/8Начиная с ~1996 года количество свободных блоков падает заметно. У самой IANA блоки полностью закончились примерно в 2011 году. У региональных регистраторов (RIR) какие-то адреса еще остались, но ни одного полного, нераспечатанного блока /8 уже нет — только «огрызки», которые интенсивно заканчиваются.
Все региональные регистраторы перешли в режим жесткой экономии: при запросе IPv4-адресов требуют обоснование, при крупных запросах — активно интересуются, зачем столько. На вторичном рынке цены на IPv4-блоки, особенно крупные, растут. Есть рынок перекупщиков адресов, но ресурс очень ограниченный.
Вернуть в протокол изначально задуманную сквозную связность (end-to-end connectivity): любой узел может достать до любого другого, если только это не ограничено административно.
Многие начинающие сетевые администраторы не любят IPv6 именно из-за отсутствия NAT: «Как же нас снаружи тогда похакают?» При этом они забывают, что NAT — это не технология повышения безопасности. NAT нужен как костыль для выхода из частного адресного пространства в публичное. Да, он имеет побочный эффект — делает некоторые атаки невозможными. Но при целенаправленной атаке (например, с подменой IP-адресов) NAT не спасет.
Для защиты сети нужны access-листы, файрволы и подобные механизмы — как в IPv4, так и в IPv6.
В IPv6 вернули предсказуемость адресов: можно посмотреть на первые биты адреса и сделать глобальные выводы. При этом преимущества бесклассовой адресации сохранены. В частности, механизм CIDR (Classless Inter-Domain Routing) позволяет агрегировать маршруты, что критично для провайдерских маршрутизаторов. В IPv6 протокол специально сделан так, чтобы CIDR можно было использовать легко и удобно.
В IPv4 было поле опций — красивая идея «дырочки» для будущих расширений. На практике:
В IPv6 вместо одного поля опций сделали дополнительные заголовки (Extension Headers) с предсказуемым форматом. Если узел не может разобрать конкретный заголовок — он видит его размер и просто перескакивает на следующий.
Все сторонние протоколы, которые в IPv4 были обязательны для нормальной работы — ICMP, ARP, DHCP — вошли в IPv6 как составные части. Вместо пачки разных протоколов появился один служебный — ICMPv6, который умеет делать практически все. Для задач, которые в него не вошли, существуют дополнительные протоколы (например, DHCPv6), творчески переработанные для удобной работы с IPv6.
В IPv4 для разных сред передачи нужны были разные протоколы: ARP для Ethernet, Inverse ARP для Frame Relay и так далее. В IPv6 — один ICMPv6 на все случаи.
IPv6 использует 128-битные адреса, что дает примерно 3,4 * 10^38 адресов. Не все из них можно назначить конкретным узлам (адресное пространство «рыхлое»), но адресов все равно на много порядков больше, чем в IPv4.
Следствия:
Заголовок IPv6 содержит минимальный набор полей, необходимых для маршрутизации. Все немаршрутизационные задачи вынесены в дополнительные заголовки. Это позволяет:
В IPv4 невозможно было гарантировать, что удаленный узел поддерживает шифрование или цифровую подпись. В IPv6 поддержка IPsec обязательна: каждый узел с IPv6 обязан уметь отправлять и принимать зашифрованный трафик. Это не означает автоматического шифрования всех пакетов — правила все равно нужно настраивать вручную. Но вы можете быть уверены, что любой IPv6-узел способен согласовать защищенное соединение.
В IPv4 обеспечение мобильности — возможности переключаться между сетями с сохранением IP-адреса — требовало построения туннелей и сложных схем. В IPv6 механизм мобильности стал штатным: можно переключаться между Wi-Fi, 3G, LTE, менять провайдеров, пересекать границы стран — и сохранять один и тот же адрес.
Эта тема больше относится к провайдерским сетям и в данном курсе подробно не рассматривается.
В IPv4 фрагментацию мог выполнить любой промежуточный маршрутизатор. В IPv6 фрагментация выполняется только отправителем. Если пакет не пролезает на каком-то участке сети, маршрутизатор отправляет сообщение отправителю с указанием допустимого размера, и тот уже нарезает следующие пакеты нужного размера.
Минимальный MTU:
Увеличение минимального MTU полезно для многих приложений. Например, DNS в IPv4 ограничивал размер UDP-датаграмм значением 576 байт (с учетом заголовков), чтобы гарантировать прохождение через любую сеть. Для отправки данных большего размера требовалось расширение EDNS0 или переключение на TCP. В IPv6 с MTU 1280 байт пространства для данных значительно больше.
В IPv4 было много типов broadcast:
255.255.255.255)192.168.0.255)В IPv6 broadcast полностью отсутствует. Везде используется либо multicast, либо unicast. Это резко повышает эффективность использования сети.
Пример неэффективности broadcast в IPv4: при отправке DHCP Discover (с 0.0.0.0 на 255.255.255.255) все узлы сети получают кадр, разбирают его на канальном уровне, поднимают до IP, проверяют чек-суммы, передают в UDP, проверяют порт — и только тут узнают, что они не DHCP-сервер. Все узлы синхронно напрягаются, хотя адресат только один.
В IPv6 используются мультикастовые группы: приложение, которое хочет найти соседа, отправляет пакет в определенную группу, и напрягаются только участники этой группы, а не все узлы в сети.
Вот примерно так будет выглядеть сравнение протоколов IPv4 и IPv6.
| Характеристика | IPv4 | IPv6 |
|---|---|---|
| Длина адреса | 32 бита (~4 млрд адресов) | 128 бит (~3,4 * 10^38 адресов) |
| NAT | Необходим | Не нужен (связность от края до края) |
| Адресация | Бесклассовая (костыль поверх классовой) | Изначально бесклассовая с предсказуемой структурой |
| Фрагментация | На любом узле | Только на отправителе |
| Минимальный MTU | 576 байт | 1280 байт |
| Broadcast | Есть | Нет (заменен multicast) |
| Служебные протоколы | ICMP, ARP, DHCP и др. | Единый ICMPv6 + DHCPv6 |
| IPsec | Опциональный | Обязательная поддержка |
| Мобильность | Костыли с туннелями | Штатный механизм |
IPv6 — это существенно более проработанный протокол. По сути, это тот же IP (Internet Protocol), просто детали в версии 6 проработаны значительно лучше, чем в версии 4. А принцип работы тот же: узел отправляет пакет, тот доходит до получателя или промежуточного маршрутизатора, который пересылает его ближе к сети назначения.
Сегодня, в мае 2016 года, порядка ~10% пользователей в мире используют IPv6 для доступа к сервисам Google.
Ситуация в разных странах неодинакова.
| Страна | Доля пользователей IPv6 |
|---|---|
| Бельгия | ~44% |
| США | ~25% |
| Германия | ~25% |
| Франция | ~15% |
| Китай | ~1,5% |
| Россия | ~1% |
| Индия | <1% |
При этом ~25% автономных систем в мире анонсируют IPv6-префиксы — в том числе и в развивающихся странах. Это означает, что провайдеры готовятся к переходу: получили свои IPv6-сети, анонсировали их, просто пользователи пока не «дотянули последнюю милю».
Многие ресурсы создаются людьми без глубоких технических знаний, по инструкциям, написанным для IPv4. Корпорации тоже инертны — пока IPv4 работает, срочно менять никто не торопится. Но ситуация меняется.
По данным AMS-IX (Amsterdam Internet Exchange): ~40 Гбит/с IPv6-трафика, что составляет порядка 1,5% от общего объема. По сравнению с 2015 годом трафик вырос вдвое.
Всемирный день IPv6 прошел в 2012 году. Скачок роста наблюдается спустя 3-4 года, и сейчас IPv6 действительно начинает идти в массы.