什么时候混合IP符号:: ffff:192.168.1.4合适?

时间:2011-05-02 18:49:38

标签: ipv6

换句话说,如果地址是IPv4,为什么还要把它表达为IPv6呢?

3 个答案:

答案 0 :(得分:21)

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

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

目前,某些发行版默认禁用IPv4兼容性(例如Debian),Windows也会默认执行此操作。为了适应这个程序员,您应该绑定两个套接字:一个IPv4套接字和一个带有IPV6_V6ONLY标志的IPv6套接字(强制它仅绑定IPv6,不兼容IPv4,无论状态为{{1 }})。

在下面的评论中,Mike将我与this great site联系,提供了有关如何使用sockaddr_storage进行AF_独立编程的信息(无论您决定使用AF_INET6还是决定使用AF_INET和AF_INET6,这都具有很大的相关性旁边)。我也喜欢Beej的网络编程指南,它也有some similar information。推荐阅读。谢谢,迈克!

答案 1 :(得分:9)

  

如果地址是IPv4,为什么还要把它表达为IPv6呢?

转发兼容性?

答案 2 :(得分:6)

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

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

如果使用IPv6协议族打开TCP连接而不要求端点仅为IPv6 [可能是系统上的默认端口]并且您以V4MAPPED格式指定目标地址,则操作系统将连接IPv4,当您在系统上调用道德等同于getsockname时,您将获得一个V4MAPPED地址。