1.1 为什么发明IPV6?
- IPV4数量有限(2^32个),已经在2010年分配耗尽,需要想办法解决这问题
- 虽然后续使用NAT(包括后来的CG-NAT技术),暂时解决了这个问题,但是使用NAT难以做到真正的“端到端”通信,限制科技的发展和通信的速度(假如使用NAT穿透的话,也会影响效率)
- 且使用端到端通信也意味着需要很多的IP地址
- 综上主要原因就发明了IPV6
1.2 IPV6的特点
- 128bit,IP空间大(IPV4才32bit)
- 多等级层次有助于路由,提高因特网网络路由的效率和扩展性
- IPV6地址可以自动配置,更加便捷(无状态&有状态自动配置)
- 无状态:通过RS和RA和NS报文实现(作用类似:ARP request/reply/free后面会细说)
- 有状态:DHCPV6
- 无需NAT
注:意味着可以实现真正的端到端通信,同时也加快了设备通信的效率
- 不再使用广播和ARP技术
- IPV6中只有单播、组播、任波,不存在广播的形式,同时使用ICMP的RS/RA/NS代替ARP的request/reply/free
- 广播的弊端:只要三层设备能收到广播报文,则都要解封装数据链路层和网络层之后才能判断报文是否是发给自己的,这种行为会对设备的CPU造成负担;所以在IPV6中,很多时候是用组播来代替广播行使功能,因为较之广播,组播的目的MAC是根据组播的目的IP映射而成的,很多时候一个组播的目的IP对应一个协议进程(如OSPF为FF02::5),而接收设备可以根据自身对应接收该组播目的MAC的协议程序是否有开启来判断是否能处理这个报文,也就是说可以在解封装数据链路层时就可以报文是不是发给自己处理的,加快了设备处理报文的速率;
- ARP技术的:ARP技术实现了网络地址转换,这类技术在网络中是必不可少的,只是由于ARP技术依赖于广播同时自身安全性也不高,所以IPV6使用ICMPV6这个技术来取代他,行使相同的功能
- IPV6包头相比IPV4更少,对于设备来说处理更快,同时扩展性又更好‘
注:后面会详细介绍报文内容
- 更加有效的支持可移动性和安全性
3.2 IPV6地址分类
注:
- 单播地址(Unicast Address)
标识一个接口,目的地址为单播地址的报文会被送到被标识的接口- 组播地址(Multicast Address)
标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口- 任播地址(Anycast Address)
标识多个接口,目的为任播地址的报文会被送到最近的一个被标识接口,最近节点是由路由协议来定义的- IPV6没有定义广播地址
3.2.1 单播-可聚合全球地址
- 地址说明
类比于IPV4公网IP,也就是说该地址前面48位固定不变,可以使用的子网数量就有2^16,每个子网可使用的IP地址数量就有2 ^64- 可聚合全球地址的范围
2000:0000:0000:0000:0000:0000:0000:0000到
3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
由此看出,可聚合全球单播地址占IPV6总地址空间的1/8
3.2.2 单播-本地链路地址
注:接口ID在3.2.6会详细接收获取和配置的方法,这里不赘述
- 类比于IPV4之中的内网IP地址,为了实现公网和内网之间的隔离,保证内部设备不被外部访问,只实现内部互访的需求;
注:该类地址取代了单播中的本地站点地址(Site-Local Address)
3.2.4 组播-基本组播地址
注:“FF02”开头的这类IPv6组播地址,从“2”可以看出是“链路本地范围”的组播地址,也就是说需要同网段的设备才可以接收,所以自然源IP地址是“链路本地地址”
- 组播MAC映射的目的?
为了让接收到组播的设备更快判断是否是发给自己的报文(只需要解封装数据链路层就知道了)
3.2.5 组播-被请求节点地址
3.2.6 接口标识(接口ID)
上面地址组成中很多都涉及到一个东西——接口ID,啥是接口ID呢?
- 为什么电脑系统使用自动产生的方式来生成接口ID而不使用EUI-64的方式来生成?
因为使用EUI-64生成的IPV6地址(比如链路本地地址),作为源IPv6地址的话,很容易反向推理出设备接口的MAC地址,这对于设备来说存在安全风险,所以选择自动生成的方式来产生接口ID
4.1.1 ICMPv6基础
-
ICMPv6是IPv6中的最基础的协议之一
-
ICMPv6有两种的消息类型,差错消息和信息消息
4.1.2 ICMPv6报文结构即分类
- 10:设备收到报文之后,发现没有目的IPv6地址所在的网段的路由条目
- 11:设备收到报文之后,发现存在ACL来限制到目的IP的访问
- 13:设备收到报文之后,发现存在目的IPv6地址所在的网段的路由条目,但是不可达
- 20:沿途设备收到报文之后,发现需要转发报文的接口的IPv6 MTU值小于报文的容量,则会返回该提示,其中也包含了自身转发接口的MTU的数值,这也是获取PMTU的方法
- 30:沿途设备收到报文之后,发现“Hop Limit”字段已经为0,此时就会返回该提示,可以逐渐增大“Hop Limit”的数值来做到获取沿途所有的设备的IP地址的目的(类似TraceRoute用TTL字段来获取沿途设备的IP地址的方法)
5.1 PMTU(Path Maximum Transmission Unit)
设计PMTU的目的
源设备通过特殊方法获取沿途设备转发报文出接口的MTU大小,从而将报文按沿途设备中最小的MTU进行分片发送给目的设备,从而防止了分片过大的情况下沿途转发设备也需要分片的情况,可以让沿途设备更加高效的执行报文的转发功能,减轻沿途设备的负担;PMTU的特性
单向性——在需要获取PMTU的情况下,只需要获取转发出接口的MTU,类似COST的特性
被动性——并不是所有报文都会让源设备获取到沿途设备的所有MTU,如果源设备发送的报文的容量很小,根本触发不了沿途设备的ICMP差错消息门槛,则自然源设备也就获取不到这个设备的转发接口的MTU,不过这也说明设备发送的报文容量已经足够小不会让沿途设备再次分片,所以也不需要获取PMTU了;获取PMTU的本质
通过ICMPv6的差错消息类报文的20来获取沿途PMTU
5.2 NDP(Neighbor Discovery Protocol)邻居发现协议
设计目的:
替代ARP实现其获取邻居的接口MAC地址的功能,用邻居表代替ARP表,并且在此基础上提高了安全性和效率;
5.3 DAD(Duplicate Address Detect)重复地址检测
设计目的:代替免费ARP实现重复地址检测的功能
DAD机制使用ICMPv6的NS即NA消息实现
具体机制:
■ 当一个IPv6接口激活之后,或者当一个接口获得IPv6地址(无论是有状态或是无状态自动配置),都会启动IPv6地址的DAD机制,以确定该地址在链路上的唯一性;
■ 接口的IPv6地址在通过DAD之前称为“tentative地址”也即试验性地址。接口还暂时不能使用这个试验性地址进行正常的单播通讯,除非该IPv6地址通过DAD检测;
■ 节点向一个自己将使用的tentative地址所对应的Solicited-Node组播地址发送一个NS
如果收到了其他站点回应的NA,就证明该地址已经被使用,节点将不能使用该teneative地址通讯;
如果段时间没有收到NA回应,就自己发送NA,来宣告正式使用该地址;和IPv4联系
IPv4在接口配置地址之后也会启动ARP free来侦听链路中是否有其他的设备配置了相同的IPv4地址,如果收到回复则说明地址重复
5.4 无状态自动配置
- 概况
基本介绍
■ IPv6 Address Stateless AutoConfiguration
■ 在RFC2462中定义,是IPv6最有吸引力和最有用的新特性之一
■ 即插即用,IPv6地址无需手动配置
■ 主机、网络设备均可以支持一些配置说明
以上两条配置的区别在于,前者会主动周期性自动发送RA信息,而后者不会;不过两者收到RS报文之后都会回复RA信息;
- 报文分析
Cur hop limit
表示主机在经过该RA报文成功配置IPv6单播地址之后,发送的报文的IPv6网络层的hop Limit字段的数值为64Flags_M
当M位置零时(默认),表示接收设备不可以发送DHCPv6报文请求地址信息,只能使用该报文的前缀来自动生成IPv6单播地址
当M位置一时,表示接收设备可以发送DHCPv6报文请求地址信息
6.1 ICMPv6和ARP的对比
-
报文内容对比
注:在下面的ICMPv6协议中的 源IP地址,可以是 私有本地地址 / 可聚合全球地址 / 本地链路地址 -
报文类型 更新ARP表条件 免费ARP ①ARP表中已经存在报文中对应的target ip(sender ip)的表项 ARP_request ①Target_IP为自己 ARP_reply ①Target_IP为自己 ②ARP表中已经存在Sender的表项 - 思考?
1 为什么在已知目的IP的情况下,仍然要用被请求组播地址来作为NS报文目的IP?(就是取代ARP Request 报文的NS报文)
答:主要原因——达到二三层的统一性,因为二层封装缺少目的MAC,而IPv6系统不使用广播所以只能使用组播,所以IP也要用组播;而为了尽量加快接收到报文的设备对报文的判断效率,所以需要使用特殊的组播MAC,而特殊的组播MAC就需要使用特殊的组播IP来做映射,这个组播IP就是被请求节点的组播IP;
6.2 自动配置的分类
- 优势分析
■ 自动配置较手动配置更加便捷和高效
■ 无状态自动配置较有状态自动配置更简单,同时不需要对设备的性能做要求
■ 有状态自动配置由于使用DHCPv6,所以需要设备支持DHCPv6以及DHCP中继等,所以对设备的性能有要求,但是分配信息更加可视化也更容易管控
6.3 命令总结
- 设备即端口开启IPv6功能
- 查看状态的切换和报文收发
//查看邻居状态切换- RA-计时器设置
//不开启ra报文抑制
//ra报文发送间隔设置- 接口通过RA配置IP
//加上default可以将发送RA的路由器IP作为默认路由下一跳ip
- RS-flags字段设置
//M位置1
//O位置1- RS-flag字段设置
1、用于在没有配置 私有本地地址/可聚合全球地址 的情况下,用这个地址通过 无状态自动获取 的办法获取需要使用的地址,以及在未配置真实地址下的邻居的发现,和路由的发现;OSPFv3,使用本地链路地址作为源地址,减少了配置的复杂性,不需要手动配置IP地址再开启协议;同时,也是一种转发层和控制层IP的分离,也更方便IP管理;同时,使用链路本地地址,就意味着是个局部性的概念,可以控制OSPFv3的启用范围;
2、一种组播地址,用于在NS Request中作为目的IPv6地址使用,可以快速帮助接收设备判断是否是发送给自己的报文,较广播效率更高占用资源更少;因为,需要做到二层和三层地址的映射统一,既然二层的目的MAC未知,如果三层使用明确的单播地址,二层目的MAC将不好操作,所以最好的选择就是二层三层全部使用组播地址,且二层的组播地址是三层的被请求节点组播地址的映射地址;同时,中间设备(如交换机)处理组播的速度比未知单播的速度快,也是加快出整体的处理速度;
3、占用了较多的资源,需要解封装多层才可以判断报文是否是发给自己的,整体的处理速度也没组播快;ARP使用广播地址作为目的地址是一方面,同时ARP本身的安全性也不高,容易受到攻击;
4、通过跟踪邻居状态,来动态的管理ICMPv6的邻居表项;
5、通过RS报文中的M位和O位,来实现和DHCPv6的联动;M和O值 表示含义 M=0,O=0 通过无状态自动配置获取IPv6地址,通过手动配置等非DHCPv6方法获取其他配置 M=0,O=1 通过无状态自动配置获取IPv6地址,通过DHCPv6获取其他配置 M=1,O=0 通过DHCPv6获取IPv6地址, 通过手动配置等非DHCPv6方法获取其他配置 M=1,O=1 通过DHCPv6获取IPv6地址,通过DHCPv6获取其他配置 - 思考?