????? 根本原因是:IPv4地址枯竭,IPv6是IPV4的升级版本
11.1.1 IPv6地址的优势:
- 地址空间足够大 128bit
- 支持即插即用
- 底层化地址结构:地址分配有一定的标准
- 相比于IPv4简化了报文的头部,提高了转发效率
- 安全特性:IPv6支持对IPv6报文进行认证(AH)和加密(ESP)
- 移动性:对于移动网络实时通信有较大改进,整个移动网络性能有比较大的提升。
- 增强Qos功能(Flow Label字段)。
11.1.2 IPv6的过渡技术
??????? IPv4地址枯竭,由于IPv6地址设计之初不兼容IPv4地址,因此出现了一些共存技术,通过共存技术,使得网络在IPv4向IPv6过渡的过渡过程中平缓演进。
- 隧道技术:通过隧道技术,使得IPv4孤岛在IPv6的网络中可以通信;或者IPv6孤岛可以在IPv4的网络中进行通信。
- 双栈技术:设备同时支持IPv4和IPv6技术
- 地址转换技术:将IPV4地址与IPV6地址之间进行互换(对报文头部进行整个更换),满足通信需求。NAT64
11.1.3 IPv6路由协议
- OSPFv3 新的协议,与OSPFV2不兼容,用于支持IPv6
- 基于链路
(层)运行 - 取消了LSA头部中的IP地址,与网络层解耦,实现拓扑与路由计算分离
- 新增LSA支持路由的传递
- ISIS协议(协议版本未变)
- 通过新增一个网络层标识符和多个(2个)TLV用于传递路由
- BGP协议(多协议BGP,协议本身版本未变)
- 通过增加支持支持IPv6地址簇
- 通过增加两个NLRI支持IPV6的路由发布和撤销。
- PIM协议(协议版本未变)
- 协议本来就是协议无关组播协议,仅源目IP地址为IPv6地址
11.2.1 IPV6地址格式
????? 128bit组成,分为网络前缀(IPv4的网络前缀)和接口标识(IPv4的主机位),通过冒分16进制表示,每16bit位一个小组,总共8小组。掩码表示网络前缀的长度,掩码仅能通过数值表示。
????? 例如:2001:0DB8:2345:CD30:1230:4567:89AB:CDEF/64
????? IPV6地址的三种格式:
- 首选格式:没有经过压缩的格式,每16bit以小组,共8组,没有简写
- 例如:2001:0DB0:0000:0001:0000:0000:0000:45ff/64
- 压缩格式:
- 每段前导0可以省略,但是如果该段为全0,则至少保留一个“0”字符;拖尾的0不能被省略。
- 一个或多个连续的段为全0时,可用“::”表示,整个IPv6地址缩写中只允许有一个“::”。
- 结果例如:2001:DB0:0: 1::45ff/64、或者2001:DB0:: 1:0:0:0:45ff/64
- 内嵌IPv4地址的格式,用于IPv4、IPv6相互兼容
- 地址的前96bit为IPv6地址格式,后32bit为IPv4地址格式。
- IPv6部分可采用首选或压缩格式,IPv4部分采用点分十进制格式。
- 例如:0:0:0:0:0:0:166.168.1.2/64。或者是::166.168.1.2/64
11.2.2 IPV6组成
- 前缀部分:注意前缀的长度(掩码)
- 2001::/16???? //用于IPV6网络的公网地址(已分配的IPV6地址的前三bit固定为001)
- 2002::/16???? //用于ipv6 6to4隧道专用地址
- FE80::/10??? ?//链路本地地址,用于链路本地通信使用,仅链路有效。多种协议使用该地址进行通信。
- FF00::/8????? //IPV6的组播地址
- ::/128??????? //未指定地址,与IPV4的0.0.0.0相似
- ::1/128?????? //环回口地址。
- 接口ID部分:手工、动态获取(DHCPv6、无状态自动配置EUI-64,系统自动生成(如Windows系统根据一定算法计算得到接口ID))
- 动态获取,EUI-64方式:该方式用于无状态自动配置,通过ICMPv6的报文通告前缀,自动根据EUI-64算法计算出接口ID,组合前缀和接口ID形成IPv6地址。
- EUI-64计算和IPV6生成(无状态自动配置)
- 48bit的MAC地址,前24bit是OUI,后24bit厂商指定,在OUI和厂商指定的部分中间插入FFFE
- 并将MAC地址的第7bit取反,为0的取值1,形成了64bit的接口ID
- 根据收到的64位前缀,组合成IPV6地址。
11.2.3 IPv6地址分类
- 任播地址:主要用于DNS和HTTP协议,将同一个单播地址配置在不同的设备上,并携带任播参数,终端访问任播地址选择最近的路由到达。当最近的出现故障,路由收敛后,再次选择剩余的设备中最近的任播地址进行访问。
- 组播地址:FF00::/8前缀,表示IPv6中接受相同数据的一组成员。与IPv4概念相同。
- 结构:FF+4bit Flags+4bit Scop字段+80bit预留字段+32bit组播组ID
- FF固定1B
- Flags:0000表示永久组播组地址,0001表示临时组播组地址。
- Scop范围:表示该组播地址的有效范围,0预留的,2表示链路本地范围(FF02::1),E表示全球范围(FF0E::1)
- 常用组播地址:
- FF02::2??? //所有路由器节点组播地址
- FF02::1??? //所有设备节点的组播地址
- FF02::5??? //所有启用了OSPFV3的接口的组播地址
- FF02::6??? //OSPFv3的DR的组播地址
- FF02::D?? ?//PIMv2协议的组播地址(224.0.0.13)
- IPv6组播地址对应的组播MAC地址
- 该组播MAC地址的前16bit固定为33:33
- 将IPV6组播地址的后32bit复制到组播MAC地址后32bit形成33:33+复制部分,形成IPv6地址对应的组播MAC地址。
- 被请求节点组播组地址:
- FF02::1:FF00:1?? //被请求节点组播组地址
- 格式:FF02::1:FF00/104 前缀固定+24bit内容(从单播/任播IPV6地址映射而来)
- 用于邻居发现(类似IPV4的 MAC地址解析)和重复地址检测(IPV4 免费ARP)
- 邻居发现:通过被请求节点组播组地址进行,类似ARP解析地址的过程。
- PC1和PC2直连进行通信,PC1封装NS报文(ICMPV6 135号)用于请求邻居PC2的MAC地址,报文内容:帧头+IPv6头部+ICMPv6报文
- IPv6报文中的原IP地址为自己的IPV6的地址,目的IPv6地址为被请求单节点对应的组播组地址(PC2对应的被请求节点组播组地址)。
- ICMPv6报文内的目标地址PC2的单播地址,源MAC地址是自己的MAC地址。
- 帧头中:源MAC地址是自己的MAC地址,目的MAC地址是被请求节点组播组地址对应的组播MAC地址(33:33+IPV6地址后32bit)
- 除被请求节点PC2收到外需要回复,其他节点收到后,发现被请求节点组播组地址不是自己的IP地址加入的被请求节点组播组地址,从而丢弃报文。PC2单播回复响应报文(NA报文)。单播相应中的ICMPv6报文中的目标地址是本端的IPv6地址(对端请求解析的地址)。
- 单播地址:
- 全球单播地址(GUA),类似IPV4的公网IP地址,已分配的IP地址前3bit位001(即第一个16进制字符为2或者3)
- 本地唯一地址LUA,类似IPV4的私网地址,具有全球唯一性,前缀FC::/7(分为了两个部分:FC::/8和FD::/8),目前使用的仅FD::/8,另一半用于以后扩展。
- 链路本地地址LLA:作用范围仅在本链路有效,格式:
- FE80::/10??? //其中前缀/10的bit保持不变+54bit 0+64bit接口ID
11.3.1 IPv6的报文格式
???? IPv6头部固定40B,包含以下字段:
- Version版本:4bit,取值6表示IPV6
- Traffic class流分类:8bit,对IPv6数据包进行标识的,类似IPv4 TOS字段
- Flow Label流标签:20bit,对IPv6报文进行标识,用于增强Qos功能
- Payload Length载荷长度:16bit,不包含IPv6头部,包含IPv6扩展头部和载荷部分的总长度。
- Next Header下一个头部:8bit,IPV6基本头部之后的数据应该交给谁处理,用于标识上层协议。为6表示上层协议是TCP,为17表示是UDP,为其他的表示是其他协议。每一个扩展头部也有对应的协议号。
- Hop Limit跳数限制:8bit,类似IPV4的TTL值,用于三层环路预防。
- 源IP地址:通信的源IPV6地址
- 目的IP地址:通信的目的IPv6地址
11.3.2 IPv6与IPv4的变化
???? 取消了一些字段:
- IPv6头部长度固定40B,因此取消了IPv4头部有的“头部长度”字段。
- IPv6的分片在源端进行,IPv4的包分配在任何设备上需要的时候进行。因此取消了IPv4“标识”、“标志”、“片偏移”字段,通过分片扩展头部携带根据需要携带该功能。
- 取消了IPV4中包含的头部校验和字段(2层和4层都已经校验,IPv6认为3层网络层不需要再重复校验)
- 取消了Option字段,Option字段中的源路由功能通过IPV6扩展头部根据需求携带。
- 取消了Padding字段,由于IPV6都不定长为40B,是4B的倍数,不需要填充到4B倍数,因此基本头部中取消该字段。
????? 增加了功能:
- 增加了Flow Label字段,用于增强QoS功能。
????? 修改了字段名称:
- 修改了字段名称,使得字段名称更加精确:Hop Limit、Next Header、Traffic class字段
11.3.3 IPv6扩展头部格式
??? IPV6扩展头部格式:
- 下一个头部字段:标识上层协议或者下一个扩展头部(如有)
- 扩展头部长度:扩展头部的长度不包含下一个头部字段
- 扩展头部数据:扩展头部的数据部分(不是载荷数据),可变长字段,通常通过填充字段使得扩展头部为8B的整数倍。
11.3.4 IPv6的扩展头部
- 逐跳选项头部:如果要携带该扩展头 Next Header取值为0,标识该下一个头部为该扩展头。每个路由器都需要处理的头部,比如:巨型净荷选型,允许IPv6报文的最大字段是65535B
- 目的选项头部:如果要携带该扩展头 Next Header取值为60,标识该下一个头部为该扩展头。目的选项扩展头部携带的只有目的地址可以处理的信息。
- 路由选项头部:如果要携带该扩展头 Next Header取值为43,标识该下一个头部为该扩展头。作用类似IPV4中的宽松源站路由,在该头部中携带一系列去往目的地需要经过的IPv6地址,根据其中Segment 字段将列表中的地址更新到基本IPV6头部中的目的地址字段,从而控制IPV6报文的转发路径。
- 分段选项头部:如果要携带该扩展头 Next Header取值为44,标识该下一个头部为该扩展头。通过Path MTU发现,发现转发源目IPv6地址的报文经过的路径上最小的MTU值,在源端进行IPv6分片,并携带该扩展头部,用于报文的重组。
- 认证选项头部(AH):如果要携带该扩展头 Next Header取值为51,标识该下一个头部为该扩展头。用于支持IPV6报文的认证,防止报文被篡改。
- 封装安全载荷头部(ESP):如果要携带该扩展头 Next Header取值为50,标识该下一个头部为该扩展头。用于支持IPV6报文的加解密
11.3.5 扩展头部出现的顺序
??? 如果IPv6报文中携带多个IPV6的扩展头部,则按照以下顺序出现:
??? 基本头部+逐跳选项+目的选项+路由选项+分段+认证+封装安全净荷+目的选项+上层协议头部
- 除了目的选项可以出现两次(一次在路由选项前,一次在上层协议头前),其他的扩展头部只能出现一次。
- 逐跳选项扩展头被沿途所有的路由器查看,其他的扩展头正常的转发都不会被查看,保证转发效率。