IPv6地址的格式及子网划分方法(IPv6子网划分)

2022-05-02 08:14:21

IPV6地址分类

如图所示,地址分为三大类:组播、单播、任意播(也称泛播);

单播可分为:全球单播地址(可理解为公网地址---IPv6)、本地链路地址、站点本地地址、回环地址、未指定地址、内嵌IPv4地址。

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

IPv6公网地址(全球单播地址)

前3bit 固定001;

地址范围:2xxx:xxxxx/3 - 3FFF: :FFFF;

2001::/16 IPV6因特网地址;

2002::/16 6to4过渡地址;

3ffe::/16 用于6bone测试目的的前缀;

注意:接口标识符:指64bit的MAC地址(未来网络适配器的MAC地址),或者是基于48bit MAC地址扩展为64bit(EUI 64)。在全球单播地址中,规定如2001:BCFF:FEA6::/48表示一个IPv6路由前缀,2001:BCFF:FEA6:6C01::/64表示一个IPv6子网前缀。

------------------


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

当一个节点启用IPv6时自动生成,格式如下图,64位拓展由MAC地址按照EUI 64转换而来。

IPv6的dhcp生成方式

EUI-64格式:基于MAC地址自动构造;

例如:MAC地址为0012:3400:ABCD;

首先把MAC地址对半分开,插入一个固定值FFFE;

0012:3400:ABCD ----> 0012:34FF:FE00:ABCD;

再把第七位翻转:0----> 1, 1---->0

0012:34FF:FE00:ABCD ----> 0212:34FF:FE00:ABCD;

最后加上前缀:

FE80::212:34FF:FE00:ABCD;

--------------


站点本地地址(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。

类似于IPv4中的私有地址,仅在内部网络使用,如打印机。


对于IPv6本地站点地址的配置,必须通过DHCPv6进行地址的分配、无状态的前缀公告、或者手工的进行输入。




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




ULA,唯一本地地址,概念上相当于私有IP,仅能够在本地网络使用,在IPv6 Internet上不可被路由。上面提到的站点本地地址由于起初的标准定义模糊而被弃用,而后RFC又重新定义了唯一本地地址以满足本地环境中私有IPv6地址的使用。

在RFC4193中标准化了一种用来在本地通信中取代站点本地单播地址的类型。ULA拥有固定前缀FC00::/7,分为两块:FC00::/8暂未定义,FD00::/8定义如下:

唯一的本地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的协议进行通信。ipv6地址与ipv4地址并没有公式进行对应,也就是说两者之间并没有绝对的映射关系。 但是事实证明这种技术不是个好主意,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多播地址

标志位为0000表示是永久保留的组播地址,分配给各种技术使用;

标志位为0001表示是用户可使用的临时组播地址;

范围段定义了组播地址的范围,其定义如下:

二进制 十六进制 范围类型

0001 1 本地接口范围

0010 2 本地链路范围

0011 3 本地子网范围

0100 4 本地管理范围

0101 5 本地站点范围 类似组播的私网地址

1000 8 组织机构范围

1110 E 全球范围 类似组播的公网地址

下面是一些组播指定地址:

FF02::1 all nodes 在本地链路范围的所有节点

FF02::2 all routers 在本地链路范围的所有路由器

FF02::5 all ospf routers

FF02::9 all rip routers 所有运行RIP的路由器

FF02::A all eigrp routers 所有运行eigrp的路由器

FF05::2 在一个站点范围内的所有路由器


-------------------


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

IPv6的子网划分

对于全局地址,Internet 编号分配机构 (IANA) 或 ISP 会分配一个前 48 位均为固定位的 IPv6 地址前缀。若要对 48 位全局地址前缀的子网 ID 字段进行子网划分,需要执行一个包含两步的过程:1. 确定用于子网划分的位数。2. 枚举出新的子网网络前缀。 用于子网划分的位数决定着您可以分配给您的网络各部分(基于地理区划或部门分类)的新子网网络前缀的可能的数量。在分层路由基础结构中,您必须确定您在层次结构的各层需要的网络前缀数,进而确定各层需要的位数。为层次结构的各层选择的位越多,您拥有的用于枚举层次结构最后一层中的单个子网的位越少。

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

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

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

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

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

这两种方法产生的结果相同,都会生成子网网络前缀的一个枚举列表。 要使用十六进制方法创建子网网络前缀的枚举列表,请执行以下步骤:

1. 根据为子网划分选择的位数 s 和进行子网划分的网络前缀的前缀长度 m,计算以下各值:f = m - 48 f 是子网 ID 中已固定的位的数目。n = 2^s n 是您将获得的网络前缀的数目。i = 2^(16-(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=2^3)。递增值是 0x400 (i=2^(16-(3+3))=1024=0x400)。新的前缀长度是 54 (P=51+3)。 接下来,构造一个包含 8 行的表,如表所示。将 3FFE:FFFF:0:C000::/54 放在网络前缀 1 所在的那一行的第二列,然后让网络前缀的子网 ID 部分依次递增 0x400,将结果分别填入后面的各行中。

网络前缀 子网网络前缀 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 - 48 f 是子网 ID 中已固定的位的数目。n = 2^s n 是您将获得的网络前缀的数目。i = 2^(16-(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 行的表,如表所示。将 49192 放在网络前缀 1 所在的那一行的第一列,将 3FFE:FFFF:0:C000::/54 放在该行的第二列。让网络前缀的子网 ID 部分(第四个十六进制块)依次递增 1024,然后将结果转换为十六进制并分别填入后面的各行中。

网络前缀 子网 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。