G
N
I
D
A
O
L

IPv6

IPv6地址格式

IPv6的地址长度是128位(bit)。

将这128位的地址按每16位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开。

例如:2000:0000:0000:0000:0001:2345:6789:abcd

这个地址很长,可以用两种方法对这个地址进行压缩,

前导零压缩法:

将每一段的前导零省略,但是每一段都至少应该有一个数字

例如:2000:0:0:0:1:2345:6789:abcd

双冒号法:

如果一个以冒号十六进制数表示法表示的IPv6地址中,如果几个连续的段值都是0,那么这些0可以简记为::。每个地址中只能有一个::。

例如:2000::1:2345:6789:abcd

单播地址 Unicast IPv6 Addresses

可聚合的全球单播地址(Aggregatable Global Unicast Addresses)

可在全球范围内路由和到达的,相当于IPv4里面的global addresses。前三个bit是001

例如:2000::1:2345:6789:abcd

链路本地地址(Link-Local Addresses)

用于同一个链路上的相邻节点之间通信,相当于IPv4里面的169.254.0.0/16地址。Ipv6的路由器不会转发链路本地地址的数据包。前10个bit是1111 1110 10,由于最后是64bit的interface ID,所以它的前缀总是FE80::/64

例如:FE80::1

站点本地地址(Site-Local Addresses)

对于无法访问internet的本地网络,可以使用站点本地地址,这个相当于IPv4里面的private address(10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16)。它的前10个bit是1111 1110 11,它最后是16bit的Subnet ID和64bit的interface ID,所以它的前缀是FEC0::/48。

值得注意的是,在RFC3879中,最终决定放弃单播站点本地地址。放弃的理由是,由于其固有的二义性带来的单播站点本地地址的复杂性超过了它们可能带来的好处。它在RFC4193中被ULA取代。

唯一的本地IPv6单播地址(ULA,Unique Local IPv6 Unicast Address)

在RFC4193中标准化了一种用来在本地通信中取代单播站点本地地址的地址。ULA拥有固定前缀FD00::/8,后面跟一个被称为全局ID的40bit随机标识符。

未指定地址(Unspecified address)

0:0:0:0:0:0:0:0 或者::

当一个有效地址还不能确定,一般用未指定地址作为源地址。未指定地址不能作为一个目标地址来使用。

回环地址(Loopback address)

回环地址::1用于标识一个回环接口,可以使一个节点可以给自己发送数据包。相当于IPv4的回环地址127.0.0.1

兼容IPv4的地址(IPv4-compatible address)

形如::w.x,y.z,这里的w.x.y.z是IPv4公共地址的十进制点号表示法,用于IPv6/IPv4节点们(同时支持)在使用仅支持IPv4的网络上用IPv6的协议进行通信。

但是事实证明这种技术不是个好主意,RFC4291中废弃了对这类地址的使用。

IPv4映射地址(IPv4-mapped address)

形如::FFFF:w.x.y.z,这里的w.x.y.z是IPv4公共地址的十进制点号表示法,用于一个仅支持IPv4的节点表现为一个IPv6的节点

6over4地址

[64bit-prefix]:0:0:WWXX:YYZZ,其中的WWXX:YYZZ是w.x.y.z IPv4公共地址的十进制点号表示法,用于一个使用6to4协议的隧道机制的节点。

6to4地址

2002:WWXX:YYZZ:[SLA ID]:[Interface ID],用于表示一个使用6to4协议的隧道机制节点。

多播IPv6地址 Multicast IPv6 Addresses

前8个bit为1111 1111,

其中FF01::到FF0F::的多播地址是保留专用地址

FF01::1 节点本地范围所有节点多播地址

FF02::1 链路本地范围所有节点多播地址

FF01::2 节点本地范围所有路由器多播地址

FF02::2 链路本地范围所有路由器多播地址

FF05::2 站点本地范围所有路由器多播地址

为 IPv6 划分子网

在对 IPv6 地址空间进行子网划分时,需要使用子网划分技术,以一种允许将剩余地址空间的摘要和委派路由到 IPv6 Intranet 的不同部分的方式,为 48 位全局地址前缀划分 16 位子网 ID 字段。

您不需要以任何特定的方式进行子网划分。此处介绍的子网划分技术假定您是通过使用子网 ID 字段的高序位划分其地址空间的可变部分来进行子网划分的。虽然此方法有助于分层寻址和路由,但此方法并不是非用不可。例如,在只有少数子网的小型组织中,您可以通过为子网编号(从 0 开始),轻松地为全局地址创建平面寻址空间。

对全局地址前缀进行子网划分

对于全局地址,Internet 编号分配机构 (IANA) 或 ISP 会分配一个前 48 位均为固定位的 IPv6 地址前缀。若要对 48 位全局地址前缀的子网 ID 字段进行子网划分,需要执行一个包含两步的过程:

1. 确定用于子网划分的位数。
2. 枚举出新的子网网络前缀。

确定用于子网划分的位数

用于子网划分的位数决定着您可以分配给您的网络各部分(基于地理区划或部门分类)的新子网网络前缀的可能的数量。在分层路由基础结构中,您必须确定您在层次结构的各层需要的网络前缀数,进而确定各层需要的位数。为层次结构的各层选择的位越多,您拥有的用于枚举层次结构最后一层中的单个子网的位越少。

例如,您可以实施一个包含两层的层次结构来反映地理/部门结构,4 位用于地理层,6 位用于部门层。这一方案允许 16 个地理区域,各个区域中的各个部门只占剩余的子网划分空间的 6 (16 - 6 - 4) 位,或者说每个部门只有 64 (=26) 个子网。

在层次结构中任何给定的层上,许多位已被层次结构中的上一层固定了 (f),许多位被用来在层次结构中的当前层进行子网划分 (s),还有许多位留给层次结构中的下一层使用 (r)。下面这个等式始终成立:f+s+r = 16。

枚举子网网络前缀

根据用于子网划分的位数,您必须列出新的子网网络前缀,您可以使用下面两种主要方法之一:

使用子网 ID 和递增值的十六进制表示形式来枚举新的子网网络前缀。
使用子网 ID 和递增值的十进制表示形式来枚举新的子网网络前缀。

这两种方法产生的结果相同,都会生成子网网络前缀的一个枚举列表。

要使用十六进制方法创建子网网络前缀的枚举列表,请执行以下步骤:

1. 根据为子网划分选择的位数 s 和进行子网划分的网络前缀的前缀长度 m,计算以下各值:f = m - 48f 是子网 ID 中已固定的位的数目。n = 2sn 是您将获得的网络前缀的数目。i = 216-(f+s) i 是以十六进制表示的各个连续子网 ID 之间的递增值。P = m+s**P 是新的子网网络前缀的前缀长度。
2. 创建一个包含 n 行、两列的表。第一列存放网络前缀编号(从 1 开始),第二列存放新的子网网络前缀。
3. 将使用新的前缀长度的原始网络前缀放在第一行的第二列中。例如,根据进行子网划分的子网 ID 的十六进制值 F,子网网络前缀为 [48 位前缀]:F:😕P
4. 将站点本地地址或全局地址的子网 ID 部分中的值加上 i,将结果放在下一行的第二列中。例如,在第二行中,子网前缀为 [48 位前缀]:F+i:😕P
5. 重复步骤 4,直到您完成该表。

例如,要对全局地址前缀 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 行的表,如表 4-12 所示。将 3FFE:FFFF:0:C000::/54 放在网络前缀 1 所在的那一行的第二列,然后让网络前缀的子网 ID 部分依次递增 0x400,将结果分别填入后面的各行中。

下表为使用十六进制技术对 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,计算以下各值:f = m - 48f 是子网 ID 中已固定的位的数目。n = 2sn 是您将获得的网络前缀的数目。i = 216-(f+s) i 是各个连续子网 ID 之间的递增值。P = m+s**P 是新的子网网络前缀的前缀长度。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,直到您完成该表。

例如,要对站点本地网络前缀 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 行的表,如表 4-13 所示。将 49192 放在网络前缀 1 所在的那一行的第一列,将 3FFE:FFFF:0:C000::/54 放在该行的第二列。让网络前缀的子网 ID 部分(第四个十六进制块)依次递增 1024,然后将结果转换为十六进制并分别填入后面的各行中。

下表为使用十进制技术对 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

变量长度子网划分

与 IPv4 相同的是,您可以对 IPv6 地址前缀循环进行子网划分来在组织 Intranet 的各个层次提供路由摘要,定义单个子网的地址前缀可达到 64 位。与 IPv4 不同的是,您无法使用可变长度子网划分来创建不同大小的子网,因为所有 IPv6 子网都使用 64 位网络 ID 和 64 位接口 ID。

posted @ 2022-06-24 14:15  StimuMing  阅读(270)  评论(0编辑  收藏  举报