概述介绍
鉴于 IPv4 地址在规划和分配上的局限性,IETF 对 IPv6 地址类型进行精细划分,不同类型的 IPv6 地址被赋予不同的前缀,且受地址分配机构的严格管理(从 IPv4 习得的经验);
现阶段,常用的 IPv6 地址或前缀有:
范围 | 描述 |
---|---|
2001::/16 | 用于 IPv6 互联网,类似于 IPv4 公网地址; |
2002::/16 | 用于 6to4 隧道(IPv6 Transition) |
FE80::/10 | 链路本地地址前缀,用于本地链路范围内的通信 |
FF00::/8 | 组播地址前缀,用于 IPv6 组播 |
::/128 | 未指定地址,类似于 IPv4 中的 0.0.0.0 |
::1/128 | 环回地址,类似于 IPv4 中的 127.0.0.1 |
单播地址(Unicast Address)
标识一个接口,目的地址为单播地址的报文会被送到被标识的接口。在 IPv6 中,单个接口拥有多个 IPv6 地址是非常常见的现象;
地址组成
单播地址(IPv6)结构,分为如下两部分:
1)网络前缀(Network Prefix):n bit,相当于 IPv4 地址的 Network ID 部分;
2)接口标识(Interface Identify):(128-n)bit ,相当于 IPv4 地址的 Host ID 部分;
3)注意,常见的 IPv6 单播地址(如全球单播地址、链路本地地址等)要求 Network Prefix 和 Interface Identify 必须为 64 bit;
Network Prefix,通常由运营商分配;
Interface Identify,接口标识,是需要我们进行配置的部分:
1)手工配置:通过命令行,配置指定的 IPv6 地址;
—- 顾名思义,手动配置就是人为指定 Interface Identify 来实现;
2)系统生成:操作系统(或网络设备)将自动生成地址;
—- 设备采用随机生成的方法产生一个接口 ID,目前 Windows 操作系统使用该方式;
3)规范生成:通过 IEEE EUI-64 规范生成(最为常用);
—- 这种由 MAC-Address 产生 Interface Identify 将减少配置的工作量;
—- 只需要获取 IPv6 Network Prefix 就可以与 Interface Identify 形成 IPv6 地址;
—- 使用这种方式最大的缺点就是某些恶意者可以通过二层 MAC 推算出三层 IPv6 地址;
对于 EUI-64 规范,其提供将 MAC Address 转换为 Interface Identify 的方法:
2)在 MAC Address 中间插入 FFFE,得到 EUI-64;
1)并 MAC Address,二进制,将第 7bit 取反;
3)将得到的新串作为 Interface Identify 部分;
地址分类(单播)
1)全球单播地址(GUA,Global Unicast Address),2000::/3,相当于 IPv4 的公网地址;
2)唯一本地地址(ULA,Unique Local Address),FD00::/8,类似 IPv4 私网地址;
3)链路本地地址(LLA,Link Local Address),FE80::/10,类似 IPv4 169.254.X.X 地址;
4)特殊地址:
5)其他单播地址:
全球单播地址,GUA,Global Unicast Address,2000::/3
也称 可聚合全球单播地址,全球唯一,用于互联网主机互访。向运营商或向所在地区的 IPv6 地址管理机构申请 GUA 地址;
0)通常 GUA 的 Network Prefix 长度为 64-bit,Interface Identify 也为 64-bit;
1)routing prefix(全局路由前缀):由提供商指定给一个组织机构,一般至少为 45-bit;
2)subnet id(子网 ID):组织机构根据自身网络需求划分子网;
3)interface identifier(接口标识):用来标识一个设备(的接口);
对于 GUA 地址,配置方式如下:
1)通过手工配置;
2)SLAAC,无状态自动配置;
—- 通过 NDP.RA 报文,Flag.NotManaged==0 与 Flag.NotOther==0 字段,能够看到该地址是 NDP 协商获得;
3)有状态自动配置(DHCPv6);
唯一本地地址,ULA,Unique Local Address,FD00::/8
是 IPv6 私网地址,仅在内网中使用,该地址空间在 IPv6 公网中不可被路由,因此不能直接访问公网;
1)唯一本地地址使用 FC00::/7 地址块;根据 L 位变化,目前仅使用 FD00::/8 地址段,而 FC00::/8 预留为以后拓展用;
2)ULA 虽然只在有限范围内有效,但也具有全球唯一的前缀(虽然随机方式产生,但是冲突概率很低);
链路本地地址,LLA,Link-Local Address,FE80::/10
是在 IPv6 中另种应用范围受限制的地址类型,有效范围是本地链路;
在 IPv6 中,SRC-Address 或 DST-Address 为 LLA 的数据包将不会被转发到始发的链路之外,且 LLA 的有效范围为本地链路;
每个 IPv6 接口都必须具备一个链路本地地址,用于一条单一链路层面的通信,例如 IPv6 地址无状态自动配置、IPv6 邻居发现、OSPFv3 等等;
华为设备支持自动生成和手工指定两种配置方式;
对于 LLA 地址,配置方式如下:
1)通过手工配置;
2)配置 GUA 地址,系统生成;
3)根据 EUI-64 规范动态生成;
任播地址(Anycast Address)
标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包,将发送给其中路由意义上最近的一个网络接口;
范围与单播地址相同,格式也与单播地址相同 —— 准确的说,任播更像是重复使用地址的方法;
任播过程涉及一个任播报文发起方和一个或多个响应方;
任播报文的发起方通常为请求某一服务(例如,Web 服务)的主机;
任播地址与单播地址在格式上无任何差异,唯一的区别是一台设备可以给多台具有相同地址的设备发送报文;
在网络中,运用任播地址有很多优势:
1)业务冗余。比如,用户可以通过多台使用相同地址的服务器获取同一个服务(例如,Web 服务)。这些服务器都是任播报文的响应方。如果不是采用任播地址通信,当其中一台服务器发生故障时,用户需要获取另一台服务器的地址才能重新建立通信。如果采用的是任播地址,当一台服务器发生故障时,任播报文的发起方能够自动与使用相同地址的另一台服务器通信,从而实现业务冗余;
2)提供更优质的服务。比如,某公司在 A 省和 B 省各部署了一台提供相同 Web 服务的服务器。基于路由优选规则,A 省的用户在访问该公司提供的 Web 服务时,会优先访问部署在 A 省的服务器,提高访问速度,降低访问时延,大大提升了用户体验;
3)在互联网络中,多个服务器使用相同地址,但位于不同路由设备之后,那么用户请能够到达任意服务器(就近原则);
注意,这里没有地址冲突,因为这些服务器在不同的路由设备之后,即在不同的广播域内;
组播地址(Multicast Address)
IPv6 组播地址标识某个组(或标识多个接口),目的地址为组播地址的报文会被送到该组播组内的成员(或被标识的所有接口)。通常用于“一对多”的通信场景,只有加入相应组播组的设备接口才会侦听发往该组播地址的报文。例如,在 IPv6 中,通过组播地址实现 ARP(地址解析);
注意事项:
1)IPv6 组播地址只可以作为 IPv6 报文的目的地址;
Flags,最后一个比特用来表示永久或临时组播组:
1)0000:表示永久组播地址(协议使用);
2)0001:表示临时组播地址;
Scope,表示组播组的范围(本地范围、接口范围、组织范围),做管理用途;
1)0:预留;
2)1:节点本地范围;单个接口有效,仅用于 Loopback 通讯
3)2:链路本地范围;例如 FF02::1
4)5:站点本地范围;
5)8:组织本地范围;
6)E:全球范围;
7)F:预留;
Group ID:组播组 ID;
组播物理地址
以太网传输单播 IP 报文的时候,DST-MAC-Address 是下一跳的 MAC 地址。但是在传输组播数据包时,其目的地不再是一个具体的接收者,而是一个成员不确定的组,所以要使用组播 MAC 地址;
组播 IPv6 报文的 DST-Address 为组播 IPv6 地址,同样 DST-MAC-Address 为组播 MAC 地址:
1)前 16-bit 为 33:33,是专门为 IPv6 Multicast 预留的 MAC 地址前缀;
2)后 32-bit 从组播 IPv6 地址的后 32-bit 直接映射而来;
被请求节点组播地址
在 IPv6 中,协议要求:
1)当接口分配单播或任播地址后,设备要自动计算一个被请求节点组播地址,并且自动加入该组播组;
2)被请求节点组播地址的有效范围为本地链路范围;
应用场景:
1)地址解析:在 IPv6 中,ARP 及广播都被取消,当设备需要请求某个 IPv6 地址对应的 MAC 地址时,设备依然需要发送请求报文,但是该报文是一个组播报文,其目的 IPv6 地址是目标 IPv6 单播地址对应的被请求节点组播地址,由于只有目标节点才会侦听这个被请求节点组播地址,所以该组播报文可以被目标节点所接收,同时不会占用其他非目标节点的网络性能;
2)还用于 Neighbor Discovery(邻居发现机制)和 DAD(地址重复检测)功能;
被请求节点组播地址的生成方法(104+24):
使用示例(地址解析):
PC1 发送数据至 PC2 前,首先需要获取其 MAC 地址。PC1 将发起类似 IPv4 中 ARP 的解析流程
在 IPv6 中使用 ICMPv6 的 NS 及 NA 报文来实现地址解析过程,NS 报文的目的 IPv6 地址为目标 IPv6 单播地址对应的被请求节点组播地址:
所有节点组播地址
在 IPv6 中,很多协议都会向 FF01::1、FF02::1 这两个地址发送数据。不管主机还是路由器,当收到来自这两个地址的报文时,必须进行处理;
所有路由器组播地址
FF01::2、FF02::2,当路由器收到来自该地址的报文后,必须进行处理;
广播地址(Broadcast Address)
IPv6 没有定义广播地址(Broadcast Address)
地址示例
_IDX_ | Address Type | Host | Router |
---|---|---|---|
00 | 全球单播地址(GUA) | 2001::1 | 2001::2 |
01 | 链路本地地址(LLA) | FE80::2E0:FCFF:FE35:7287 | FE80::2E0:FCFF:FE99:1285 |
02 | 环回地址 | ::1 | ::1 |
03 | 所有节点组播地址 | FF01::1、FF02::1 | FF01::1、FF02::1 |
04 | 所有路由器组播地址 | FF01::2、FF02::2 | |
05 | 每个单播地址的被请求节点组播地址 | FF02::1:FF35:7287、FF02::1:FF00:1 | FF02::1:FF99:1285、FF02::1:FF00:2 |
补充说明:
1)GUA 和 LLA 是接口上最常见的 IPv6 单播地址,每个接口上能够配置多个 IPv6 地址;
2)当配置 GUA 地址后,会自动产生 LLA 地址(通过 EUI-64 算法);