Подтвердить что ты не робот

Когда подходит гибридная IP-нотация:: ffff: 192.168.1.4?

Иными словами, если адрес IPv4, зачем вообще выражать его как IPv6?

4b9b3361

Ответ 1

Его IPv4, выраженный через IPv6, так что приложение должно поддерживать только один стек IP.

Возможность ссылаться на адреса IPv4 через нотацию IPv6 означает, что я могу работать над тем, чтобы поддержка IPv6 была действительно надежной в моем приложении, и не нужно беспокоиться о дублировании усилий.

В настоящее время некоторые дистрибутивы по умолчанию отключают совместимость с IPv4 (например, Debian), а также Windows по умолчанию. Чтобы учесть это как программиста, вы должны привязать два сокета: один сокет IPv4 и один сокет IPv6 с флагом IPV6_V6ONLY (который заставляет его связывать только IPv6 без совместимости с IPv4, независимо от состояния /proc/sys/net/ipv6/bindv6only).

В комментариях ниже Майк связал меня с этим замечательным сайтом с информацией о том, как вы должны использовать sockaddr_storage для независимого от AF_ программирования (который имеет очень важно, решите ли вы перейти на AF_INET6 или решили использовать AF_INET и AF_INET6 бок о бок). Также мне нравится Beej Guide to Network Programming, где некоторая аналогичная информация. Рекомендуемое чтение. Спасибо, Майк!

Ответ 2

Если адрес IPv4, зачем вообще выражать его как IPv6?

Нападающие совместимость?

Ответ 3

Уместно использовать эту форму с адресами V4MAPPED.

Адреса V4MAPPED не должны отображаться в фактических заголовках IPv6, передаваемых в сети. Они должны использоваться только приложениями, использующими двухъядерные реализации IPv4/IPv6-хоста, где одна конечная точка транспорта может одновременно взаимодействовать как с IPv4, так и с IPv6.

Если вы открываете TCP-соединение с использованием семейства протоколов IPv6, не требуя, чтобы конечная точка была только IPv6 (которая может быть по умолчанию в вашей системе), и вы указываете адрес назначения в форме V4MAPPED, тогда операционная система будет подключаться через IPv4, и когда вы назовете моральный эквивалент getsockname в вашей системе, вы вернете адрес V4MAPPED.