首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为IPv6编写的遗留应用程序中的IPv4地址

为IPv6编写的遗留应用程序中的IPv4地址
EN

Stack Overflow用户
提问于 2012-10-02 08:20:35
回答 2查看 795关注 0票数 2

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

  1. 我知道IPv4和IPv6本质上是不兼容的。IPv4客户端是否能够使用IPv6访问网站,IPv6客户端是否能够访问IPv4网站?
  2. 我查看Spring网站访问者的IP地址,如下所示: 私有字符串getIp(HttpServletRequest请求){返回request.getRemoteAddr();} 到目前为止,它一直以a.b.c.d格式返回IPv4地址。如果使用IPv6的客户端连接到我的网站,这种情况会改变吗?或者,根据我的网站设置,各种隧道技术会使IPv6客户端伪装成IPv4客户端吗?
  3. 当涉及到检索和处理IP地址时,我还可能面临其他IPv6问题吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-02 09:12:50

  1. 在它们之间不能没有翻译设备或代理服务器。仅IPv4 4和IPv4 6系统之间的直接通信是不可能的。有一些公共代理,如SixXS IPv4Gate和IPv6Gate,您可以在具有IPv4和IPv6的机器上运行您自己的代理,也可以使用DNS64 64/NAT64 64从IPv6 6专用网络连接到IPv4服务器。
  2. 是的,当客户端使用request.getRemoteAddr()连接到服务器时,IPv6将为您提供IPv6地址。例如,如果客户端使用NAT64,那么在您看来,它们就像一个IPv4客户机,因此您将看不到IPv6地址。它看起来就像一个巨大的IPv4 NAT盒子在你的一边。
  3. 是。想想这样的事情:
代码语言:javascript
复制
- storage of addresses
- clients having multiple IPv6 addresses
- one client using both IPv4 and IPv6
- etc

有一个白纸突出了作为软件开发人员您将遇到的最重要的问题。

票数 4
EN

Stack Overflow用户

发布于 2016-12-29 19:13:16

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

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

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

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

出现了各种过渡机制。包括:

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

它们中没有一个能解决所有的问题,有些问题是自己造成的,但它们可以组合使用,它们可以允许您运行一个仅使用V6的内部网络,只需要相对少数几个IPv4地址就可以与世界其他地区进行通信。

我检查我的Spring网站访问者的IP地址,比如this:....So远远的,这总是返回IPv4地址的格式a.b.c.d。如果使用IPv6的客户端连接到我的网站,这种情况会改变吗?或者,根据我的网站设置,各种隧道技术会使IPv6客户端伪装成IPv4客户端吗?

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

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

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

当涉及到检索和处理IP地址时,我还可能面临其他IPv6问题吗?

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

我强烈建议你建立一个测试网络,开始尝试这些东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12686759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档