IPv6-индекс зоны и scope_id

Как индекс зоны соотносится с scope_id в структуре sockaddr_in6?

Кажется, что функциональность у разных платформ разная, и мне хотелось бы знать, как они связаны. Например, Windows имеет структуру SCOPE_ID (а также просто 32-битное значение). Mac OSX имеет только 32-битное значение. Очевидно, что 32-битное значение - это путь, но как именно он выложен? Это все еще 4 верхних бита "уровня"? Как сетевой порядок байтов влияет на это?

Также я предполагаю, что под окнами индекс зоны, указанный в IP-адресе (например, FF80::1%1), транслируется непосредственно в нижние 28 бит вышеупомянутой структуры. Как это работает в Mac OSX, которая использует имена, а не цифры (например, FF80::1%en0). Я кодирую это как четыре CC? В равной степени я напоминаю, что в linux используются 4 символа, которые не могут вписаться в 28 бит.

Так может кто-нибудь объяснить мне этот беспорядок? Мне действительно нужно написать учебник по всему этому, когда я закончу, потому что в сети очень мало информации о ipv6.

Редактировать: находится ли scope_id в сетевом порядке байтов? Я просто смотрю на scope_id, возвращенный из recvfrom, и он, кажется, имеет порядок с прямым порядком байтов... что не может быть правильным, не так ли?

1 ответ

Решение

Индекс зоны и области действия одинаковы и часто взаимозаменяемы, однако сами термины разные.

Область используется как в "глобальной области", "локальной области", "универсальной области" и относится к тому, насколько уникальным является конкретный адрес IPv6. Каждый интерфейс имеет локальную область действия, которая уникальна для непосредственного сегмента локальной сети, что, например, полезно для автоматической настройки и обнаружения локальных устройств, например принтера, который вы только что подключили к сети. IPv6-адрес глобальной области может предоставляться сервером DHCP.

Зона предназначена для указания конкретного эффективного интерфейса в локальной области.

Индекс области действия отличается от индекса интерфейса тем, что для указания интерфейса я использую структуру следующим образом:

struct interface_req_t {
        uint32_t                                ir_interface;
        uint32_t                                ir_scope_id;
};

Каждая платформа уникальна в том, как она интерпретирует значение, поскольку Windows имеет несколько повторных интерпретаций перечисления интерфейса в зависимости от домена. Недостатком реализации Windows является то, что индекс может меняться при использовании адаптеров горячей замены. В Unix вы склонны видеть имена интерфейсов %qe0, %eth0и т. д., которые могут быть преобразованы в цифровую форму при необходимости, например if_nametoindex(), Windows Vista добавляет совместимый API.

Только локальная область видимости определяется по префиксу адреса fe80::/10.

Windows SCOPE_ID показывает избыточный дизайн, который также существует в многоадресной рассылке IPv4, то есть разделяет домены администрирования адресов. Это все необязательно и часто игнорируется.

Другие вопросы по тегам