为什么 Java 将某些 IPv6 地址解释为 IPv4?

苹果威尔

为什么某些 IPv6 地址在使用时会转换为 IPv4 地址InetAddress.getByName

例如,我希望这两个地址::f:f:f::ffff:f:f转换为Inet6Address

然而,这个::ffff:f:f变成Inet4Address

import java.net.InetAddress;
class Main {
  public static void main(String[] args) throws Exception {
    // Interpreted as IPv6
    var address = InetAddress.getByName("::f:f:f");
    System.out.println(address); // /0:0:0:0:0:f:f:f
    System.out.println(address.getClass()); // class java.net.Inet6Address
    
    // Interpreted as IPv4
    address = InetAddress.getByName("::ffff:f:f");
    System.out.println(address); // /103.30.217.152
    System.out.println(address.getClass()); // class java.net.Inet4Address
  }
}
罗恩·莫平

::ffff:0:0/96范围内的IPv6 地址是 IPv4 映射的 IPv6 地址。这是在 IPv6 寻址格式中表示 IPv4 地址的特殊范围,因此它们实际上是 IPv4 地址,而不是 IPv6 地址。这在RFC 4291, IP Version 6 Addressing Architecture 中有解释

2.5.5.2 . IPv4 映射的 IPv6 地址

定义了包含嵌入式 IPv4 地址的第二种 IPv6 地址。该地址类型用于将 IPv4 节点的地址表示为 IPv6 地址。“IPv4-mapped IPv6 address”的格式如下:

   |                80 bits               | 16 |      32 bits        |
   +--------------------------------------+--------------------------+
   |0000..............................0000|FFFF|    IPv4 address     |
   +--------------------------------------+----+---------------------+

有关“IPv4 映射的 IPv6 地址”的使用背景,请参阅 [ RFC4038 ]。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么.NET不使用嵌入的IPv4值解析某些IPv6?

为什么接口同时显示ipv6地址和ipv4

我同时拥有IPv4和IPv6公共地址。为什么?

如果将网络仅设置为IPv6,为什么某些DNS地址无法解析?

将ipv4和ipv6地址转换为整数

如何将地址从IPv4转换为IPv6

如何使用AFNetworking将ipv4地址转换为ipv6?

为什么我在 Android 上看到两个不同的 IPv4 地址但 IPv6 地址相同?

将git配置为默认使用IPv4而不是IPv6

为什么我同时拥有一个IPv4和IPv6地址?

以下ipv6地址在ipv4中转换为什么:http:// [0 :: 1]:5001 /

从IPv4获取IPv6地址?

如何将IPV4地址与IPV6和IPV4一起放入powershell变量中?

如何将IPV6地址转换为IPV4地址?

如何手动将IPv4地址转换为IPv6地址?

如何将IPv4和IPv6源地址都绑定到Python套接字?

通过dhcp为带有debian的ipv4和ipv6自动配置接口的正确方法是什么?

在pf中,为什么可以将IPv6指定为“协议”以及地址族?

为什么接口具有禁用了IPv6的IPv6地址?

为什么是Get-DnsClientServerAddress | 选择AddressFamily输出而不是IPv4和IPv6

为什么lsof指示我的IPv4套接字是IPv6?

为什么IPv6不像IPv4那样大量使用环回?

为什么Windows 10比IPv6更喜欢IPv4?

为什么IPV4以10为基数表示

在Java中获取eth0接口的IP地址仅返回IPv6地址而不返回IPv4

Java正则表达式,用于接受有效的主机名,IPv4或IPv6地址

如何将Ubuntu Server设置为具有IPv4和IPv6的无线+以太网路由器

将IPv6环回地址解析为Uri

IPv4 / IPv6网络计算和Java验证?