Когда подходит гибридная нотация IP :: ffff: 192.168.1.4? - PullRequest
30 голосов
/ 02 мая 2011

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

Ответы [ 3 ]

21 голосов
/ 03 мая 2011

Это 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's Guide по сетевому программированию, в котором также есть некоторая похожая информация .Рекомендуемое чтение.Спасибо, Майк!

9 голосов
/ 03 мая 2011

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

Прямая совместимость?

6 голосов
/ 03 мая 2011

Эту форму целесообразно использовать с адресами V4MAPPED.

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

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

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