IP v6地址
IP v6地址的长度为128 bit,用冒号分割为8段,每一段16 bit。每一段内用十六进制表示。 IP v6地址分为路由前缀和接口标识,各64位(4段)。路由前缀相当于IP v4的网络位,接口标识相当于IP v4的主机位。
IP v6冒分十六进制表示法:
格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16bit,以十六进制表示。
例如ABCD:EF01:2345:6789:ABCD:EF01:2345:6789。
这种表示法中,每个X的前导0可以省略。例如:
2001:0DB8:0000:0023:0008:0800:200C:417A可以表示为2001:DB8:0:23:8:800:200C:417A。
::: tip X:X:X:X:X:X:X:X 如上128位的IPv6地址被分为8组,每组的16位用4个十六进制字符(0~9,A~F)来表示,组和组之间用冒号(:)隔开。其中每个“X”代表一组十六进制数值。 :::
地址组成
地址前缀(相当于IPv4地址的网络位): IP v6地址的前缀不同意味着地址具有不同的功能。 IP v6前缀固定分配,可以通过手工配置或自动获取。
接口标识:相当于IP v4地址的主机位
手工配置: ipv6 address 2001:0:0:2::1/64 系统软件自动生成: 设备网关自动生成接口标识(地址带有特殊符号%) EUI-64规范生成: ipv6 address 2012:: 64 eui-64 (接口标识全0,依靠eui-64生成) EUI-64根据接口的MAC地址生成接口标识(重要) 1.将接口MAC中间插入fffe 2.将MAC地址第7bit从0置位为1(代表全局唯一) 3.将地址重新排列得到接口标识 *在使用eui-64生成接口标识时,要求前缀长度不能大于64,但可以小于等于64(否则eui-64无法生成接口标识),多余部分置0
如上,电脑网卡中显示的IP v6地址是软件自动生成的,IP v6地址中带有“%”的即为系统软件自动生成。
::: tip EUI64把6字节MAC地址分为两部分,在3、4字节的中间插入FFFE,并将第1字节的第7bit取反(0变1、1 变0)表示接口标识唯一。 :::
[AR1]ipv6
[AR1-GigabitEthernet0/0/0]ipv6 enable
[AR1-GigabitEthernet0/0/0]ipv6 address 2001:: 64 eui-64
如上,IP v6的地址2001::2E0:FCFF:FE1C:448A是在MAC地址00e0-fc1c-448a的基础上,第7bit由0改为1(1个十六进制数是4bit,即第7bit在MAC地址的第二个“0”上,改为1后,二进制由0000变为0010,十六进制为2,即MAC地址的第二个“0”变为2,该段MAC地址变为02e0),在MAC地址中间(即24bit后)添加FFFE,即为IP v6地址的接口标识。 完整IP v6地址有8组,即2001:0000:0000:0000:2E0:FCFF:FE70:423D。 ::: warning IP v6地址中有FFFE字段,说明该IP v6是通过EUI64生成的。 :::
IP v6地址分类
- 单播地址(Unicast)
特殊单播地址:
1. 0:0:0:0:0:0:0:0/128,一般使用“::/128”进行标识,表示设备还没有获取IP v6地址,对应IP v4地址的0.0.0.0(DHCP请求报文时的源地址) 2. 0:0:0:0:0:0:0:1/128,一般使用“::1/128”进行标识,表示设备本地环回地址,类似于IP v4的127.0.0.0/8
全球单播地址(GUA):相当于IP v4公网地址。
1.全球单播路由前缀由由提供商进行分配,目前分配前缀的前3bit都为001(十六进制的2或3) 2.全球单播地址取值范围:2000:: ----- 3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 3.全局路由前缀(45bit):由提供商指定给一个组织机构,一般至少为48bit 子网ID(16bit):组织机构根据自身网络需求划分子网 接口标识(64bit):用来标识一个设备的接口
唯一本地地址(ULA):相当于IP v4私网地址,网络前缀是FC00::/7。
1.固定前缀7bit,fc00:: /7 ,标识地址为唯一本地地址 2.第8bit为L bit取值只能为1,代表地址范围是本地(私网地址);值为0则为保留地址 3.唯一本地地址的取值范围:fc00:: ----- fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff(实际能用的地址段是fd00...到fdff...)
链路本地地址(LLA):有效范围为本地链路,网络前缀是FE80::/10,全球唯一。 IP v6链路本地地址类似于IP v4的169.254.0.0/16,只有链路通信意义。
1.只要在IP v6的节点开启IP v6,就会默认生成一个IPv6的链路本地地址(eui-64) 2.固定前缀10bit,FE80::/10,标识地址为链路本地地址 3.链路本地地址的取值范围:fe80:: ----- febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
::: tip
链路本地地址只在本链路上生效,不能被路由。*
链路本地地址使得IP v6链路直接具备本地通信的能力。* :::
[AR1-GigabitEthernet0/0/0]ipv6 address 2001::1 64 配置全球单播地址
[AR1-GigabitEthernet0/0/0]ipv6 address fc80::1 64 配置唯一本地地址
[AR1-GigabitEthernet0/0/0]ipv6 address fe80::1 64 配置链路本地地址
Error: The address entered is a link-local address when configure global unicast address.
[AR1-GigabitEthernet0/0/0]ipv6 address fe80::1 link-local
如上,全球单播地址和唯一本地地址都可以使用IP v6地址+前缀,配置链路本地地址时,不能加前缀,需要加link-local指定为链路本地地址,否则会报错。
- 任播地址(Anycast)
- 使用和单播地址一样的地址空间,并且实现移动通信和解决移动通信次优的问题。
- 同一个应用在不同服务器上可以使用任播地址,当用户访问服务时,通过最优路径找到最优服务器。
组播地址(Multicast)
1.组播地址 1.固定前缀8bit,ff00::/8,标识地址为组播地址 2.后4bit是flag字段,用于标识组播地址的分类 (前3bit固定为0,最后一个bit如果为0表示永久组播地址,如果为1表示临时组播地址) 3.再后4bit是scope字段,用于标识组播地址的生效范围 4.中间80bit保留为0 5.最后32bit是group id字段,用于标识组播组地址 2.被请求节点组播地址:类似于IP v4的广播地址所具有的功能(不是类似IP v4广播地址) 1.每一个单播地址(全球唯一、本地唯一、链路本地)都会存在一个对应的被请求节点组播地址 2.固定前缀为104bit,ff02::1:ff.../104,后续24bit通过IP v6单播地址的后24bit映射得到 (如单播地址为2001::1,则被请求节点组地址为ff02::1:ff00:1) 3.后24bit相同的单播地址,会使用同一个被请求节点组播地址 (如单播地址为2011::1,被请求节点组地址也为ff02::1:ff00:1) 3.组播MAC地址 前16bit固定为33:33(0011001100110011),后32bit从IP v6组播地址的后32bit进行映射
组播MAC地址:
被请求节点组地址后24位的映射:
[AR1-GigabitEthernet0/0/0]ipv6 address 2024::1234/64
[AR1-GigabitEthernet0/0/0]ipv6 address 2023::1234/64
[AR1-GigabitEthernet0/0/0]ipv6 address 2001::4567/64
如上,2023::1234/64和2024::1234/64两个地址的被请求节点组地址都是FF02::1:FF00:1234。链路本地地址也会生成被请求节点组地址。
- IP v6没有广播地址。
全球单播地址(GUA)
全球单播地址的前三位是固定的,已知的被分配的地址,相当于IP v4的公网地址。 001即第一位是2。常见的是2001、2002等。
唯一本地地址(ULA)
唯一本地地址是IP v6的私网地址,只在内网使用。 私网地址的网段为FC00::7,目前只使用了其中的FD00::/8网段。
链路本地地址
链路本地地址只在本链路内生效。 ::: tip 接口配置IP v6单播地址后,会自动生成对应链路本地地址,链路本地地址可以作为下一跳使用(OSPFv3的8类LSA),可以作为报文转发的源地址(ICMPv6的NS、NA报文)。 ::: 链路本地地址可以自动生成,也可以手动配置。
[AR1-GigabitEthernet0/0/0]ipv6 address auto link-local 接口自动生成链路本地地址
::: warning 接口上不写自动生成命令也会在接口配了单播地址以后自动生成链路本地地址,但是这时单播地址没了白动生成的链路本地地址也会消失,写自动生成命令生成的链路本地地址不受单播地址存在影响。 :::
[AR1]ipv6 route-static 2002:: 64 2001::2 目的网段写前缀即可
也可以配置缺省路由:
[AR1]ipv6 route-static :: 0 2001::2
使用链路本地地址作为下一跳时需要使用-i参数指定出接口: ::: warning 不同网段的IP v6地址也可以通过链路本地地址直接通信。 配置静态路由时如果将链路本地地址设为下一跳,需要指定出接口:
不同网段IP v6地址通过链路本地地址通信:
[AR1]ipv6 route-static 2002:: 64 gi 0/0/0 FE80::2E0:FCFF:FE3C:C56
[AR2]ipv6 route-static 2001:: 64 gi 0/0/0 FE80::2E0:FCFF:FE1C:448A
直连状态下,可以不配置接口地址,通过链路本地地址可以直接通信。
:::
环回地址,即 “::1” ,类似于127.0.0.1。 未指定地址:即 “::” ,未被分配的地址。
组播地址
组播地址前8位固定为FF。默认是FF00::/8。 上图中reserved为保留位,Group ID为组播组ID。 Flags位表示永久组播地址(0000)或者临时组播地址(0001)。 Scope位标识组播组的范围,1为节点本地,仅用于环回口;2表示链路本地,如FF02::1。 ::: tip 一般Flags值都为0。 一般Scope值都为2,原因是IP v6基于链路而非基于节点。 ::: 节点范围内常见的组地址: FF01::1 节点范围内的所有设备 FF01::2 节点范围内的所有路由器 链路范围内常见的组地址: IP v6 IP v4 FF02::1 类似于 224.0.0.1 ,链路范围内的所有节点 FF02::2 类似于 224.0.0.2 ,链路范围内的所有路由器 FF02::5 类似于 224.0.0.5 ,OSPFv3、DR-other监听来自FF02::5的报文 FF02::6 类似于 224.0.0.6 ,OSPFv3、DR、BDR监听来自FF02::6的报文 FF02::D 类似于 224.0.0.13 ,PIMv3组播hello报文的目的地址 FF02::C 类似于 224.0.0.18 ,VRRPv3 ,通告报文的目的地址 FF02::16 类似于 224.0.0.22 ,MLDv2,报告报文的目的地址(IP v4中为IGMP) (MLDv1版本相当于IGMPv2,MLDv2版本相当于IGMPv3)
IP v6组播MAC地址映射规则: 前16位固定,为3333,后32位从IP v6组播IP地址映射而来。 如FF02::1,48位MAC地址为:3333-0000-0001。
被请求节点组地址
用于NDP中重复地址中检测NS报文的目的地址。 当设备接口配置了单播地址后,会自动生成被请求节点组地址,并且该设备会自动加入被请求节点组地址所在的组播组。 如上,当一个节点具备单播地址之后,将自动生成一个被请求节点组播地址,被请求节点就会加入到对应的组播组中。被请求节点组地址前缀FF02::1:FF /104固定,后24位从单播地址(如上包含接口IP和链路本地地址)的后24位映射而来。 ::: tip 单播地址包括四个类型:全局单播地址、本地单播地址、兼容性地址、特殊地址。
- 全局单播地址:等同于IP v4中的公网地址,可以在IP v6 Internet上进行全局路由和访问。
- 本地单播地址:包括链路本地地址和唯一本地地址。 在IP v6中,本地单播地址就是指本地网络使用的单播地址,也就是IPV4地址中局域网专用地址。
- 兼容性地址:在IP v6的转换机制中还包括了一种通过IP v4路由接口以隧道方式动态传递IP v6包的技术。
- 特殊地址:包括未指定地址和环回地址。 未指定地址仅用于表示某个地址不存在。环回地址用于标识环回接口,允许节点将数据包发送给自己。 :::
任播地址
接口配置IP v6地址时,可以在最后加上anycast参数。 任播地址可以作为报文转发的源地址和目的地址,不能配置在主机上。 任播地址范围没有明确规定,直接使用单播地址的范围。
::: tip OSPFv3是通过router-id来标识邻居的,必须在进程下手工配置route-id。 :::
IP v6报文
IP v4基本报头20字节,加上option最大可以扩充到60字节。 上图中,Traffic Class和Flow Label表示流分类和流标签,用来做QOS。IP v6的扩展报头可以在后面无长度限制的添加。Hop Limit类似于TTL(防环)。
Next Header表示IP v6上层封装的协议或扩展报头: 0:逐跳选项拓展报头 60:目的选项拓展报头 43:路由报头 44:分段报头 50:认证报头 51:封装安全载荷报头 58:ICMPv6 89:OSPFv3
基本报头
基本报头提供报文转发的基本信息,被转发路径上所有路由器解析。
1.版本
2.流类别
3.流标签:可以用来标记特定流的报文,转发路径上的路由器可以流标签来进行区分流处理
流标签 + 源IP可以唯一确定一条流量
4.有效载荷长度:上层数据的长度
5.下一个报头
6.跳数限制
7.源IP
8.目标IP
IP v6和IP v4头部改进: 取消三层校验:协议栈中二层和四层已提供校验,IP v6取消IP的层校验,节省路由器处理资源。 取消中间节点的分片功能:中间路由器不再处理分片,只在产生数据的源节点处理,省去中间路由器为处理分片而耗费的大量CPU资源。 定义定长的IP v6报头:有利于硬件的快速处理,提高路由器转发效率。 安全选项的支持:IP v6提供了对IPSec的完美支持,如此上层协议可以省去许多安全选项。 增加流标签:提高QoS效率。
扩展报头
扩展报头必须按如上排列的顺序出现。 除目的选项报头外,每种扩展报头只能出现一次。 ::: warning 目的选项头最多出现2次,1次在路由报头之前,1次在上层协议数据报文之前,如果没有路由报头,则只能出现一次。 ::: 一个基本报头后可以封装很多个扩展报头,扩展报头后是上层数据。