Ipv6 混合IP表示法::ffff:192.168.1.4何时合适?

Ipv6 混合IP表示法::ffff:192.168.1.4何时合适?,ipv6,Ipv6,换句话说,如果地址是IPv4,为什么还要麻烦地将其表示为IPv6呢 如果地址是IPv4,为什么还要麻烦地将其表示为IPv6呢 转发兼容性?它是通过IPv6表示的IPv4,因此应用程序只需要支持一个IP堆栈 能够通过IPv6表示法引用IPv4地址意味着我可以在我的应用程序中获得真正可靠的IPv6支持,而不必担心重复工作 现在一些发行版默认禁用IPv4兼容性(例如Debian),Windows也默认禁用IPv4兼容性。为了适应这种情况,作为程序员,您应该绑定两个套接字:一个IPv4套接字和一个带有I

换句话说,如果地址是IPv4,为什么还要麻烦地将其表示为IPv6呢

如果地址是IPv4,为什么还要麻烦地将其表示为IPv6呢


转发兼容性?

它是通过IPv6表示的IPv4,因此应用程序只需要支持一个IP堆栈

能够通过IPv6表示法引用IPv4地址意味着我可以在我的应用程序中获得真正可靠的IPv6支持,而不必担心重复工作

现在一些发行版默认禁用IPv4兼容性(例如Debian),Windows也默认禁用IPv4兼容性。为了适应这种情况,作为程序员,您应该绑定两个套接字:一个IPv4套接字和一个带有
IPv6\u V6ONLY
标志的IPv6套接字(这将强制它绑定IPv6–仅与IPv4不兼容,无论
/proc/sys/net/IPv6/bindv6only
的状态如何)


在下面的评论中,Mike向我提供了有关如何使用sockaddr_存储进行AF_独立编程的信息(无论您是决定使用AF_INET 6,还是决定同时使用AF_INET和AF_INET 6,这都非常相关)。我还喜欢Beej的《网络编程指南》,这本书也很有趣。推荐阅读。谢谢你,迈克

将该表单与V4MAPPED地址一起使用是合适的

V4MAPPED地址不应出现在网络中传输的实际IPv6报头中。它们只应该由使用双栈IPv4/IPv6主机实现的应用程序使用,其中单个传输端点可以同时使用IPv4和IPv6进行通信


如果使用IPv6协议系列打开TCP连接,而不要求端点仅为IPv6[这可能是系统上的默认设置],并且以V4MAPPED形式指定目标地址,则操作系统将通过IPv4进行连接,并且当您在系统上调用道德等价物
getsockname
时,你会得到一个地址。

我同意。我要说的是强制实现IPv6兼容性。+1,还值得一提的是sockaddr_存储结构。阅读更多。有关他们不应该出现在网络上的原因的更多信息: