Кое-что про протокол IPv6
В последнее время все больше стали говорить о переходе с протокола IPv4 (IP, версия 4) к протоколу IPv6 (IP, версия 6), что не удивительно, и, в общем-то, правильно. Дело в том, что используемая сейчас 4-ая версия протокола создавалась далекие 1970-ые годы (по меркам IT-сферы в доисторическую эпоху), и именно сейчас в полной мере стали проявляться проблемы, о которых не думали в то далекое время.
Для начала немного истории. У вас может возникнуть вопрос: «Везде говорят про IPv4 и IPv6, а где IPv5, и что было с IPv1, IPv2 и IPv3?» Здесь все просто, IPv1, IPv2 и IPv3 как таковых не было. Как вы знаете, с протоколом IP в интернете тесно связан протокол TCP, настолько тесно, что их обычно и пишут вместе: TCP/IP. История TCP началась в 1973 году, когда создавалась сеть ARPAnet — родитель Интернета, именно для нее и была подготовлена первая версия протокола TCP (стандарт RFC 675 от 1974 года). Затем в 1977 году была разработана вторая версия протокола TCP, после чего вышел документ Internet Engineering Note number 2 (IEN2), в котором говорится уже про «Internet Protoсol» (сокращение IP там не появляется) и говорится о «слоистой» модели протоколов, которая затем в 1978 году утвердилась в виде так называемой модели OSI. В третьей версии протокол TCP разделился на два отдельных протокола: TCP и IP. Это произошло в 1978 году, но первый стандарт, который утверждает такое разделение вышел в 1980 году, и протоколу IP дали такую же версию, как и новому подправленному TCP, то есть 4-ю версию. Ну а в 1981 году вышел исправленный стандарт протокола IP, который был окончательно утвержден, и используется до сих пор (RFC 791, перевод стандарта на русский язык).
Протокол IPv5 разрабатывался параллельно с IPv6, но считается экспериментальным, и не предназначен для публичного использования, зато некоторые его наработки были взяты в протокол IPv6. Так что на данный момент у нас есть всего две реально используемые версии протокола: четвертая и шестая.
Интересно, что несколько лет назад ходили слухи, будто бы китайцы собираются переходить сразу на IPv9, который был замечен в документе RFC 1606, но обратите внимание на дату публикации (1 апреля 1994 года). Правда, потом китайцы говорили, что они не имели в виду этот шуточный документ, а делали свой протокол, но его признали в итоге неудачным. Вот несколько ссылок по этой теме: 1, 2, 3.
Согласно стандарту IPv4 все адреса (IP-адреса) состоят всего из четырех байт. То есть всего возможно 24 * 8 = 232 = 4 294 967 296 адресов. Эти адреса расходуются и на интернет-серверы, где особенно важно, чтобы каждый сервер однозначно идентифицировался, и на обычных пользователей, которые подключаются к интернету. При этом надо помнить, что часть этих возможных адресов зарезервирована для локальных сетей (откуда и пошли так всеми любимые 192.168.*.*) и для некоторых других нужд, но в то же время есть технические способы давать разным людям одинаковые IP (внешние), поэтому число 232 не отражает реальное количество возможных подключенных узлов.
Много ли это 4 294 967 296 возможных адресов? В прошлом веке их вполне хватало, а теперь, можно сказать, что эти адреса уже исчерпаны. Дело в том, что 1 февраля 2011 года среди пяти региональных регистраторов распределили последние пять блоков IP-адресов. Каждый блок состоит из 224 = 16 777 216 адресов, то есть осталось всего каких-то 83 886 080 свободных IP-адресов на весь мир. Поговаривают, что эти адреса оприходуют уже к концу лета, началу осени этого года.
Новые адреса для данного протокола больше взять негде. В оффлайновом мире, когда подходят к концу запасы какого-то ресурса, начинаются войны. В онлайне дела решаются несколько проще (я надеюсь, что до убийств из-за IP-адреса дело не дойдет), здесь мы сами себе хозяева, захотим, нагенерим еще адресов, но в реальности не все так просто.
На самом деле разработчики давно понимали, что когда-то эти возможные адреса будут исчерпаны, и уже в в конце 1980-ых, начале 1990-ых годов заговорили о новой версии IP-протокола, главной особенностью которого должно стать расширение возможного количества адресов. В январе 1995 года вышел стандарт RFC 1752, который описывал новую версию протокола, названный тогда IPng — от слов IP Next Generation. Черновик того, что сейчас называется IPv6, вышел 10 августа 1998 года, а датой принятия окончательной версии протокола считается апрель 2003 года (стандарт RFC 3513).
Итак, самое главное, ради чего создавался новый протокол, это увеличение количества возможных IP-адресов. Если в IPv4 на адрес отводилось 32 бита, то в IPv6 на него выделяется аж 128 бит.
Таким образом, с использованием протокола IPv6 всего возможно 2128 = 340 282 366 920 938 463 463 374 607 431 768 211 456 адресов. Правда, говорят, что Google уже прикупил себе каких-то 296 адресов (с 2001:4860:0000:0000:0000:0000:0000:0000 по 2001:4860:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF, про обозначение новых IP-адресов будет сказано далее), но все-равно свободными осталось еще 2128 — 296 = 340 282 366 841 710 300 949 110 269 838 224 261 120 адресов, хотя что часть из них тоже зарезервирована для различных целей, но в целом этого количества адресов должно хватить надолго.
В отличие от IPv4, где адреса записывались в виде x.x.x.x, где x — это значение от 0 до 255, адреса в IPv6 могут быть записаны различными способами. Самая развернутая запись выглядит таким образом: x:x:x:x:x:x:x:x, где x — это 16-ричное представление двух байт. В стандарте приводятся два примера такой записи: FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 и 1080:0:0:0:8:800:200C:417A.
Однако, в реальности в такой длинной колбасе может быть много последовательно идущих нулей, чтобы их не писать, вместо них можно написать просто «::» (без кавычек), тогда адрес 1080:0:0:0:8:800:200C:417A превратится в 1080::8:800:200C:417A, FF01:0:0:0:0:0:0:101 — в FF01::101. Чтобы не было неопределенности, сокращатель :: может использоваться в адресе только один раз. Хотелось бы упомянуть еще два особых случая: 0:0:0:0:0:0:0:1 станет ::1, а 0:0:0:0:0:0:0:0 просто ::. Адрес ::1 — это аналог сегодняшнего localhost (более точно это называется the loopback address). Причем обратите внимание, что раньше для localhost было зарезервировано много адресов от 127.0.0.0 до 127.255.255.255, а в IPv6 он остался один. Запись :: обозначает «неопределенный адрес».
Также в стандарте предлагается еще один вид записи: x:x:x:x:x:x:d.d.d.d, где x — это по-прежнему 16-битное представление двух байт, а d — это десятичное представление одного байта (конец напоминает запись адреса из IPv4, тоже через точки). Поэтому адрес может быть записан еще и таким образом: 0:0:0:0:0:0:13.1.68.3 (в сокращенной форме ::13.1.68.3), или 0:0:0:0:0:FFFF:129.144.52.38 (в сокращенной форме ::FFFF:129.144.52.38). Все примеры адресов взяты из стандарта RFC 3513). Такая запись удобна при работе со старым протоколом IPv4. Дело в том, что протокол IPv6 имеет встроенные возможности для туннелирования IPv6-пакетов через оборудование, работающее по протоколу IPv4, а также для представления старых IPv4-адресов в пространстве адресов IPv6.
Теоретически с переходом на IPv6 жизнь пользователей может упроститься благодаря тому, что за каждому человеку (пользователю) могут раздать по постоянному IP-адресу (а то и не по одному), и не надо будет мучиться с динамическими адресами, NAT и т.п., то есть должна упроститься маршрутизация.
Так как IPv6 все-равно не имеет обратной совместимости с IPv4, то разработчики протокола внесли в него дополнительные возможности, которых не было в старом протоколе. Коротко перечислю их:
- IPv6 более расширяемый. Если в будущем он перестанет удовлетворять каким-то требованиям, то вполне возможно, что не придется создавать еще один протокол, а достаточно будет создать расширения для IPv6.
- Многоадресное вещание.
- Обязательное использование подтверждения подлинности и (или) шифрования IP-пакетов с помощью протоколов IPsec. Раньше IPsec тоже можно было использовать, но с введением IPv6 это стало обязательным.
- Из протокола IP убрана контрольная сумма, потому что ее все-равно проверяют другие протоколы, которые работают вместе с IP.
- Возможна поддержка больших пакетов (до 4 ГБ).
Это основное, что хотелось рассказать про IPv6. За кадром остались вопросы, касающиеся поддержки протокола IPv6 железом, операционных систем, настройки IPv6 для конечного пользователя и т.п. Может быть, когда-нибудь я к этому еще вернусь. Собственно, протоколом IPv6 я заинтересовался в тот момент, когда увидел, что, например, Windows 7 уже предлагает использовать этот протокол наравне с IPv4, а в Windows XP поддержка этого протокола уже была, но еще в каком-то зачаточном состоянии (его можно подключить через командную строку).
И в заключении некоторые ссылки, которые помогли мне написать этот пост:
- http://version6.ru/
- http://playground.sun.com/ipv6/
- http://www.tcpipguide.com/free/t_TCPIPOverviewandHistory.htm
- http://book.itep.ru/4/44/ip6_4411.htm
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
Electriq:
Интересно, спасибо 🙂
У меня почему-то где-то глубоко засело неверное предположение, что IPv6 использует 6-байтовые адреса против 4-байтовых у IPv4, и потому так называется. А оказывается там все 16 байт.
Интересно, конечно, как в реальности поведут себя разные устройства. Вот мой домашний роутер, например, примерно четырехлетней давности.
14 июня 2011, 10:28 ппJenyay:
Я когда-то тоже думал, что это не номер версии, а разрядность адреса, а потом оказалось, что все намного интереснее.
Я про железо особо не смотрел, но из того, что попадалось во время написания поста, сложилось впечатление, что даже сейчас еще есть проблемы, чтобы найти железо, которое поддерживает IPv6.
14 июня 2011, 10:37 ппzaporozhskiystudent:
Думаю его долго будут вводить!
15 июля 2011, 11:20 ппМаксим:
А что там с маской подсети?
19 апреля 2012, 11:58 дп