Сокращение IPv6 адресов
Адрес протокола IPv6 состоит из 128 бит и записывается обычно в шестнадцатеричном виде. Адрес разбиваются на блоки по 16 бит (хекстеты) и каждый блок представляется четырьмя шестнадцатеричными цифрами. Хекстеты разделяются знаком двоеточия. Таким образом, адрес получается достаточно длинным – он состоит из 32 шестнадцатеричных цифр и 7 знаков двоеточия.
Пример IPv6 адреса 2001:0DB0:0000:123A:0000:0000:0000:0030. Запись весьма длинная, чтобы немного упростить процесс записи адресов, используют сокращенную запись. Для того чтобы сократить данный адрес надо последовательно применить два правила.
Правило 1
В каждом хекстете (группе из 4-х цифр) ведущие нули удаляются. Например, во втором хекстете 0DB0 заменяется на DB0. То есть ноль слева удаляется, ноль справа мы не трогаем. Если хекстет состоит из одних нулей, то он заменяется на один нуль. Таким образом адрес 2001:0DB0:0000:123A:0000:0000:0000:0030 преобразуется в 2001:DB0:0:123A:0:0:0:30. А, например, адрес loopback 0000:0000:0000:0000:0000:0000:0000:0001 заменяется на 0:0:0:0:0:0:0:1.
Правило 2
Это правило применяется только после первого. В адрес выбирается одна самая длинная группа, состоящая из полностью нулевых хекстетов, то есть самая длинная последовательность «:0:0:0:» и заменяется на два двоеточия «::». Эту замену можно произвести только один раз и только с самой длинной последовательностью, так как, если бы мы, например, сделали такую замену в двух местах адреса, то потом нельзя было бы восстановить, сколько именно хекстетов мы заменили в первом и во втором случае. Важный момент: нельзя заменять одну группу из :0: на ::, правило два применимо только если есть более одной нулевой группы.
Для примера возьмём адрес из предыдущей замены 2001:DB0:0:123A:0:0:0:30. Самая длинная последовательность из полностью пустых хекстетов – это «:0:0:0:», она начинается сразу после хекстета «123A». Есть ещё последовательность из одного пустого хекстета (между «DB0» и «123A»), но эта – длиннее, так что заменять будем её. Адрес станет совсем небольшим: 2001:DB0:0:123A::30 конечно, длиннее IPv4 адреса, но гораздо короче исходного.
Получение исходного адреса по сокращённой записи
Эта процедура достаточно тривиальна, если мы уже умеем сокращать адреса.
Сначала надо посчитать, сколько хекстетов в адресе осталось. В нашем случае, в адресе 2001:DB0:0:123A::30 осталось 5 хекстетов. Мы знаем, что адрес должен состоять из восьми хекстетов – значит вместо «::» возвращаем три недостающих нулевых, получаем 2001:DB0:0:123A:0:0:0:30. Теперь в каждой группе, где меньше четырёх цифр дописываем слева такое количество нулей, чтобы в группе стало четыре цифры. В результате получим исходный адрес 2001:0DB0:0000:123A:0000:0000:0000:0030.
Примеры
Теперь, чтобы закрепить понимание, приведём несколько примеров сокращения адресов. Сокращать будем по правилам в два этапа.
- FF80:0000:0000:0000:0123:1234:ABCD:EF12 → FF80:0:0:0:123:1234:ABCD:EF12 → FF80::123:1234:ABCD:EF12
- FF02:0000:0000:0000:0000:0001:FF00:0300 → FF02:0:0:0:0:1:FF00:300 → FF02::1:FF00:300
- 2001:0DB8:0000:1111:0000:0000:0000:0200 → 2001:DB8:0:1111:0:0:0:200 → 2001:DB8:0:1111::200
- 0000:0000:0000:0000:0000:0000:0000:0001 → 0:0:0:0:0:0:0:1 → ::1
- 0000:0000:0000:0000:0000:0000:0000:0000 → 0:0:0:0:0:0:0:0 → ::
Адрес loopback выглядит в сокращённой записи особенно элегантно ::1. Даже если вы не пользуетесь IPv6, но работаете на одной из современных операционных, систем, у вас наверняка установлен этот протокол. Это легко проверить, пропинговав loopback.
ping ::1 Pinging ::1 with 32 bytes of data: Reply from ::1: time<1ms Reply from ::1: time<1ms Reply from ::1: time<1ms Reply from ::1: time<1ms Ping statistics for ::1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
Комментарии
Валерий (не проверено)
пт, 01/24/2014 - 16:51
Постоянная ссылка (Permalink)
Здравствуйте,
могу ли я разместить на своих страница ссылку на этот материал?
Небольшое дополнение: имхо, нелишне было бы упомянуть, что одиночное :0: не сокращается до :: - то есть, скажем, 2001:db8:0000:9:1:2:3:4 нельзя сокращать до 2001:db8::9:1:2:3:4
(а почему вы используете 2001:db0 вместо обещпринятого 2001:db8 ?)
bacek
пт, 01/24/2014 - 20:44
Постоянная ссылка (Permalink)
По поводу использования материала - у меня об этом есть в "О сайте". В двух словах - можно не спрашивать, если будет индексируемая гипперссылка на оригинал.
Что касается 2001:db0 - то не могу точно сказать - писал давно. Наверное чтобы показать, что правила одни для всех типов адресов, а может просто опечатался. Не думаю, что это принципиально.
А вот про сокращение одного нуля (что нельзя сокращать одну группу до ::) я не слышал до этого. Можно линк на первоисточник?
Валерий (не проверено)
пт, 01/24/2014 - 20:52
Постоянная ссылка (Permalink)
Про сокращение - см. RFC5952
Узнал про это после прочтения презабавнейшей истории http://labs.apnic.net/blabs/?p=309
История длинная, истина где-то в конце.
Не для печати: если будет тоскливо дочитывать, или не позволит занятость, то я конспективно излагал ее на своих страничках http://ip.v6net.ru/archives/1419
bacek
пт, 01/24/2014 - 22:15
Постоянная ссылка (Permalink)
Валерий (не проверено)
пт, 01/24/2014 - 22:28
Постоянная ссылка (Permalink)
Когда я сдавал (10 лет назад) - вообще не было вопросов по IPv6...
bacek
пт, 01/24/2014 - 22:50
Постоянная ссылка (Permalink)
Илья (не проверено)
пт, 11/11/2016 - 10:22
Постоянная ссылка (Permalink)
(2a00:a960:1023:0:0:0:0:1188) не могли бы помочь определить местонахождение данного айпи. Заранее спасибо
bacek
пн, 12/12/2016 - 15:12
Постоянная ссылка (Permalink)
RUSLAN (не проверено)
пн, 03/30/2020 - 10:45
Постоянная ссылка (Permalink)
AB1E:2B00::1234:5678:9101:1112:1113
now in 2020 shortening is actually happening. i'm not sure maybe it was just changed since 2014
example from ccna v6.0.
Шалом (не проверено)
чт, 02/16/2023 - 23:47
Постоянная ссылка (Permalink)
совсем замучался с сокращением ip v6 адресов, там шла речь только о нулях. как сократить такой адрес на половину?
ad93:a0e4:a9ce:32fc:cba8:15fe:
Добавить комментарий