Идентификатор области IPv6 против IPv4

Недавно я работал с API сокетов Беркли для IPv6 и заметил, что адреса IPv6 (sockaddr_in6) имеют поле с именем sin6_scope_id, которое не было частью адресов IPv4.

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

Есть ли в ядре механизм, который не позволяет нескольким интерфейсам IPv4 назначать один и тот же локальный адрес канала?

Если это так, то зачем было изобретать идентификатор области действия для IPv6 вместо того, чтобы использовать то же решение, что и IPv4?

Кроме того, используется ли scope_id только для различения интерфейсов с идентичными локальными адресами ссылки, или есть и другие варианты использования?


person Tamás Zahola    schedule 18.01.2018    source источник
comment
На самом деле все несколько интерфейсов имеют одну и ту же локальную сеть IPv6 network. Адрес назначения - это то, что определяет, какой интерфейс используется, и если местом назначения является локальный адрес канала, хост не может определить, какой интерфейс использовать, потому что все они имеют одну и ту же сеть. Несколько интерфейсов с одной и той же сетью могут стать проблемой для IPv4.   -  person Ron Maupin    schedule 18.01.2018
comment
Хотя IPv4 имеет связанные локальные адреса, они используются редко, и их присутствие обычно указывает на серьезную проблему. В IPv6 каждый интерфейс всегда имеет локальный адрес ссылки, и они часто используются.   -  person Michael Hampton    schedule 19.01.2018


Ответы (1)


Короче говоря, нет, не существует четко определенного механизма для обработки локальных адресов IPv4 на узлах с несколькими интерфейсами. Ничто не мешает выбрать один и тот же локальный адрес для двух разных интерфейсов (однако, если два интерфейса находятся на одном и том же сетевом канале, обнаружение конфликтов на основе ARP приведет к переназначению по крайней мере одного из них).

RFC 3927 раздел 3.2 охватывает вопросы «неоднозначности адреса»:

Учитывая, что в стеке IP должен быть исходящий интерфейс, связанный с пакетом, который необходимо отправить на локальный адрес назначения, должен произойти выбор интерфейса. Исходящий интерфейс не может быть получен из параметров заголовка пакета, таких как адрес источника или назначения (например, с помощью поиска в таблице пересылки). Следовательно, ассоциация исходящего интерфейса должна выполняться явно другими способами. Эти средства в спецификации не указаны.

А также в разделе 6.3:

Прикладное программное обеспечение, работающее на многосетевом хосте, который поддерживает конфигурацию адреса IPv4 Link-Local более чем на одном интерфейсе, может дать сбой.

Это связано с тем, что прикладное программное обеспечение предполагает, что адрес IPv4 однозначен, что он может относиться только к одному хосту. Адреса IPv4 Link-Local уникальны только для одной ссылки. Хост, подключенный к нескольким ссылкам, может легко столкнуться с ситуацией, когда один и тот же адрес присутствует на более чем одном интерфейсе или сначала на одном интерфейсе, а затем на другом; в любом случае связаны с более чем одним хостом. Большинство существующего программного обеспечения не подготовлено к этой двусмысленности. В будущем для предотвращения этой проблемы могут быть разработаны интерфейсы прикладного программирования.

Эта проблема была решена в IPv6 путем введения идентификатора области.

В настоящее время идентификатор области используется только для локальной адресации.

person dcoles    schedule 29.07.2019