例如,我从POST ip和mask接收:
$ip = 2001:db8::1428:55ab;
$mask = 48;
我希望划分这个子网,我选择例如掩码和我想要多少个子网,例如$ mask = 50,subnets = 2
我的结果是(表中的树),如下所示:
ip mask status
2001:db8::1428:55ab 48 divided
- 2001:db8::?????? 50 free
- 2001:db8::?????? 50 free
我该怎么做?需要帮助!
答案 0 :(得分:1)
$mask
实际上是前缀长度。它是“固定”的位数。因此/48
前缀长度意味着前48位是固定的,最后(128 - 48 =)80位可用。
在IPv6中,LAN总是获得/64
。这意味着使用/48
得到(64 - 48 = 16位.2 16 =)65536个子网。
IPv6地址和前缀以十六进制表示。每个十六进制字符为4位。在IPv6中,:
之间的每组数字都是16位。可以省略每组中的前导零。因此2001:0db8:0000:0000:0000:0000:0000:0001
与2001:db8:0:0:0:0:0:1
相同。组合::
意味着该点仅为零。因此,该地址也可以写为2001:db8::1
。
您提供的信息有点令人困惑。您指定2001:db8::1428:55ab/48
。问题是您指定IPv6地址的最后32位(1428:55ab
),而桅杆指定这些位不固定。因此,我将以2001:db8:1a2b::/48
为例。
前缀长度的每次增加都会将前一个前缀分成两部分。
2001:db8:1a2b::/48
可以拆分为:
2001:db8:1a2b::/49
2001:db8:1a2b:8000::/49
2001:db8:1a2b::/49
可以拆分为:
2001:db8:1a2b::/50
2001:db8:1a2b:4000::/50
2001:db8:1a2b:8000::/49
可以拆分为:
2001:db8:1a2b:8000::/50
2001:db8:1a2b:c000::/50
等
你可以把它写成一棵树(只显示几个分支,我不想用完整的65536个子网填充页面):
2001:0db8:1a2b:0000::/48
2001:0db8:1a2b:0000::/49
2001:0db8:1a2b:8000::/49
2001:0db8:1a2b:8000::/50
2001:0db8:1a2b:8000::/51
2001:0db8:1a2b:a000::/51
2001:0db8:1a2b:a000::/52
2001:0db8:1a2b:a000::/53
2001:0db8:1a2b:a800::/53
2001:0db8:1a2b:b000::/52
2001:0db8:1a2b:b000::/53
2001:0db8:1a2b:b800::/53
2001:0db8:1a2b:c000:/50
正如您所看到的那样,阅读并不容易。如果你以4的倍数划分子网会更容易,因为它匹配十六进制字符:
2001:0db8:1a2b:0000::/48
2001:0db8:1a2b:0000::/52
2001:0db8:1a2b:1000::/52
2001:0db8:1a2b:2000::/52
2001:0db8:1a2b:2000::/56
2001:0db8:1a2b:2000::/60
2001:0db8:1a2b:2000::/64
2001:0db8:1a2b:2001::/64
2001:0db8:1a2b:200f::/64
2001:0db8:1a2b:2010::/60
2001:0db8:1a2b:2010::/64
2001:0db8:1a2b:2011::/64
2001:0db8:1a2b:201f::/64
2001:0db8:1a2b:20f0::/60
2001:0db8:1a2b:3000::/52