我的任务是分配 IPV6 地址,将其拆分到多个不同城市、多个不同国家/地区的多个不同大陆的数据中心。部分说明是使用“2-6-6-2”解决方案来分配这些 IP(即使有更好的解决方案我也别无选择,只能这样做),这意味着我不会在半字节上分裂边界。我的问题是,如何将其显示为 IPV6 地址?我知道在半字节边界上分割给了我 0-F 来处理每个数字,但它如何在半字节边界上不分割?如何用一位数字表示 6 位?我在网上看过,我能找到的只是在半字节边界上分割的例子。
希望这是有道理的。
我的任务是分配 IPV6 地址,将其拆分到多个不同城市、多个不同国家/地区的多个不同大陆的数据中心。部分说明是使用“2-6-6-2”解决方案来分配这些 IP(即使有更好的解决方案我也别无选择,只能这样做),这意味着我不会在半字节上分裂边界。我的问题是,如何将其显示为 IPV6 地址?我知道在半字节边界上分割给了我 0-F 来处理每个数字,但它如何在半字节边界上不分割?如何用一位数字表示 6 位?我在网上看过,我能找到的只是在半字节边界上分割的例子。
希望这是有道理的。
您必须以二进制计算前缀长度才能有意义。对于 2-6-6-2 解决方案,我假设您在谈论 /48 和 /64 之间的 16 位,基本上是终端站点必须从中创建子网的位。
假设您有2001:db8:1234::/48您的终端站点。这为您提供了可以2001:db8:1234:0000::/64使用2001:db8:1234:ffff::/64的子网。每个十六进制字符代表 4 位,正如您所说,您收到的模式与十六进制字符不一致(基本上是自然的 4-4-4-4 拆分)。
所以,回到二进制。只看 /48 和 /64 之间的 16 位就可以得出:
0000 0000 0000 0000 = ..:0000::/64
1111 1111 1111 1111 = ..:ffff::/64
现在将它们组织成您描述的 2-6-6-2 拆分。让我们写出前两位的所有组合。当然,十六进制表示法仍然基于 4 位组。我会给你前两位的每个值的第一个和最后一个地址:
00 000000 000000 00 = 0000 0000 0000 0000 = ..:0000::/50
00 111111 111111 11 = 0011 1111 1111 1111 = ..:3fff::/50
01 000000 000000 00 = 0100 0000 0000 0000 = ..:4000::/50
01 111111 111111 11 = 0111 1111 1111 1111 = ..:7fff::/50
10 000000 000000 00 = 1000 0000 0000 0000 = ..:8000::/50
10 111111 111111 11 = 1011 1111 1111 1111 = ..:bfff::/50
11 000000 000000 00 = 1100 0000 0000 0000 = ..:c000::/50
11 111111 111111 11 = 1111 1111 1111 1111 = ..:ffff::/50
让我们采取第一个::0000:到:3fff:. 我将为您提供第二个字段(6 位)的一些示例:
00 000000 000000 00 = 0000 0000 0000 0000 = ..:0000::/56
00 000000 111111 11 = 0000 0000 1111 1111 = ..:00ff::/56
00 000001 000000 00 = 0000 0001 0000 0000 = ..:0100::/56
00 000001 111111 11 = 0000 0001 1111 1111 = ..:01ff::/56
00 000010 000000 00 = 0000 0010 0000 0000 = ..:0200::/56
00 000010 111111 11 = 0000 0010 1111 1111 = ..:02ff::/56
etc, let's take some in the middle:
00 010001 000000 00 = 0001 0001 0000 0000 = ..:1100::/56
00 010001 111111 11 = 0001 0001 1111 1111 = ..:11ff::/56
...
00 100001 000000 00 = 0010 0001 0000 0000 = ..:2100::/56
00 100001 111111 11 = 0010 0001 1111 1111 = ..:21ff::/56
etc, to the last ones:
00 111101 000000 00 = 0011 1101 0000 0000 = ..:3d00::/56
00 111101 111111 11 = 0011 1101 1111 1111 = ..:3dff::/56
00 111110 000000 00 = 0011 1101 0000 0000 = ..:3e00::/56
00 111110 111111 11 = 0011 1101 1111 1111 = ..:3eff::/56
00 111111 000000 00 = 0011 1101 0000 0000 = ..:3f00::/56
00 111111 111111 11 = 0011 1101 1111 1111 = ..:3fff::/56
您对地址中的其他位执行相同操作。与在半字节边界上划分相比,它需要更多的思考,但在二进制中,将边界放在哪里并不重要。只是十六进制的“人类”符号变得难以阅读/解释。
您不代表一位数字中的六位。每个数字是四位。您所做的是使用 CIDR 表示法。例如,有一些用于特殊功能的 IPv6 地址范围:
它都是二进制的,就像 IPv4 中的地址不映射到八位字节边界一样。