【发布时间】:2015-04-28 18:10:50
【问题描述】:
我尝试将目标地址转换为 IPv6 格式为::ffff:IPv4。并使用AF_INET6 类型的套接字。它给了error: Network Unreachable。但是使用相同的技术,我可以从 IPV4 通信到 IPV6
提前感谢您的帮助。
【问题讨论】:
标签: sockets networking ipv6 ipv4
我尝试将目标地址转换为 IPv6 格式为::ffff:IPv4。并使用AF_INET6 类型的套接字。它给了error: Network Unreachable。但是使用相同的技术,我可以从 IPV4 通信到 IPV6
提前感谢您的帮助。
【问题讨论】:
标签: sockets networking ipv6 ipv4
IPv4 和 IPv6 是不同的协议。他们不互相交谈。
在某些操作系统上,您可以使用 IPv6 套接字并接受传入的 IPv4 连接。但这只是让服务器代码的代码开发更容易的软件。我从来没有见过客户端代码的工作。您必须为此创建正确的套接字类型。
通常您使用 DNS 解析主机名,您会得到多个答案(IPv4 和 IPv6),您遍历它们创建所需的套接字类型并尝试连接。如果可行,则使用该套接字,否则,请进行下一次迭代以创建新套接字等。
如果您的代码对延迟很敏感,您可能需要实现happy eyeballs 算法。
【讨论】:
::ffff:192.0.2.1 样式地址的 IPv6 套接字,但这只是软件伪装。它仍然是网络上的 IPv4 连接。
在大多数系统上,PF_INET6 套接字能够通过使用::FFFF:0:0/96 范围内的地址与 IPv4 地址进行通信。但是,这仅在套接字库级别完成:实际的在线数据是纯 IPv4 数据包(就像您使用了 PF_INET 套接字一样),网络中没有协议转换。
您收到的错误表明您没有到请求目的地的 IPv4 路由。这可能表明您的主机没有 IPv4 默认路由。没有解决方案 - 如果没有 IPv4 连接,您将无法访问 IPv4 地址。
【讨论】: