首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IPv6基础知识

1、IPv6 地址的表示方法

IPv6 地址总长度为 128 bit,通常分为 8 组,每组为 4 个十六进制数的形式,每组 16 进制数间用冒号分隔,这是 IPv6 地址的首选格式。例如:FC00:0000:130F:0000:0000:09C0:876A:130B。

为了书写方便,IPv6 还提供了压缩格式,以上述 IPv6 地址为例,具体压缩规则如下:

  • 每组中的前导“0”都可以省略,所以上述地址可写为 FC00:0:130F:0:0:9C0:876A:130B。
  • 地址中包含的连续两个或多个均为 0 的组,可以用双冒号“::”来代替,所以上述地址又可以进一步简写为 FC00:0:130F::9C0:876A:130B。
  • 在一个 IPv6 地址中只能使用一次双冒号“::”,否则当计算机将压缩后的地址恢复成 128 bit 时,无法确定每个“::”代表 0 的个数。
2、IPv6 地址的结构

一个 IPv6 地址可以分为以下两部分。

  • 网络前缀:n bit,相当于 IPv4 地址中的网络 ID。
  • 接口标识:(128 − n)bit,相当于 IPv4 地址中的主机 ID。

对于 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 地址。

3、IPv6 地址分类

IPv6 地址大致可分为单播地址、组播地址和任播地址 3 种类型。与 IPv4 相比,IPv6 取消了广播地址类型,以更丰富的组播地址代替,同时增加了任播地址类型。

1)单播地址

IPv6 定义了多种单播地址,目前常用的单播地址有未指定地址、环回地址、全球单播地址、链路本地地址和唯一本地地址。

  • 未指定地址:IPv6 中的未指定地址即 0:0:0:0:0:0:0:0/128 或::/128。该地址可以表示某个接口或节点还没有 IP 地址,可以作为某些报文的源 IP 地址(例如在 NS 报文的重复地址检测中会出现)。源 IP 地址是::的报文不会被路由设备转发。
  • 环回地址:IPv6 中的环回地址即 0:0:0:0:0:0:0:1/128 或::1/128。环回地址与 IPv4 中的 127.0.0.1 作用相同,主要用于设备向自己发送报文。该地址通常用来作为一个虚拟接口的地址(如 Loopback 接口)。实际发送的报文中不能使用环回地址作为源 IP 地址或者目的 IP 地址。
  • 全球单播地址:全球单播地址是带有全球单播前缀的 IPv6 地址,其作用类似于 IPv4 中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。

全球单播地址由 Global Routing Prefix(全球路由前缀)Subnet ID(子网 ID)Interface ID(接口标识)组成。

  • 链路本地地址:链路本地地址是 IPv6 中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。它使用了特定的本地链路前缀 FE80::/10(最高 10 bit 的值为 1111111010),同时将接口标识添加在后面作为地址的低 64bit。
  • 唯一本地地址:唯一本地地址也是一种应用范围受限的地址,它的前身是 SLA(Site-Local Address,本地站点地址)。由于本地站点地址存在诸多问题,目前已被废弃。

2)组播地址

IPv6 的组播与 IPv4 相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如,组播地址 FF02::1 表示链路本地范围的所有节点,组播地址 FF02::2 表示链路本地范围的所有路由器。

IPv6 组播地址的 Network Prefix(网络前缀)、Flag(标志)、Scope(范围)以及 Group ID(组播组 ID)。

  • 网络前缀:IPv6 组播地址的前缀是 FF00::/8。
  • 标志:长度为 4 bit,目前只使用了最后一个比特(前面 3 个比特必须设置为 0),当该比特值为 0 时,表示当前的组播地址是由 IANA 所分配的一个永久分配地址;当该比特值为 1 时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
  • 范围:长度为 4 bit,用来限制组播数据流在网络中发送的范围,该字段取值和含义的对应关系如图 A-5 所示。
  • 组播组 ID:长度为 112 bit,用以标识组播组。目前,RFC 2373 并没有将所有的 112 bit 都定义成组标识,而是建议仅使用该 112 bit 的最低 32 bit 作为组播组 ID,将剩余的 80 bit 都设置为 0。这样每个组播组 ID 都映射到一个唯一的以太网组播 MAC 地址。

2)任播地址

任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的报文将被发送给子网中路由意义上最近的一个网络接口。任播地址用于在为多个主机或者节点提供相同服务时提供冗余功能和负载分担功能。目前通过共享单播地址的方式来使用任播地址。将一个单播地址分配给多个节点或者主机,这样在网络中如果存在多条该地址路由,当发送者发送以任播地址为目的 IP 的数据报文时,发送者无法控制哪台设备能够收到该报文,这取决于整个网络中路由协议计算的结果。这种方式适用于一些无状态的应用,例如 DNS(Domain Name System,域名系统)等。

IPv6 没有为任播地址规定单独的地址空间,任播地址和单播地址使用相同的地址空间。目前任播地址主要应用于移动 IPv6。有一类特殊的任播地址叫作子网路由器任播地址。发送到子网路由器任播地址的报文会被发送到该地址标识的子网中路由意义上最近的一个设备。所有设备都必须支持子网路由器任播地址。在节点需要和远端子网上所有设备中的一个(不关心具体是哪一个)通信时使用子网路由器任播地址。例如,一个移动节点需要和它的“家乡”子网上的所有移动代理中的一个进行通信。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/3f7e2c8ccc0f569a50ad06eb1
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券