本文出自 “王达博客” 博客,转载请与作者联系!
作者已授权本博客转载
以下内容摘自笔者编著的《网管员必读——超级网管经验谈》(第2版)一书。
3.8 为IP v6划分子网
在对IP v6地址空间进行子网划分时,需要使用子网划分技术,以一种允许将剩余地址空间的摘要和委派路由到IP v6 Intranet的不同部分的方式,为48位全局地址前缀划分16位子网ID字段。不过,目前因为IP v6技术本身都没有普及使用,加上IP v6地址数本身就非常庞大,所以对IP v6地址进行子网划分,在目前来说可能还没有得到实质应用,也没有什么需求。在此介绍这一新IP地址协议下的子网划分方法,纯是为了各位进行积累考虑的。
不需要以任何特定的方式进行子网划分。此处介绍的子网划分技术假定是通过使用子网ID字段的高序位划分其地址空间的可变部分来进行子网划分的。虽然此方法有助于分层寻址和路由,但此方法并不是非用不可。例如,在只有少数子网的小型组织中,可以通过为子网编号(从0开始),轻松地为全局地址创建平面寻址空间。
对于全局地址,Internet编号分配机构(IANA)或ISP会分配一个前48位均为固定位的IP v6地址前缀。若要对48位全局地址前缀的子网ID字段进行子网划分,需要执行一个包含两步的过程:
(1)确定用于子网划分的位数。
(2)枚举出新的子网网络前缀。
3.8.1 确定用于子网划分的位数
用于子网划分的位数决定着可以分配给的网络各部分(基于地理区划或部门分类)的新子网网络前缀的可能的数量。在分层路由基础结构中,必须确定在层次结构的各层需要的网络前缀数,进而确定各层需要的位数。为层次结构的各层选择的位越多,拥有的用于枚举层次结构最后一层中的单个子网的位越少。
例如,可以实施一个包含两层的层次结构来反映地理/部门结构,4位用于地理层,6位用于部门层。这一方案允许16个地理区域,各个区域中的各个部门只占剩余的子网划分空间的6(16 - 6 - 4)位,或者说每个部门只有64(= 26)个子网。
在层次结构中任何给定的层上,许多位已被层次结构中的上一层固定了(f),许多位被用来在层次结构中的当前层进行子网划分(s),还有许多位留给层次结构中的下一层使用(r)。下面这个等式始终成立:f+s+r = 16。图3-6显示了这种关系。
图3-6 对全局IP v6地址的子网ID字段进行子网划分
3.8.2 枚举子网网络前缀
根据用于子网划分的位数,必须列出新的子网网络前缀,可以使用下面两种主要方法之一:
l 使用子网ID和递增值的十六进制表示形式来枚举新的子网网络前缀。
l 使用子网ID和递增值的十进制表示形式来枚举新的子网网络前缀。
这两种方法产生的结果相同,都会生成子网网络前缀的一个枚举列表。
要使用十六进制方法创建子网网络前缀的枚举列表,请执行以下步骤:
(1)根据为子网划分选择的位数s和进行子网划分的网络前缀的前缀长度m,计算以下各值:
l f = m-48:f是子网ID中已固定的位的数目。
l n = 2s:n是将获得的网络前缀的数目。
l I = 216-(f+s):i是以十六进制表示的各个连续子网ID之间的递增值。
l P = m+s:P是新的子网网络前缀的前缀长度。
(2)创建一个包含n行、两列的表。第一列存放网络前缀编号(从1开始),第二列存放新的子网网络前缀。
(3)将使用新的前缀长度的原始网络前缀放在第一行的第二列中。例如,根据进行子网划分的子网ID的十六进制值F,子网网络前缀为[48位前缀]:F::/P。
(4)将站点本地地址或全局地址的子网ID部分中的值加上i,将结果放在下一行的第二列中。例如,在第二行中,子网前缀为[48位前缀]:F+i::/P。
(5)重复步骤4,直到完成该表。
【示例16】对全局地址前缀3FFE:FFFF:0:C000::/51进行3位子网划分。 |
首先计算前缀数量值、递增值和新前缀长度值。起始值是F=0xC000,s=3,m=51,因此f=51-48=3。前缀的数量是8(n=23)。递增值是0x400(i=216-(3+3)=1024=0x400)。新的前缀长度是54(P=51+3)。
接下来,构造一个包含8行的表,如表3-20所示。将3FFE:FFFF:0:C000::/54放在网络前缀1所在的那一行的第二列,然后让网络前缀的子网ID部分依次递增0x400,将结果分别填入后面的各行中。
表3-20 使用十六进制技术对3FFE:FFFF:0:C000::/51进行3位子网划分
网络前缀 |
子网网络前缀 |
1 |
3FFE:FFFF:0:C000::/54 |
2 |
3FFE:FFFF:0:C400::/54 |
3 |
3FFE:FFFF:0:C800::/54 |
4 |
3FFE:FFFF:0:CC00::/54 |
5 |
3FFE:FFFF:0:D000::/54 |
6 |
3FFE:FFFF:0:D400::/54 |
7 |
3FFE:FFFF:0:D800::/54 |
8 |
3FFE:FFFF:0:DC00::/54 |
要使用十进制方法创建子网网络前缀的枚举列表,请执行以下步骤:
(1)根据用于子网划分的位数s、进行子网划分的网络前缀的前缀长度m和进行子网划分的子网ID的十六进制值F,计算以下各值:
l f = m-48:f是子网ID中已固定的位的数目。
l n = 2s:n是将获得的网络前缀的数目。
l I = 216-(f+s):i是各个连续子网ID之间的递增值。
l P = m+s:P是新的子网网络前缀的前缀长度。
l D = F的十进制表示形式
(2)创建一个包含n行、三列的表。第一列存放网络前缀编号(从1开始),第二列存放新的子网网络前缀的子网ID部分的十进制表示形式,第三列存放新的子网网络前缀。
(3)将子网ID的十进制表示形式(D)放在第一行的第一列,将子网前缀[48位前缀]:F::/P放在第一行的第二列。
(4)用子网ID十进制表示形式的值加上i,将结果放在下一行的第二列。例如,第二行的子网ID的十进制表示形式是D+i。
(5)在第三列中,将子网ID的十进制表示形式转换为十六进制,并构造前缀[48位前缀]:[SubnetID]::/P。例如,在第二行中,子网网络前缀为[48位前缀]:[D+i(转换为十六进制)]::/P。
(6)重复步骤4和5,直到完成该表。
【示例17】对站点本地网络前缀3FFE:FFFF:0:C000::/51进行3位子网划分。 |
首先计算前缀数量值、递增值、新前缀长度值和起始子网ID十进制表示形式。我们的起始值是F=0xC000,s=3,m=51,这样f=51-48=3。前缀数量是8(n=23)。递增值是1024(i=216-(3+3))。新的前缀长度是54(P=51+3)。起始子网ID的十进制表示形式是49152(D=0xC000=49152)。
接下来,构造一个包含8行的表,如表1-20所示。将49192放在网络前缀1所在的那一行的第一列,将3FFE:FFFF:0:C000::/54放在该行的第二列。让网络前缀的子网ID部分(第四个十六进制块)依次递增1024,然后将结果转换为十六进制并分别填入后面的各行中。
表3-21 使用十进制技术对3FFE:FFFF:0:C000::/51进行3位子网划分
网络前缀 |
子网ID的十进制表示形式 |
子网网络前缀 |
1 |
49192 |
3FFE:FFFF:0:C000::/54 |
2 |
50176 |
3FFE:FFFF:0:C400::/54 |
3 |
51200 |
3FFE:FFFF:0:C800::/54 |
4 |
52224 |
3FFE:FFFF:0:CC00::/54 |
5 |
53248 |
3FFE:FFFF:0:D000::/54 |
6 |
54272 |
3FFE:FFFF:0:D400::/54 |
7 |
55296 |
3FFE:FFFF:0:D800::/54 |
8 |
56320 |
3FFE:FFFF:0:DC00::/54 |