2

我对 IPv6 的引入对我作为开发人员和我的遗留应用程序意味着什么感到困惑。

  1. 我了解 IPv4 和 IPv6 本质上是不兼容的。IPv4 客户端能否访问使用 IPv6 的网站,IPv6 客户端能否访问 IPv4 网站?

  2. 我检查我的 Spring MVC 网站访问者的 IP 地址,如下所示:

    private String getIp(HttpServletRequest request) {
        return request.getRemoteAddr();
    }
    

    到目前为止,这始终以abcd格式返回 IPv4 地址。如果使用 IPv6 的客户端连接到我的网站,这种情况会改变吗?或者是否会发生各种隧道技术使 IPv6 客户端根据我的网站设置将自己伪装成 IPv4 客户端?

  3. 在检索和处理 IP 地址时,我可能会面临其他 IPv6 问题吗?

4

2 回答 2

4
  1. 它们之间没有翻译设备或代理服务器。纯 IPv4 和纯 IPv6 系统之间的直接通信是不可能的。有一些公共代理,例如SixXS IPv4Gate 和 IPv6Gate,您可以在具有 IPv4 和 IPv6 的机器上运行自己的代理,或者您可以使用DNS64/NAT64从纯 IPv6 网络连接到 IPv4 服务器

  2. 是的,request.getRemoteAddr()当客户端使用 IPv6 连接到您的服务器时,将为您提供 IPv6 地址。如果客户端使用例如 NAT64,那么它们对您来说就像 IPv4 客户端,因此您不会看到 IPv6 地址。它看起来就像你身边的一个大 IPv4 NAT 盒子。

  3. 是的。想想这样的事情:

    • 地址的存储
    • 具有多个 IPv6 地址的客户端
    • 一个同时使用 IPv4 和 IPv6 的客户端
    • ETC

有一份白皮书重点介绍了您作为软件开发人员将遇到的最重要的问题。

于 2012-10-02T09:12:50.460 回答
1

我了解 IPv4 和 IPv6 本质上是不兼容的。IPv4 客户端能否访问使用 IPv6 的网站,IPv6 客户端能否访问 IPv4 网站?

如果没有某种转换机制,只有 ipv4 的客户端将无法与只有 ipv6 的服务器通信,反之亦然。

最初的想法是整个世界将从“单栈ipv4”转向“双栈”。然后,一旦每个人都使用双栈,我们就可以开始关闭 IPv4 并转向“单栈 ipv6”。

然而这并没有发生,网络运营商几乎没有看到部署 IPv6 和 IANA 的压力,而且大多数 RIR 已经用完了 IPv4 地址。因此,我们最终处于这样一种情况:大量 IPv4 的时代已经结束,但仍然有许多仅 v4 的客户端和服务器。

各种过渡机制应运而生。包含:

  • 隧道机制,包括“自动隧道”(如 6to4 和 teredo)以及到固定端点的配置隧道。这些允许仅 v4 网络上支持 v6 的主机连接到仅 v6 服务。但是它们并没有太大帮助,因为您无法控制其他人网络上的机器是否启用了它们。
  • NAT64,无状态 (1:1) 和有状态 (1:many)。这允许管理员运行仅 v6 的网络,并且仍然与 Internet 上的仅 v4 机器进行交互。这对于客户端来说是一个合理的解决方案,但对于服务器来说,它并不能真正解决地址耗尽的问题,因为您仍然发现自己需要为每台服务器提供一个专用的 ipv4 地址。
  • 反向代理,这些可以查看应用程序级别的数据,因此如果更高级别的协议给出主机名的指示(例如带有主机标头的 HTTP,带有 SNI 的 TLS),那么代理可以侦听单个公共 IPv4 地址并直接请求到多个内部服务器。

它们都不能解决所有问题,其中一些会产生自己的问题,但结合使用它们可以让您运行一个仅使用 v6 的内部网络,只有相对少数的 IPv4 地址可以与世界其他地方通信。

我检查我的 Spring MVC 网站访问者的 IP 地址,如下所示:....到目前为止,这总是以 abcd 格式返回 IPv4 地址如果使用 IPv6 的客户端连接到我的网站,这会改变吗?或者是否会发生各种隧道技术使 IPv6 客户端根据我的网站设置将自己伪装成 IPv4 客户端?

如果您的服务器直接接受 ipv6 连接,它显然会看到一个 ipv6 地址。

如果您的服务器通过使用“::”上的套接字侦听 ipv4 和 ipv6 连接(Linux 默认启用此功能,Windows 需要特定的套接字选项来启用它),那么 ipv4 地址将使用套接字传递给应用程序为“ IPv4 映射地址”。您使用的库可能会或我不会向您隐藏这一点(我不熟悉 spring MVC 的功能)。

如果您接受来自 nat64 或代理的连接,您显然会看到 nat/proxy 的地址。在代理的情况下,可以根据代理发送的信息确定客户端的真实 IP 地址。

在检索和处理 IP 地址时,我可能会面临其他 IPv6 问题吗?

任何将 IPv4 地址存储/传输为 32 位整数或长度限制较短的字符串的地方都可能需要返工。


我强烈建议你自己建立一个测试网络并开始试验这些东西。

于 2016-12-29T19:13:16.280 回答