Иными словами, если адрес IPv4, зачем вообще выражать его как IPv6?
Когда подходит гибридная IP-нотация:: ffff: 192.168.1.4?
Ответ 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.