Недавно я работал с API сокетов Беркли для IPv6 и заметил, что адреса IPv6 (sockaddr_in6
) имеют поле с именем sin6_scope_id
, которое не было частью адресов IPv4.
Немного поискав, я узнал, что scope_id
предназначен для идентификации сетевого интерфейса, потому что несколько сетевых интерфейсов могут иметь один и тот же локальный IPv6-адрес. Это имело смысл, но тогда я не понимал, как IPv4 решает эту проблему, если там нет эквивалента идентификатора области действия?
Есть ли в ядре механизм, который не позволяет нескольким интерфейсам IPv4 назначать один и тот же локальный адрес канала?
Если это так, то зачем было изобретать идентификатор области действия для IPv6 вместо того, чтобы использовать то же решение, что и IPv4?
Кроме того, используется ли scope_id только для различения интерфейсов с идентичными локальными адресами ссылки, или есть и другие варианты использования?