ipv6的概述
出现原因
- 弥补IPv4的资源紧张,移动技术和宽带技术的发展需要大量的IPv4,而且CIDR、VLSM、NAT等也不能从根本上解决问题
- IPv6为升级版,从ipv4的32bit升级为128bit,具有无限的地址空间,简化固定报头,引入扩展报头,地址自动获取,Qos标记,具有安全配置功能
ipv4与ipv6
IPv6地址
ipv6报文
ipv6报文=ipv6基本报头+ipv6扩展报头+上层协议数据段
ipv6基本报头如上
ipv6扩展报头
主要扩展报头
- Hop-by-Hop Options header(逐跳选项报头,协议0):数据包发往一个目的地时,要求中间路由器进行特殊处理(最多一次)
- Destination Options heaer(目的选项报头,协议60):用于移动IP,目的IP保持不变(最多可出现两次)
- Routing header(路由报头,协议43):用于强制数据包经过哪些路由器(最多一次)
- Fragment header(分段报头,协议44)(最多一次)
- Authentication header(认证报头,协议51)(最多一次)
- Encapsulating Security Payload header(封装安全有效荷载报头ESP,协议50)(最多一次)
IPv6支持多个扩展报头,且都含有下一个报头的字段
扩展报头格式
IPv6地址格式
表示形式
- 八个冒号隔开,十六进制表示,每段的首个0可以省略,连续多个段0可用“::”隔开,并且只能有一个
IPv6组成
IPv6地址=前缀+接口标识
- 前缀:相当于网络位,自动获取,RS(FF02::2)请求,RA(FF02::1)回复(该报文后面详细介绍)
- 接口ID:产生方式有仨个
- EUI-64:将mac地址分为前24位和后24位,中间插入FFFE,转为64位,并将第一段的第七位(U/L位)取反生成EUI-64
- 手工配置
- 软件自动生成
IPv6地址分类
单播地址----标识一个接口
全球单播地址:
指用于internet上的地址,类似于IPv4的“公有”IP地址,如202.202.1.1/30。而一个IPv6地址是由提供商提供的48bit的路由前缀、组织机构使用16bit划分子网以及64bit接口标识符组成全球唯一,前三位固定001,范围为2000::/3—3FFF::/3,配置方法有手动配置、配置前缀(IPv6 add 2001::/64 eui-64)、DHCPv6获取、终端无状态地址获取。其中:
- 2001::/16为公有地址
- 2002::/16用于过渡机制地址(6to4隧道)
- 3FFE::/16用于6bone测试
站点本地地址:
类似于IPv4环境所定义的“私有IP地址”,如10.0.0.0/8.,172.16.0.0/16-172.31.255.255/16和192.168.0.0/16。不咋用,常用的是本地唯一地址:FC::/7。对于IPv6本地站点地址的配置,必须通过DHCPv6进行地址的分配、无状态的前缀公告、或者手工的进行输入,本地站点地址是由固定10bit地址前缀FEC0::/10、54bit子网标识以及64bit的扩展MAC地址组成。不咋用,常用的是本地唯一地址:FC::/7
链路本地地址:
类似于IPv4中APIPA(Automatic Private IP Addressing,自动专用IP寻址)所定义的地址169.254.0.0/16。配置方法有:只要配置了单播就会产生、配置自动产生(IPv6 add auto link-locl)、手动配置(IPv6 add xxxx link-local)。
IPv6本地链路地址的前缀为固定的FE80::/10,单一链路节点间用,不跨路由器。
特殊地址—回环地址
类似于IPv4地址127.0.0.1,其作用在于测试本地设备的TCP/IP协议簇是否被正确安装,而通过该地址发出的数据是不会经过网络传输。而IPv6的环回地址全格式为0000:0000:0000:0000:0000:0000:0000:0001,压缩格式为==::1/128==,虚拟地址。
未指定地址
指没有给任何接口分配单播地址,如当IPv6主机的IPv6地址是需要从DHCPv6获取,那么当IPv6主机向DHCPv6服务器发起地址请求或者由DAD(地址冲突检测)发出一个数据包时,所使用的源地址就为“IPv6未指定地址”,而该地址的压缩格式为::。
组播地址----标识多个接口
类似于IPv4组播地址224.0.0.0/3,其作用是源节点发送单个数据包,而该数据包可以到达多个目标地址,前八位固定为FF,一个组播地址是由前缀(FF00::/8)、标志字段(4bit,前三位0,后一位为0时表示该组播地址为永久地址/知名,为1时表示临时/本地)、范围字段(Scope,定义地址范围,0/F表示预留,1表示节点本地范围,2表示链路本地,5表示站点本地)、组播组ID(112bit,最低32位标识组ID)。分为FF00::/8和被请求节点组播地址,
- 常见组播地址
- 节点-本地范围:
- FF02::1/8为所有节点组播地址(用于RA请求前缀)
- FF02::2/8所有路由器组播地址(用于RS回复)
- 链路本地范围:
- FF02::1/FF02::2
- FF02::5/FF::6:OSPF环境中IPv4的组播地址为224.0.0.5/6
- FF02::9:RIP路由器环境中IPv4组播地址为224.0.0.9
- 站点本地地址:
- 任意有效组播地址
- 被请求节点组播地址------solicited-node multicast address
- 有多少个单播地址就有多少个组播地址
- 一种特殊的组播地址,对于节点或路由器的接口上配置的每个单播和任意播地址,都会自动生成一个对应的被请求节点组播地址。注意link-local address也会生成一个被请求节点的组播地址。
- 工作范围:只在本地链路上有效,前缀为 FF02::1:FFxx:xxxx/104
- 特点 :在本地链路上,被请求接点的组播地址中只包含一个用户,只要知道一个节点的ipv6地址,就能计算出他的被请求节点的组播地址
- 作用:1、在IPV6中,没有ARP。ICMP代替了ARP的功能,被请求节点的组播地址被节点用来获得相同本地链路上邻居节点的链路层地址(地址解析)
2、用于重复地址检测DAD,在使用无状态自动配置将某个地址配置为自已的IPV6地址之前,节点利用DAD验证在其本地链路上该地址是否已经被使用。
- 如何产生:被请求节点组播地址的前104位固定,将IP地址的后24位移下来填充到后面就可以了
例如:IPv6—2001::1234:5678/64
被请求节点组播地址—FF02::1:FF34:5678/104
任播地址
任意播地址,标识多个接口, 报文会被送到最近的一个被标识的接口 ,用来在多个主机或节点提供相同服务时提供冗余备份的功能
主机一般具有的地址
- 地址表基本有:链路本地地址、单播地址、环回地址、被请求节点组播地址(单播地址个数+链路本地地址,如果单播地址是由EUI-64产生,则对应只有一个被请求节点组播地址)、所有节点组播地址
- 三层接口环境:所有路由器组播地址
- OSPF环境下:FF02::5/FF::6
- RIP环境下:FF02::9
IPv6基本协议
ICMP协议
由于IPv6没有广播地址,所以没有ARP协议,所以ICMPv6融合了ICMPv4和ARP功能,Next Header值为58(类似于ipv4中的协议号,ICMPv4协议号为1),基本用法与icmpv4一致,实现的功能有邻居发现、PathMTU发现机制、无状态地址自动配置、重复地址检测,下面分别介绍
icmp协议报文格式
消息类型
- 错误消息:是在网络传输和数据包处理过程中,发现异常后,通知源节点的。Type字段值为
-
1:表示目的地不可达,原因如下
-
2:数据包过大:当数据包在传递过程中,数据包的大小超过了链路的MTU值,路由器会向源节点发送此消息,code值默认为0。
-
3:超时:包括超出跳数限制(code值为0),ipv6数据包在分片重组时超时(code值为1)
-
4:参数问题:当发现IPv6包头及扩展包头的参数有问题时,此消息被发送,原因如下
- 通告类消息 ,code字段默认为0,比正常格式多了识别号和序列号
- 128:Echo Request
- 129:Echo Reply
- 用于发现邻居
- 133:路由器请求(RS)
- 134:路由器公告(RA)
- 135:邻居请求(NS)
- 136:邻居公告(NA)
- 137:重定向
用于多播侦听发现协议
130:多播侦听查询
131:多播侦听报告
132:多播侦听退出
143:多播侦听报告v2
邻居发现协议NDP
实现功能有四个
1,无状态自动配置(RS/RA)
设备自动配置全球单播地址时,发送RS(router Solicitation)请求前缀(后缀一般由EUI-64生成),回复RA(Router Advertisement)报文,该报文就包括前缀和其他参数,还需要做地址重复检测,一般RA也会周期组播发送,让其他设备知道自己的存在
- undo ipv6 nd ra halt//nd指的时NDP协议,配置意思为在下发地址的设备接口下,启动IPv6后,开启RA通告,一般默认抑制
- ipv6 add auto global default//在接收地址设备的接口下,开启自动获取
2,重复地址检测DAD(NS/NA)
ipv4环境冲突检测发送三次,而ipv6每个地址只发送一次
首先,获取到地址的节点会发一个DAD的NS报文,源IPv6地址为未指定地址( :: ),目的地址为节点上配置的IPv6地址对应被请求节点组播地址。FF02::1:FF为被请求节点的前缀,组播地址,82:128E为请求地址的后24位,若未收到NA报文的回复,则地址不重复,如图
如果收到NA回复,则表示地址冲突,并且源地址为请求的地址,目的地址为所有节点组播地址FF02::1,如图
3,地址解析(NA/NS)
做ping时,AR1会以2000::2作为源地址,目标地址为2000::1的被请求节点组播地址 ff02::1:ff00:1。然后将AR1的MAC地址携带在ICMPc6的Option中。在ICMPv6中还会携带Target Address:2000::2,这个用来防止在广播网中有多个前缀不同,最后24bit相同,而造成的混乱。携带这个字段后,当主机收到这个报文后,会首先检查该字段是否是自己的IPv6地址,如果是,则接收并单播回应NA报文。如果该字段的地址不是自己的IPv6地址,则丢弃。dis ipv6 neighbors查看邻居缓存
4,PathMTU协议
- 当数据包的MTU值大于路径上路由器接口的MTU值时,会发送错误ICMPv6消息,不大于则通过,最小为1280bytes,最大由链路层决定,以太网时最大为1500
IPv6路由协议
IPv6路由基础
IPv6报文转发
- 基本结构:路由表、邻居缓存表(类似于ARP缓存表,同一链路的邻居二三层地址间的对应关系)
- 根据目的地址以路由表为基础,获得下一跳三层地址和出接口、通过地址解析获取链路地址
IPv6路由来源
链路层直接发现(即直连)、静态路由、动态路由(RIPng、OSPFv3、ISIS、BGPv4+),下面分别介绍
IPv6静态路由
ipv6静态路由中,点到点网络中既可以跟下一跳,也可以跟出接口,如果在nbma网络中,没有ARP代理,所以指定下一跳为出接口(时)+链路本地地址(与ipv4基本相同,ipv4的静态,下一跳为出接口时,只能是点到点网络)
- IPv6 routing-static xxxx 64 (出接口+)下一跳
- 默认路由:ipv6 routing-static ::0 下一跳
ipv6动态路由
RIPng
- 与ripv2基本相同,都以跳数作为度量值,16跳不可达,但是配置更简单
- 特性:距离矢量路由协议,UDP封装,端口号为521(RIPv2端口号为520),目的地址为FF02::9(RIPv2的组播地址为224.0.0.9),源地址为链路本地地址,利用水平分割和跳数无限大来防止环路,安全性依靠ipv6扩展报头的ESP或AH
- 配置:先启用,ripng;进入接口,ripng 1 enable;即在该接口下已经通告,一定要注意进程1 。
OSPFv3
- OSPFv3在运行机制和算法上基本没啥变化,协议号89,传输层协议
- 重新被定义的是
- OSPFv3的SPF算法,先算理由拓扑,后得路由计算
- 数据包和LAS格式:
- OSPFv3 定义了一些新的lsa,并规范了lsa的洪泛范围
链路本地范围(Link-local Scope) Link-LSA(新增)
区域范围(Area Scope) Router-LSA, Network-LSA, Inter-Area-Prefix-LSA, Inter-Area-Router-LSA, Intra-Area-Prefix-LSA(新增)
自治系统范围(AS Scope)AS-External-LSA
使用Link-LSA与Intra-Area-Prefix-LSA发布前缀
一个链路范围内的IPv6前缀信息由link-LSA负责通告;
intra-area-prefix-LSA负责把IPv6前缀公告到本区域范围内
Router-LSA和Network-LSA只是用于传达网络拓扑信息
- 编址性语义取消:只保留协议运行必须的核心内容。比如,Router-LSA和Network-LSA中不再包含网络地址,而只用于传递拓扑信息;LSA的Link State ID依然保留32位长度的IPv4地址格式,但只是一个编号,不再包含地址信息;邻居路由器,包括DR和BDR,都是Router ID来标识。这些保证了OSPFv3协议能够独立于网络协议运行。
- 认证机制取消(本身不提供认证,通过ipv6的扩展头ESP/AH认证,而ospfv2支持认证)、
- 基于链路而非子网(ospfv2基于子网,即同一链路所有节点必须在同一个子网内,而基于链路则不需要具有相同的前缀)、
- 五种协议包通过type字段来标识
- Hello:发现邻居,选举DR和BDR,并维持邻接关系
- DBD (Database Description):描述链路状态数据库的内容
- LSR (Link State Request):向邻居请求所需要的LSA
- LSU (Link State Update):LSA的传递最终是通过LSU来完成的
- LSAck (Link State Acknowledgment):LSAck对接收到的LSU中的LSA进行确认
- 组播发送地址:FF02::5/FF02::6
- LSA种类
- 配置:ospfv3 ; router-id xxxx; 进入接口,ospfv3 1 area 0
IPv6过渡技术
双协议栈技术
设备上同时使用ipv4和ipv6协议,是其他过渡技术的基础
- 优点:互通性好,易于理解,简单
- 缺点:对每个IPv4节点都要升级,成本较大,没有解决IPv4地址紧缺问题
隧道协议(Tunnel)
将ipv6协议封装在ipv4中,ipv6网络间穿过ipv4网络进行通信
- 优点:利用现有网络,不需要升级
- 缺点:效率低、额外配置隧道
主要隧道技术
- 手动隧道技术:GRE隧道、手工隧道
- 自动隧道技术:6to4隧道、ISATAP隧道
- ipv6 over MPLS
GRE隧道
两点间的逻辑隧道,ipv6为乘客协议,gre为承载协议,两端均为双栈设备,必须手工配置起点终点
根据实验,有IPv4和IPv6两个环境,通过相关配置实现两端的IPv6环境互通
- 对各个设备先进行配置ip地址,各网段如图所示Int g0/0/x; ip address xxxx 24;Ipv6; int g0/0/x; ipv6 enable; ipv6 address xxxx 64;(IP v6的配置有手工配置、无状态自动获取等方法,此处采用手动配置。在配置时容易忽略在全局下和接口下都要开启ipv6协议)
- 各环境内部互通,在r2/r4上做静态,使得ipv4环境可以通信ip routing-static 目的网段 24 下一跳
- 要实现两个ipv6环境的互通,可以在r2/r4之间做隧道配置,隧道协议可以将ipv6协议封装在ipv4协议中,也就实现了Ipv6通过ipv4环境实现通信,这里先使用GRE隧道协议,特点就是需要手工配置起点和终点Int tunnel 0/0/0; tunnel-protocal gre; source xxxx; destination xxxx; ipv6 enable;Ipv6 add xxxx 64
- 经过上面配置,在r2/r4上可以ping通对端的ipv6地址,即隧道创建成功。接下来就是做路由协议使得r1/r2/r4/r5上都有对端的路由信息,这里选择ripng协议,R2/r4:ripng; int tunnel 0/0/0; ripng 1 enable; int g0/0/x; ripng 1 enable;R1/r5:ripng; int g0/0/x; ripng 1 enable4. 此时在r1/r2/r4/r5上都可以看到所有的路由条目,可以实现两端ipv6环境的互通
6to4隧道
-
6to4地址:2002:abxxxx:xxxx:xxxx:xxxx:xxxx,其中abcd为ipv4公有地址的十六进制表示,这个嵌入的ipv4地址可以用来查找6to4隧道终点
-
IPv6报文被包含在IPv4报文中作为IPv4的载荷,如果数据的目的地址或者下一跳为6to4地址,根据6 to 4地址自动创建隧道。
如果报文的目的地是6to4地址,则从目的ip中提取ipv4地址,如果目的地不是6to4地址,但下一跳是6to4地址,则从下一跳中提取(6to4中继)
目标网络可以是6to4网络(内部节点使用6to4地址),也可以是普通的v6网络(非6to4网络)
-
小实验
-
[R1] ipv6 #全局激活IPv6
[R1] interface GigabitEthernet0/0/0
[R1-GigabitEthernet0/0/0] ipv6 enable #激活接口的IPv6功能
[R1-GigabitEthernet0/0/0] ipv6 address 2010::1 64 #配置IPv6全局单播地址
-
使用的另一个隧道协议就是6to4,区别就是选择6to4协议后,需要手动配置6to4地址(配置该地址规则就是2002:abxxxx,其中abcd就是将ipv4地址写成十六进制而来),配置完地址后,需要配置的就是起点,重点通过配置ipv6静态来通告,这里的下一跳就是tunnel口,配置如下:
[R1] Interface tunnel 0/0/0
[R1-Tunnel0/0/0] tunnel-protocol ipv6-ipv4 6to4
[R1-Tunnel0/0/0] ipv6 enable
[R1-Tunnel0/0/0] source 200.1.1.1
[R1-Tunnel0/0/0] ipv6 address 2002:C801:0101::1 64
[R1] Ipv6 route-static 2002:C802:0202:: 64 tunnel 0/0/0
-
6to4隧道协议实验中选择的是静态的方法来实现路由条目的收集R7/r9:Ipv6 route-static 2020:: 64 2002:C802:0202:: 2(注意这里的下一跳为tunnel对端的地址),R6/r10:ipv6 routing-static 2001:xx:: 64 下一跳
ISATAP技术
Intra-Site Automatic Tunnel Addressing Protocol
与6to4地址类似,ISATAP地址中也有IPv4地址存在,它的隧道建立也是根据内嵌IPv4地址来进行的
ISATAP 隧道地址有特定的格式:Prefix(64bit):0:5EFE:ip-address
协议转换技术
具备 IPv4和IPv6协议转换功能的转换设备,修改协议报文头,使IPv4网络与IPv6网络能够互通