Вопрос или проблема
Вот что сказано в RFC о локальных адресах IPv6:
| 10 |
| битов | 54 бит | 64 бит |
+----------+-------------------------+----------------------------+
|1111111010| 0 | идентификатор интерфейса |
+----------+-------------------------+----------------------------+
Таким образом, часть глобального префикса маршрутизации адреса фиксирована, поэтому первые 3 сегмента фиксированы как 1111 1110 10XX, что может варьироваться от
1111 1110 1000
– 0xFE8
до
1111 1110 1011
– 0xFEB
при этом 54-битная подсеть фиксирована на 0.
Так почему же Linux помечает fe91::1/64
и fe81::1/64
как локальные?
Вот как это выглядит в Linux:
inet6 fe91::1/64 scope link
valid_lft forever preferred_lft forever
inet6 fe81::1/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::1d76:2a9f:e6fd:325c/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::212:11ff:feab:cd00/64 scope link
valid_lft forever preferred_lft forever
Вся fe80::/10
, т.е. на основе первых 10 бит, классифицируется как “локальная” в соответствии с разделом 2.4 того же RFC.
2.4. Идентификация типа адреса
Тип IPv6 адреса определяется старшими битами
адреса следующим образом:
Тип адреса Бинарный префикс Нотация IPv6 Раздел
------------ ------------- ------------- -------
Неопределенный 00...0 (128 бит) ::/128 2.5.2
Циклический 00...1 (128 бит) ::1/128 2.5.3
Мультикаст 11111111 FF00::/8 2.7
Локальный уникаст 1111111010 FE80::/10 2.5.6
Глобальный уникаст (все остальные)
(Ранее редакции, такие как RFC 3513, также имели “Местный” fec0::/10
, в котором номер подсети не был фиксирован на 0.)
“Стандартные” локальные адреса имеют 0 в остатке, в результате чего на практике это фактически fe80::/64, но это не изменяет того факта, что весь /10 обозначен как локальный (и перечислен в специальном реестре адресов как выделенный для этой цели).
Ответ или решение
Путаница с локальными адресами IPv6
IPv6 значительно расширяет возможности адресации по сравнению с IPv4, предоставляя новые форматы и правила. Одним из таких форматов являются локальные адреса IPv6, которые могут вызывать путаницу. Давайте разберемся во всех ключевых аспектах.
Что представляют собой локальные адреса IPv6?
Согласно RFC 4291, локальные адреса IPv6 идентифицируются префиксом FE80::/10
. Это значит, что первые 10 бит этих адресов равны 1111111010
, и, следовательно, они находятся в диапазоне от FE80::
до FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
.
Структура локальных адресов
Структура адреса выглядит следующим образом:
- 10 бит — фиксированный префикс для локальных адресов (
1111111010
), - 54 бита — резервныйSubnet prefix (обычно равен
0
для стандартных локальных адресов), - 64 бита — идентификатор интерфейса, который создается с помощью MAC-адреса или иным образом.
Это приводит к пониманию, что большинство адресов с префиксом FE80::
помечаются как локальные. Однако в вашем вопросе мы видим адреса FE91::1/64
и FE81::1/64
, которые тоже отмечены как локальные.
Почему FE91::1/64
и FE81::1/64
являются локальными?
Согласно RFC, весь диапазон FE80::/10
относится к локальным адресам. Хотя стандартные локальные адреса имеют префикс FE80::/64
, использование других префиксов в диапазоне FE80::/10
также допускается для локальной адресации.
Таким образом, адреса FE81::1/64
и FE91::1/64
, как и остальные адреса в диапазоне FE80::
до FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
, считаются локальными. Это объясняет, почему операционная система Linux отображает их как адреса с scope link
(область действия: ссылка).
Заключение
Локальные адреса IPv6 имеют шире диапазон, чем просто FE80::/64
. Они классифицируются по префиксу FE80::/10
, что объясняет наличие адресов, таких как FE91::1/64
и FE81::1/64
, в вашем списке локальных адресов. Понимание структуры и классификации этих адресов поможет избежать путаницы и более эффективно управлять сетями на базе IPv6.
Если у вас остались дополнительные вопросы или необходимо углубленное объяснение по конкретным аспектам адресации IPv6, пожалуйста, дайте знать.