Host Europe 分配了一个我刚刚从他们那里租用的虚拟机,其 IP 地址以全零 ( 2xxx:xxxx:xxxx:xxxx::/128
) 结尾。
我声称这可能是互操作问题,因为最后 64 位全零的地址通常是子网路由器的任播地址,我担心其他节点可能会特殊对待它。
他们的支持说:“从语法上讲,它只是一个子网任播地址,但您可以毫无问题地使用它,因为我们使用 /128 子网大小。” (我的翻译)
我只是半信半疑。有没有什么东西可以让节点专门处理这种类型的地址,或者我真的可以像常规地址一样使用它吗?
对于子网,全零的接口 ID将是子网任播。虽然理论上它被定义为 IPv6 全球单播的 64 位,但实际上,子网前缀长度定义了接口 ID 的长度 - 它通常是 64 位,因为这是减去 /64 前缀后剩下的,但是 / 128 地址没有子网,也没有接口 ID(这将是 0 位 IID)。
与 IPv4 全 1“子网广播”地址的情况类似,子网路由器任播(或 IPv6 中定义的任何其他类型的本地子网任播)只有在实际到达所述子网的路由器后才有意义。首先,只有子网路由器才能对其进行任何有用的处理;不在该子网中的主机或路由器不能执行任何其他操作,只能将其作为常规单播地址向前路由。因此,如果地址是“通过”您的主机静态路由的,那么只有您自己的计算机才是它的“子网路由器”,而其他节点实际上没有发言权。
(这似乎反映了 IPv4 有类寻址,其中传递的节点可能“知道”192.168.4.255 是特殊的,因为它是 C 类地址......但尽管有这些知识,它们仍然无法做任何事情否则,但无论如何都会像普通地址一样路由它。现在有类寻址早已不复存在,节点甚至无法知道它是否是特殊的,因为它们不知道最终子网使用的前缀长度是多少。)
可以在 IPv6 主机上设置单主机网络并进行路由。尽管子网路由器地址在这里毫无意义并且应该被禁用,但仍然存在以下问题:您是否可以获得正确的 /64,以及他们的地址规划是否已为此做好准备。
IPv6 的链路确定是一种协议,因此不需要像 v4 那样在同一子网中存在路由器 IP 地址。通过其他一些链接网络的流量工作正常,几乎可以肯定是默认网关的链接本地地址。
RFC 中记录了一个类似的长前缀问题,其争论是RFC 6164 中点对点上 /127的实践。人们认为这会破坏东西,但它确实有效。这些建议包括,如果要从 1 /64 中分配多个前缀,则不应使用全零接口 ID。“否则,节点可能会收到它们不打算接收的数据包。” 如果您是 /64 中唯一的客户,这一点就不那么重要了,但我不会解释他们的响应来保证这一点。
至少可以说,每个租用的虚拟机一个地址并不是很慷慨。有一些用例可以为您自己的容器或基于 IP 的虚拟主机分配 IP。但是,这需要将整个前缀路由到您的主机,而大多数提供商都没有这样做。如果他们还没有这样做,那么出于地址规划的原因,他们保留整个 /64 可能是个好主意,即使只有一个 IP 连接到您的来宾。有足够的地址空间来支持这一点。
拥有尽可能短的虚荣地址固然很好,但这并不是真正必要的。
2001:db8:c6ad:a661::1
文本形式仅比 稍长2001:db8:c6ad:a661::
。无论哪种方式,DNS 中的名称长度都是相同的。