Введение
Данная статья является переводом конкретного раздела, описывающего базовые операции над IPv6-адресами из учебника CCNA 200-301 Volume 1 от автора Wendell Odom.
Сокращение IPv6 адресов
Базовые правила:
Два двоеточия подряд - это 2 или более гекстета адреса с нулями.
Их "::" можно использовать всего один раз на весь IPv6-адрес.
Можно так3124::DEAD:CAFE:0:0:0
или так3124:0:0:DEAD:CAFE::
, но нельзя вот так 3124::DEAD:CAFE::Например: 210F::CCCC:0:0:D - считаем, у нас 210F - первый гекстет, далее двойное двоеточие, далее идут CCCC:0:0:D - это еще 4 гекстета, итого 5 гекстетов. Так всего в IPv6-адресе 8 гекстетов, то 8-5=3 гекстета недостающих, заполняем их нулями и получаем 210F:0000:0000:0000:CCCC:0000:0000:000D
Если перед буквами (hex) или цифрами, кроме нуля в гекстете идут нули, то их можно отсекать.
Если нули идут после букв (hex) или цифр - их оставляем , иначе после обратного процесса мы получим другой адрес.
Например:ABCD:0020
- в сокращенном виде выглядит какABCD:20
, аABCD:2000
- не сокращается.
Разберем несколько примеров:
Дано | С сокращением |
2340:0000:0010:0100:1000:ABCD:0101:1010 | 2340:0:10:100:1000:ABCD:101:1010 |
30A0:ABCD:EF12:3456:0ABC:B0B0:9999:9009 | 30A0:ABCD:EF12:3456:ABC:B0B0:9999:9009 |
2222:3333:4444:5555:0000:0000:6060:0707 | 2222:3333:4444:5555:0:0:6060:707 |
3210:0000:0000:0000:0000:0000:0000:0000 | 3210:: |
210F:0000:0000:0000:CCCC:0000:0000:000D | 210F::CCCC:0:0:D |
34BA:000B:000B:0000:0000:0000:0000:0020 | 34BA:B:B::20 |
FE80:0000:0000:0000:DEAD:BEFF:FEEF:CAFE | FE80::DEAD:BEFF:FEED:CAFE |
FE80:0000:0000:0000:FACE:BAFF:FEBE:CAFE | FE80::FACE:BAFF:FEBE:CAFE |
Нахождение части подсетей IPv6-адреса
Допустим, на ПК клиента установлен такой адрес: 2000:1234:5678:9ABC:1234:5678:9ABC:1111/64. Так как максимальный префикс для IPv6 =128, то 64 - есть половина - то есть 4 гекстета из 8, таким образом, 2000:1234:5678:9ABC - часть подсети, а 1234:5678:9ABC:1111 - часть хостов.
Для написания номера подсети приводим часть хостов к нулю и получаем такое: 2000:1234:5678:9ABC:0000:0000:0000:0000/64, а в сокращенном виде: 2000:1234:5678:9ABC::/64
Разберем несколько примеров:
Дано | Подсеть | С сокращением |
2340:0:10:100:1000:ABCD:101:1010/64 | 2340:0:10:100:0000:0000:0000:0000/64 | 2340:0:10:100::/64 |
30A0:ABCD:EF12:3456:ABC:B0B0:9999:9009/64 | 30A0:ABCD:EF12:3456:0000:0000:0000:0000/64 | 30A0:ABCD:EF12:3456::/64 |
2222:3333:4444:5555::6060:707/64 | 2222:3333:4444:5555:0000:0000:0000:0000/64 | 2222:3333:4444:5555::/64 |
3210::ABCD:101:1010/64 | 3210:0000:0000:0000:0000/64 | 3210:0:0:0:0/64 |
А теперь разберем несколько более сложных примеров:
Дано: 2000:1234:5678:9ABC:1234:5678:9ABC:1111/56
Каждый гекстет есть 16 бит, так как всего 8 гекстетов и 128 бит, таким образом 16*8 = 128, значит половина гекстета = 8 бит.
В данном случае, нам нужно отсчитать 3 целых гекстет и половину 4-го, получаем 3*16+8=56 бит.
Итого получаем такую часть подсети: 2000:1234:5678:9A00:0000:0000:0000:0000/56
или в сокращенном виде: 2000:1234:5678:9A00::/56
Тут можно легко допустить ошибку, посчитав, что, так как у нас префикс=56 бит, то после 9A мы должны были отсечь 2 символа, но это не так. Они остаются: 9A00, потому что, если отсечь два нуля в конце в дальнейшем может превратится в 009А, что является уже другим адресом.
Разберем несколько примеров с различными префиксами:
Дано | С сокращением |
34BA:B:B:0:5555:0:6060:707/80 | 34BA:B:B:0:5555::/80 |
3124::DEAD:CAFE:FF:FE00:1/80 | 3124:0:0:DEAD:CAFE::/80 |
2BCD::FACE:BEFF:FEBE:CAFE/48 | 2BCD:0000:0000::/48 |
3FED:F:E0:D00:FACE:BAFF:FE00:0/48 | 3FED:F:E0::/48 |
210F:A:B:C:CCCC:B0B0:9999:9009/40 | 210F:A:0::/40 |
34BA:B:B:0:5555:0:6060:707/36 | 34BA:B:0::/36 |
3124::DEAD:CAFE:FF:FE00:1/60 | 3124:0:0:DEA0::/60 |
2BCD::FACE:1:BEFF:FEBE:CAFE/56 | 2BCD:0000:0000:FA00::/56 |
Учимся понимать как работает механизм по автоматической выдаче IPv6-адресов на основе MAC-адресов хостов
Дано: 2001:DB8:1:1::/64
MAC: B8:0C:BE:EF:CA:FE, в дальнейшем буду разделять точкой на 3 октета: B80C.BEEF.CAFE
Первым делом необходимо разделить MAC-адрес пополам
и добавить посередине значение: FFFE, по итогу получаем такую запись: B80C:BEFF:FEEF:CAFE
Далее, берем первые 2 символа получившейся записи - это B8, очевидно, что это в шестнадцатеричном (HEX) формате.
Необходимо перевести B8 в двоичный вид, получаем: 1011 1000, но это еще не все. Из двоичной записи берем 7-й бит и инвертируем его (1 в 0 или 0 в 1) и получаем такую запись: 1011 1010, а теперь обратно переводим в HEX-формат, получаем BA (B=1011, A=1010). Наконец-то подставляем вместо B8 наш результат BA и получаем: BA0C:BEFF:FEEF:CAFE, а эту запись добавляем в конец адреса из Дано и получаем результат: 2001:DB8:1:1:BA0C:BEFF:FEEF:CAFE
Разберем несколько примеров:
Префикс | MAC-адрес | Результат | Мои расчеты |
2001:DB8:1:1::/64 | 0013.ABAB.1001 | 2001:DB8:1:1:0213:ABFF:FEAB:1001 |
|
2001:DB8:1:1::/64 | AA13.ABAB.1001 | 2001:DB8:1:1:A813:ABFF:FEAB:1001 | AA=1010 1010=1010 1000, 1010=A, 1000=8 |
2001:DB8:1:1::/64 | 000С.BEEF.CAFE | 2001:DB8:1:1:020C:BEFF:FEEF:CAFE |
|
2001:DB8:1:1::/64 | B80C.BEEF.CAFE | 2001:DB8:1:1:BA0C:BEFF:FEEF:CAFE | B8=1011 1000=1011 1010, BA |
2001:DB8:FE:FE::/64 | 0C0C.ABAC.CABA | 2001:DB8:FE:FE:0E0C:ABFF:FEAC:CABA | 0C=0000 1100=0000 1110, 0E |
2001:DB8:FE:FE::/64 | 0A0C.ABAC.CABA | 2001:DB8:FE:FE:080C:ABFF:FEAC:CABA | 0A=0000 1010=0000 1000, 08 |
Akina
Что-то регулярно встречаются недосокращённые адреса… 3210:0:0:0:0/64, 2BCD:0000:0000::/48, 210F:A:0::/40 и т.п.
endlessnights Автор
Это чтобы наглядно показать, где заканчивается часть подсети, рассчитанная на битности префикса.