为什么 IPv6 地址不像 IPv4 那样以点分十进制表示

为什么 IPv6 地址不像 IPv4 那样以点分十进制表示

也许这不是一个适合回答这个问题的地方,但我没有找到更好的地方。

IPv6 地址的文本表示形式定义在RFC 2373指出地址应表示为相应片段的 8 个十六进制 16 位值,例如2001:0db8:5f62:ab41:0000:0000:0000:0801或(缩写形式)2001:db8:5f62:ab41::801

那么,为什么不使用“老式的”点分十进制表示法(RFC 2373 没有说明原因),因为 16 位部分没有使用这种表示法(因此,它的等效表示法是8193.3512.24418.43841.0.0.0.2049)?

这仍然可以很容易地与 IPv4 地址区分开来(只是因为使用了不同数量的单词和点),并且在指定端口时不需要特殊的语法(例如括号)(例如,[2001:db8:5f62:ab41::801]:8080看起来有点尴尬,因为它使用冒号来表示不同的目的(将 IP 地址中的单词和地址本身与端口号分隔开,所以我们需要括号),并且混合了十进制(用于端口)和十六进制表示法)。

答案1

对于大多数人来说,32 位 16 进制数比 8 位 65,536 进制数更容易理解。十六进制数相对紧凑,是 2 的幂,并且已在其他环境中使用,例如 UUID、哈希函数和内存地址。

当保持在 4 位边界 = 一个十六进制数字时,位掩码 CIDR 表示法很容易。

  • 2001:db8:1234::/48
  • 2001:db8:1234:5600::/56
  • 2001:db8:1234:5678::/64

此外,冒号分隔的十六进制数使得可以明确使用 IPv4 映射地址。其中 v4 位是未修改的点分十进制数。例如:::FFFF:129.144.52.38。有关这些内容的更多信息,请参阅 RFC 4038。

当然,括号包装看起来有点丑陋。通过名称解析可以解决这个问题;您在浏览器中输入的任何内容都应该在 DNS 中。

也可以看看:为什么IPv6要用十六进制表示?

相关内容