IPv6 地址总长度为 128 bit,通常分为 8 组,每组为 4 个十六进制数的形式,每组 16 进制数间用冒号分隔,这是 IPv6 地址的首选格式。例如:FC00:0000:130F:0000:0000:09C0:876A:130B。
为了书写方便,IPv6 还提供了压缩格式,以上述 IPv6 地址为例,具体压缩规则如下:
一个 IPv6 地址可以分为以下两部分。
对于 IPv6 单播地址来说,如果地址的前 3 bit 不是 000,则接口标识必须为 64 bit;如果地址的前 3 bit 是 000,则没有此限制。接口标识可通过 3 种方法生成:手工配置、系统通过软件自动生成、遵循 IEEE EUI-64 规范自动生成。其中,遵循 EUI-64 规范自动生成最为常用。
IEEE EUI-64 规范是将接口的 MAC 地址转换为 IPv6 接口标识的过程。如图所示,MAC 地址的前 24 bit(用 c 表示的部分)为公司标识,后 24 bit(用 m 表示的部分)为扩展标识符。从高位开始,如果第 7 位是 0,表示 MAC 地址是本地唯一的。
转换的第一步是将 FFFE(转换成二进制)插入 MAC 地址的公司标识和扩展标识符之间。第二步从 MAC 地址的高位开始,将第 7 位的 0 改为 1,表示此接口标识是全球唯一的,这是因为需要生成全球唯一的 IPv6 地址。如 MAC 地址 000E-0C82-C4D4 经过转换后为 020E:0CFF:FE82:C4D4。最终,我们得到 48 + 16 = 64 bit 的接口标识,在前面加上 64 bit 的网络前缀,即可得到完整的全球唯一的 IPv6 地址。
IPv6 地址大致可分为单播地址、组播地址和任播地址 3 种类型。与 IPv4 相比,IPv6 取消了广播地址类型,以更丰富的组播地址代替,同时增加了任播地址类型。
1)单播地址
IPv6 定义了多种单播地址,目前常用的单播地址有未指定地址、环回地址、全球单播地址、链路本地地址和唯一本地地址。
全球单播地址由 Global Routing Prefix(全球路由前缀)、Subnet ID(子网 ID)和 Interface ID(接口标识)组成。
2)组播地址
IPv6 的组播与 IPv4 相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如,组播地址 FF02::1 表示链路本地范围的所有节点,组播地址 FF02::2 表示链路本地范围的所有路由器。
IPv6 组播地址的 Network Prefix(网络前缀)、Flag(标志)、Scope(范围)以及 Group ID(组播组 ID)。
2)任播地址
任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的报文将被发送给子网中路由意义上最近的一个网络接口。任播地址用于在为多个主机或者节点提供相同服务时提供冗余功能和负载分担功能。目前通过共享单播地址的方式来使用任播地址。将一个单播地址分配给多个节点或者主机,这样在网络中如果存在多条该地址路由,当发送者发送以任播地址为目的 IP 的数据报文时,发送者无法控制哪台设备能够收到该报文,这取决于整个网络中路由协议计算的结果。这种方式适用于一些无状态的应用,例如 DNS(Domain Name System,域名系统)等。
IPv6 没有为任播地址规定单独的地址空间,任播地址和单播地址使用相同的地址空间。目前任播地址主要应用于移动 IPv6。有一类特殊的任播地址叫作子网路由器任播地址。发送到子网路由器任播地址的报文会被发送到该地址标识的子网中路由意义上最近的一个设备。所有设备都必须支持子网路由器任播地址。在节点需要和远端子网上所有设备中的一个(不关心具体是哪一个)通信时使用子网路由器任播地址。例如,一个移动节点需要和它的“家乡”子网上的所有移动代理中的一个进行通信。
领取专属 10元无门槛券
私享最新 技术干货