我有一个使用 ipv4 编写的小 udp 示例程序。如果我将代码更改为 ipv6,我是否仍然能够与使用具有 ipv4 地址的侦听器的任何人通信?我正在查看移植示例
http://ou800doc.caldera.com/en/SDK_netapi/sockC.PortIPv4appIPv6.html
我不确定简单地更改代码是否可以确保它工作,或者我是否必须以决斗堆栈模式编写它。
我有一个使用 ipv4 编写的小 udp 示例程序。如果我将代码更改为 ipv6,我是否仍然能够与使用具有 ipv4 地址的侦听器的任何人通信?我正在查看移植示例
http://ou800doc.caldera.com/en/SDK_netapi/sockC.PortIPv4appIPv6.html
我不确定简单地更改代码是否可以确保它工作,或者我是否必须以决斗堆栈模式编写它。
是也不是... IPv6 确实包含完全不同的寻址,因此您必须重新编码您的应用程序以使用替代标头和结构大小。
但是,IPv4 地址范围在 IPv6 中可用,语法是在标准地址前添加两个冒号(例如 ::10.11.12.13)。您还可以在 IPv6 数据包中嵌入 IPv4 地址。
并非没有网络中IPv4/IPv6 网关的帮助,即使如此,通信也会受到网络地址转换网关引入的典型问题的限制。对于面临此类决策的程序员,传统的建议是建议同时支持 IPv4 和 IPv6。
IPv4 和 IPv6 本质上是互不兼容的。
几个基本原因:
这些明显的结果是,如果您打开 IPv6 套接字,则无法使用 IPv4 套接字收听它。