为什么是2002 ::一个无效的IPv6地址?

我目前正在学习IPv6,在testing过程中,我尝试使用全球IPv6地址2002::configuration一个接口,并且失败,说明这是一个不正确的地址。 而且我注意到,如果我尝试使用一个以2002开头的IPv6地址来configuration一个接口,它必须高于2002:0099::否则它就是无效的。

所以, 2000::是有效的, 2001::是有效的, 2002:100::有效,但在2002::2002:99::之间没有任何内容。 这是为什么?

https://www.google.de/?q=ipv6+address+2002 ::

或检查IPv6全球单播地址分配以查看2002:0000 :: / 16是6to4地址范围。

2002::/16前缀用于6to4,它要求接下来的32位(在16位前缀之后)是全球单播IPv4地址。

你说它必须高于2002:0099::这可能是因为你还没有完全理解IPv6地址表示法的hex部分。

2002:0099::将对应于IPv4地址0.153.0.0 ,但是0.255.255.255也不是全球单播地址。 所以2002:00ff::也不行。

在6to4网关后面的局域网上的主机不需要知道6to4。 他们可以将分配给它们的6to4地址视为其他全球单播IPv6地址。 因此,不要求拒绝2002:0099::作为无效地址,但是因为它永远不可能是有效的地址,所以操作系统拒绝它是有意义的。

使用随机的6to4地址进行testing是绝对不推荐的做法。 如果您想尝试IPv6,还有其他方法可以获取地址来进行实验:

  • 通过将您的ISP分配给您的IP附加到6to4前缀来构build一个真正的6to4前缀。 如果您的ISP为您分配了203.0.113.1 ,则需要将四个八位字节中的每一个转换为hex值cb 00 71 01并且您的IPv6前缀将为2002:cb00:7101::/48
  • 通过隧道提供商获取隧道。
  • 从ISP获取本机IPv6。
  • 使用RFC 4193地址。 第一个八位组必须是fd ,接下来的五个八位组必须是随机的。 你的前缀可以是fd2a:4b89:4d7d::/48 。 这些只能在本地使用,所以如果您configuration了这样一个地址,并且没有其他IPv6地址,则软件会尝试使用此本地IPv6地址进行外部通信,而不是使用IPv4。

以上选项不是唯一的。 configuration一种(或多种)各种地址是完全有效的。 对于testing和开发,分配多个地址以testing有趣的angular落案例可能是一个好主意。 对于生产环境,您应该意识到许多系统在决定使用哪个网关时不考虑源地址,如果在路由器configuration为丢弃具有意外的源IP的数据包的设置中使用多个地址,则可能导致破坏。