![以全零结尾的 IP:有效(对于 /128)还是可能与任播混淆?](https://linux22.com/image/789465/%E4%BB%A5%E5%85%A8%E9%9B%B6%E7%BB%93%E5%B0%BE%E7%9A%84%20IP%EF%BC%9A%E6%9C%89%E6%95%88%EF%BC%88%E5%AF%B9%E4%BA%8E%20%2F128%EF%BC%89%E8%BF%98%E6%98%AF%E5%8F%AF%E8%83%BD%E4%B8%8E%E4%BB%BB%E6%92%AD%E6%B7%B7%E6%B7%86%EF%BC%9F.png)
Host Europe 为我刚从他们那里租用的一台虚拟机分配了一个以全零结尾的 IP 地址(2xxx:xxxx:xxxx:xxxx::/128
)。
我认为这可能是互操作问题,因为最后 64 位全零的地址通常是子网路由器的任播地址,我担心其他节点可能会对其进行特殊处理。
他们的支持人员说:“从语法上讲,它只是一个子网任播地址,但你可以毫无问题地使用它,因为我们使用 /128 子网大小。”(我的翻译)
我只是半信半疑。有什么可以让节点专门处理这种地址吗?或者我真的可以像普通地址一样使用它吗?
答案1
我认为这可能是互操作问题,因为最后 64 位全为零的地址通常是子网路由器的任播地址,
对于子网,接口 ID全零的地址将是子网任播。尽管理论上 IPv6 全球单播的子网前缀长度被定义为 64 位,但实际上子网前缀长度定义了接口 ID 的长度 - 它通常是 64 位,因为这是减去 /64 前缀后剩下的长度,但 /128 地址没有子网,也没有接口 ID(它将是 0 位 IID)。
我担心其他节点可能会对其进行特殊处理。
与 IPv4 全 1“子网广播”地址的情况类似,子网路由器任播(或 IPv6 中定义的任何其他类型的本地子网任播)只有在实际到达所述子网的路由器时才有意义。只有子网路由器才是有能力的首先对其进行任何有用的处理;不在该子网中的主机或路由器除了将其作为常规单播地址路由外,无法执行任何其他操作。因此,如果地址是通过您的主机静态路由的,那么只有您自己的机器才是它的“子网路由器”,而其他节点实际上没有发言权。
(这似乎反映了 IPv4 分类寻址,其中传递节点可能“知道” 192.168.4.255 是特殊的,因为它是 C 类地址……但尽管知道这一点,他们仍然无法做任何其他事情,只能像普通地址一样路由它。现在分类寻址早已不复存在,节点甚至无法知道它是否再特殊,因为他们不知道最终子网使用的前缀长度。)
答案2
可以在 IPv6 主机上设置一个主机网络并进行路由。即使子网路由器地址在这里毫无意义,应该被禁用,但仍然存在一些问题,例如您是否可以获得合适的 /64,以及他们的地址规划是否已为此做好准备。
链路确定上的 IPv6是协议问题,因此不需要像 v4 那样在同一子网中设置路由器 IP 地址。通过其他在线网络的流量运行良好,几乎可以肯定是默认网关的链接本地地址。
一个类似的长前缀事物,其争论记录在 RFC 中,是RFC 6164 中点对点上的 /127。人们认为这会破坏一切,但它可以发挥作用。这些建议包括,如果要从一个 /64 中分配多个前缀,则不应使用全零接口 ID。“否则,节点可能会收到它们不打算接收的数据包。”如果您是 /64 中唯一的客户,这一点就不那么重要了,但我不认为他们的回应可以保证这一点。
至少可以说,每个租用的虚拟机一个地址并不慷慨。有些用例需要为您自己的容器或基于 IP 的虚拟主机分配 IP。但是,这需要将整个前缀路由到您的主机,而大多数提供商都没有这样做。如果他们还没有这样做,那么出于地址规划的原因,最好让他们保留整个 /64,即使只有一个 IP 连接到您的客户机。有足够的地址空间来支持这一点。
拥有尽可能短的虚荣地址是件好事,但这并不是必需的。2001:db8:c6ad:a661::1
文本形式的 仅比 稍长2001:db8:c6ad:a661::
。而且 DNS 中的名称长度无论如何都是相同的。