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

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

2 голосов
/ 28 июня 2010

Как индекс зоны соотносится с 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 Ответ

1 голос
/ 06 июля 2010

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

Область действия используется как в «глобальной области действия», «локальной области действия», «универсальной области действия» и относится кнасколько уникальным является конкретный 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, т.е.Администрирование доменов адресов.Это все необязательно и часто игнорируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...