IPv6 地址类型详解

IPv6 的地址类型可分为三大类:单播(Unicast)、组播(Multicast)、任播(Anycast)。

一、单播(Unicast):one to one

单播地址用于一对一的连接,IPv6 单播地址有以下六种类型。

1、可聚合全球单播地址(Aggregate global unicast address)

由 IANA 分配的可在全球路由的公网 IP 地址。

目前已分配的前缀:2000::/3,占用了 12.5% 的 IPv6 地址空间。

2000:0000:0000:0000:0000:0000:0000:0000 -- 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

这个前缀中总共包含 8192 个 /16 的前缀。

目前实际用于 IPv6 因特网运作的前缀:2001::/16。

  • 2002::/16 为使用 6-TO-4 过渡机制的节点保留
  • 3ffe::/16 用于 6bone 测试目的的前缀

当在一个节点启用 IPv6,启动时节点的每个接口自动生成一个 link-local address。其前缀 64 位为标准指定的,其后 64 位按 EUI-64 格式来构造。

注意:在本链路上,路由表中看到的下一跳都是对端的 Link Local 地址,不是公网 IP 地址。

  • 前缀:FE80::/10
  • 范围:只能在本地链路使用,不能在子网间路由

为何需要 link-local?在一个接口可以配置很多 IPv6 地址,所以学习路由就有可能出现很多下一跳。所以出现 Link Local 地址唯一标识一个节点。在本地链路看到下一跳都是对端的 Link Local 地址。在网络重新编址过程中,节点和路由器的 Link Local 地址不会发生变化,可以很容易地做一个修改,不用担心网络不可达。

手工指定 link-local 地址:

R1(config-if)#ipv6 address FE80:0:0:0:0123:0456:0789:0abc link-local

3、本地站点地址(site-local address)

IPv6 的私网地址,就像 IPv4 中的私网保留地址一样,只占用到整个 IPv6 地址空间的 0.1%。

  • 前缀:FEC0::/10,其后的 54 比特用于子网 ID,最后 64 位用于主机 ID
  • 范围:只能在本站点内使用,不能在公网上使用

例如在本地分配十个子网:

1、FEC0:0:0:0001::/64
2、FEC0:0:0:0002::/64
3、FEC0:0:0:0003::/64
...
10、FEC0:0:0:000A::/64

本地站点地址被设计用于永远不会与全球 IPv6 因特网进行通信的设备,比如:打印机、内部网服务器、网络交换机等。

4、未指定地址(Unspecified address)

形式:0:0:0:0:0:0:0:0

表示地址未指定,或者在写默认路由时代表所有路由。

5、回环地址(Loopback address)

形式:0:0:0:0:0:0:0:1

同 IPv4 中 127.0.0.1 地址的含义一样,表示节点自己。

6、内嵌 IPv4 地址的 IPv6 地址(IPv4 Compatible Address)

IPv4 兼容的 IPv6 地址:用于在 IPv4 网络上建立自动隧道,以传输 IPv6 数据包。其中高 96bit 设为 0,后面跟 32bit 的 IPv4 地址。

0000:0000:0000:0000:0000:0000:206.123.31.2
0000:0000:0000:0000:0000:0000:ce7b:1f01

由于这种机制不太好,现在已经不再使用,转而采用更好的过渡机制。

映射 IPv4 的 IPv6 地址:仅用于拥有 IPv4 和 IPv6 双协议栈节点的本地范围。其中高 80bit 设为 0,后 16bit 设为 1,再跟 IPv4 地址。

0000:0000:0000:0000:0000:ffff:206.123.31.2
0000:0000:0000:0000:0000:ffff:ce7b:1f01

EUI-64 格式:扩展惟一标识符

在 IPv6 中,无状态自动配置机制使用 EUI-64 格式来自动配置 IPv6 地址。所谓无状态自动配置是指在网络中没有 DHCP 服务器的情况下,允许节点自行配置 IPv6 地址的机制。

EUI-64 的构造规则:根据接口的 MAC 地址再加上固定的前缀来生成一个 IPv6 的地址。工作原理:自动将 48bit 的以太网 MAC 地址扩展成 64bit,再挂在一个 64bit 的前缀后面,组成一个 IPv6 地址。

a、将 48 位的 MAC 地址从中间分开,插入一个固定数值 FFFE:

0050:3EE4:4C00 --> 0050:3EFF:FEE4:4C00

b、将第 7 个比特位反转,如果原来是 0,就变为 1,如果原来是 1,就变为 0:

0050:3EFF:FEE4:4C00 --> 0250:3EFF:FEE4:4C00

c、加上前缀:

FE80::0250:3EFF:FEE4:4C00

这就是一个完整的 IPv6 地址。

反转的原因:在 MAC 地址中,第 7 比特为 1 表示本地管理,为 0 表示全球管理;在 EUI-64 格式中,第 7 位为 1 表示全球惟一,为 0 表示本地惟一。

二、组播地址(Multicast)

在 IPv6 中没有广播,用组播来代替。

前缀:FF00::/8,占用了 0.38% 的 IPv6 地址空间。

     1111    1111       4bit           4bit
  |→固定值←||→标志←| |→范围←|

标志位为 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:在一个站点范围内的所有路由器

被请求节点的组播地址(solicited-node multicast address)

一种特殊的组播地址,对于节点或路由器的接口上配置的每个单播和任意播地址,都会自动生成一个对应的被请求节点组播地址。注意 link-local address 也会生成一个被请求节点的组播地址。

  • 工作范围:只在本地链路上有效
  • 特点 1:在本地链路上,被请求节点的组播地址组中通常只包含一个用户
  • 特点 2:只要知道一个节点的 IPv6 地址,就能计算出它的被请求节点的组播地址

作用:

1、在 IPv6 中,没有 ARP。ICMP 代替了 ARP 的功能,被请求节点的组播地址被节点用来获得相同本地链路上邻居节点的链路层地址。

2、用于重复地址检测 DAD,在使用无状态自动配置将某个地址配置为自己的 IPv6 地址之前,节点利用 DAD 验证在其本地链路上该地址是否已经被使用。

前缀:

FF02:0000:0000:0000:0000:0001:FFxx:xxxx/104
FF02::1:FFxx:xxxx/104

如何产生:被请求节点组播地址的前 104 位固定,将 IP 地址的后 24 位移下来填充到后面就可以了。

例如:

IPv6 --- 2001::1234:5678/64
被请求节点组播地址 --- FF02::1:FF34:5678/104
其中 FF02::1:FF 为固定部分,共 104 位

组播 IP 地址到 MAC 地址的映射

映射规则:组播 MAC 地址的前 16 位固定为 0x3333,将组播 IPv6 地址的后 32 位直接映射到组播 MAC 地址的后 32 位就可以了。

例:IPv6 地址为 FF12::1234:5678/64,对应的组播 MAC 地址为 3333:1234:5678,0x3333 为固定前缀。

例:所有节点的组播地址 FF02::0001,对应的组播 MAC 地址为 3333:0000:0001。

三、任播地址(Anycast address)

应用在 one-to-nearest(一到近)模式。

任意播是多个设备共享一个地址。分配 IPv6 单播(unicast)地址给拥有相同功用的一些设备,发送方发送一个以任意播为目标地址的包,当路由器接受到这个包以后,就转发给具有这个地址的离它最近的设备。单播地址用来分配任意播地址。对于那些没有配备任意播的的地址就是单播地址;但是当一个单播地址分配给不止一个接口的时候,单播地址就成了任意播地址。

例如:Mobile 方面的特性,移动设备漫游到其他区域,不必接入原始的接入点,只需要找到最近的即可。

必须的 IPv6 地址

一旦节点启用 IPv6,那么接口就会自动生成下列地址:

1、本地链路地址 2、回环地址 3、所有节点多播地址 FF02::1 4、如果是路由器,还会有 FF02::2 5、被请求节点的组播地址

如果接口配了一个 IPv6 的单播地址,还会产生被请求节点的组播地址。

《如何在帧中继中写 MAP》

注意:必须写两条 MAP,一条是所配 IPv6 地址的 MAP,一条是 link-local 地址的 MAP,否则会由于没有 MAP 映射导致无法 PING 通。

IPv6 的基本命令

R1(config)#ipv6 unicast-routing        在路由器上开启 IPv6 路由功能
R1(config-if)#ipv6 enable              在接口下启用 IPv6,会自动生成一个 link-local 地址
R1(config-if)#ipv6 address 2001::1/64  指定一个 IP 地址,配置后会自动生成一个 link-local 地址
R1(config-if)#ipv6 address FE80:0:0:0:0123:0456:0789:0abc link-local   手工指定 link-local 地址
R1(config-if)#ipv6 address 2001:0410:0:1::/64 eui-64   使用 eui-64 格式自动生成 IPv6 地址的低 64 位
R1(config-if)#ipv6 unnumbered          让本接口使用另一个接口的 MAC 地址生成源地址
R1(config-if)#ipv6 mtu 1500            配置接口的 MTU 值
R1(config-if)#ipv6 nd suppress-ra      关闭自动下发前缀
R2(config-rtr)#no split-horizon        关闭水平分割,注意 IPv6 的水平分割是在进程下关闭,不是在接口下
show ipv6 interface e0

显示 IPv6 接口的信息,包括 IPv6 地址、link-local 地址、加入的组播地址及被请求节点组播地址。

注意:串口和 loopback 口会借用以太口的 MAC 地址来生成 link-local 地址。




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • DNS 记录的类型及其功能
  • RFC 3581 中的 rport 例子详解
  • DHCP 八种报文
  • SIP 中 180 与 183 的区别
  • 我的大学