路由协议
IPv4初期对IP地址规划的不合理,使得网络变得非常复杂,路由表条目繁多。尽管通过划分子网以及路由聚集一定程度上缓解了这个问题,但这个问题依旧存在。因此IPv6设计之初就把地址从用户拥有改成运营商拥有,并在此基础上,路由策略发生了一些变化,加之IPv6地址长度发生了变化,因此路由协议发生了相应的改变。
与IPv4相同,IPv6路由协议同样分成内部网关协议(IGP)与外部网关协议(EGP),其中IGP包括由RIP变化而来的RIPng,由OSPF变化而来的OSPFv3,以及IS-IS协议变化而来的IS-ISv6。EGP则主要是由BGP变化而来的BGP4+ 。
IPv6地址配置协议
IPv6使用两种地址自动配置协议,分别为无状态地址自动配置协议(SLAAC)和IPv6动态主机配置协议(DHCPv6)。SLAAC不需要服务器对地址进行管理,主机直接根据网络中的路由器通告信息与本机MAC地址结合计算出本机IPv6地址,实现地址自动配置;DHCPv6由DHCPv6服务器管理地址池,用户主机从服务器请求并获取IPv6地址及其他信息,达到地址自动配置的目的。
一、无状态地址自动配置
无状态地址自动配置的核心是不需要额外的服务器管理地址状态,主机可自行计算地址进行地址自动配置,包括4个基本步骤:
1. 链路本地地址配置。主机计算本地地址。
2. 重复地址检测,确定当前地址唯一。
3. 全局前缀获取,主机计算全局地址。
4. 前缀重新编址,主机改变全局地址 。
二、IPv6动态主机配置协议
IPv6动态主机配置协议DHCPv6是由IPv4场景下的DHCP发展而来。客户端通过向DHCP服务器发出申请来获取本机IP地址并进行自动配置,DHCP服务器负责管理并维护地址池以及地址与客户端的映射信息。
DHCPv6在DHCP的基础上,进行了一定的改进与扩充。其中包含3种角色:DHCPv6客户端,用于动态获取IPv6地址、IPv6前缀或其他网络配置参数;DHCPv6服务器,负责为DHCPv6客户端分配IPv6地址、IPv6前缀和其他配置参数;DHCPv6中继,它是一个转发设备。通常情况下。DHCPv6客户端可以通过本地链路范围内组播地址与DHCPv6服务器进行通信。若服务器和客户端不在同一链路范围内,则需要DHCPv6中继进行转发。DHCPv6中继的存在使得在每一个链路范围内都部署DHCPv6服务器不是必要的,节省成本,并便于集中管理 [15] 。
IPv6路由协议
IPv4初期对IP地址规划的不合理,使得网络变得非常复杂,路由表条目繁多。尽管通过划分子网以及路由聚集一定程度上缓解了这个问题,但这个问题依旧存在。因此IPv6设计之初就把地址从用户拥有改成运营商拥有,并在此基础上,路由策略发生了一些变化,加之IPv6地址长度发生了变化,因此路由协议发生了相应的改变。
与IPv4相同,IPv6路由协议同样分成内部网关协议(IGP)与外部网关协议(EGP),其中IGP包括由RIP变化而来的RIPng,由OSPF变化而来的OSPFv3,以及IS-IS协议变化而来的IS-ISv6。EGP则主要是由BGP变化而来的BGP4+ 。

一、RIPng
下一代RIP协议(RIPng)是对原来的RIPv2的扩展。大多数RIP的概念都可以用于RIPng。为了在IPv6网络中应用,RIPng对原有的RIP协议进行了修改:
UDP端口号:使用UDP的521端口发送和接收路由信息。
组播地址:使用FF02::9作为链路本地范围内的RIPng路由器组播地址。
路由前缀:使用128位的IPv6地址作为路由前缀。
下一跳地址:使用128位的IPv6地址。
二、OSPFv3
RFC 2740定义了OSPFv3,用于支持IPv6。OSPFv3与OSPFv2的主要区别如下:
1. 修改了LSA的种类和格式,使其支持发布IPv6路由信息。
2. 修改了部分协议流程。主要的修改包括用Router-lD来标识邻居,使用链路本地地址来发现邻居等,使得网络拓扑本身独立于网络协议,以便于将来扩展。
3. 进一步理顺了拓扑与路由的关系。OSPFv3在LSA中将拓扑与路由信息相分离,在一、二类LSA中不再携带路由信息,而只是单纯的拓扑描述信息,另外增加了八、九类LSA,结合原有的三、五、七类LSA来发布路由前缀信息。
4. 提高了协议适应性。通过引入LSA扩散范围的概念进一步明确了对未知LSA的处理流程,使得协议可以在不识别LSA的情况下根据需要做出恰当处理,提高了协议的可扩展性。
三、BGP 4+
传统的BGP 4只能管理IPv4的路由信息,对于使用其他网络层协议(如IPv6等)的应用,在跨自治系统传播时会受到一定的限制。为了提供对多种网络层协议的支持,IETF发布的RFC2858文档对BGP 4进行了多协议扩展,形成了BGP4+。
为了实现对IPv6协议的支持,BGP 4+必须将IPv6网络层协议的信息反映到NLRl(Network Layer Reachable Information)及下一跳(Next Hop)属性中。为此,在BGP4+中引入了下面两个NLRI属性。
MP_REACH_NLRI:多协议可到达NLRI,用于发布可到达路由及下一跳信息。
MP_UNREACH_NLRI:多协议不可达NLRI,用于撤销不可达路由。
BGP 4+中的Next Hop属性用IPv6地址来表示,可以是IPv6全局单播地址或者下一跳的链路本地地址。BGP 4原有的消息机制和路由机制没有改变。
四、ICMPv6协议
ICMPv6协议用于报告IPv6节点在数据包处理过程中出现的错误消息,并实现简单的网络诊断功能。ICMPv6新增加的邻居发现功能代替了ARP协议的功能,所以在IPv6体系结构中已经没有ARP协议了。除了支持IPv6地址格式之外,ICMPv6还为支持IPv6中的路由优化、IP组播、移动IP等增加了一些新的报文类型 。
IPv6路由协议
1、静态路由
2、RIP
3、OSPF
静态路由
IPv6路由表如图所示:

IPv6路由协议在IPv4里面,动态路由的下一跳是对端地址。但是在IPv6里面做了相应的改变,IPv6里面除了有接口上的IPv6地址,还有链路本地地址,链路本地地址是由接口MAC地址经过EUI-64算法得出的,其地址是固定的。那为什么不用接口的IPv6地址呢,因为接口上的全局IP地址是可能发生变化的,所以使用固定不变的链路本地地址增加了路由表的稳定性。
IPv6的静态路由也没有没有多少改变,IPv6下一跳地址为IPv6地址
RIP
在IPv6里,RIP变为RIPng(next generation),是RIP协议针对IPv6网络做的修改和增强。它做了如下改变:
UDP端口号:521
组播地址:FF02::9
前缀长度:目的地址使用IPv6的前缀长度
下一跳地址:使用128b(16字节)的IPv6地址
源地址:使用链路本地地址FE80::/10
RIPng的工作机制和RIP基本上无区别
在IPv6里面不需要使用 network将网段宣告,只需要在指定的网络接口上时能RIPng。如下:
【RTA-G0/1】ripng 1 enable
注:在IPv6中,路由器会默认开启对RA信息发布的抑制,如果需要让PC自动获取IPv6地址,就需要收到取消抑制
OSPF
在IPv4中,OSPF使用v2版本,随着IPv6的发展,OSPF也更新到了OSPFv3。如下为V3和V2版本的比较:
相同点:
使用相同的SPF算法,根据开销决定路径
区域和Router ID概念没有变化,仍然采用32b
相同的邻居发现机制和邻居形成机制
相同的LSA扩散机制(洪泛)和老化机制
不同点:
OSPFv3是基于链路运行的,OSPFv2是基于网段运行的。在一条链路上可以由多个IPv6子网,OSPFv2版本的子网和网段的概念都被OSPFv3版本的链路所取代。由于OSPFv3不受网段限制,所以两个具有不同前缀的节点也能建立邻居关系(在OSPFv2版本中只能是同网段的节点才能建立邻居关系)。
OSPFv3在协议报文中添加了Instance ID字段,用于标记不同的实例。OSPFv3在一条链路上可以运行多个实例,路由器在接收到报文时,对该字段进行判断,只有报文是实例号和接口配置中的实例号相匹配,报文才会被处理,否则丢弃。
OSPFv3通过Router ID来表示邻接的邻居。(有人说在OSPFv2中也是通过Router ID来表示邻接的邻居啊,这又有什么区别呢?)在OSPFv2版本中,Router ID和IP地址是相关联的,但是OSPFv3中Router ID和IP地址并无关系,采用独立的32b标识。(当然有区别啊,别人都独立了,独立不香嘛)。所以在OSPFv3版本中,OSPF协议可以独立于网络层运行,大大提高协议的拓展性
OSPFv3取消的报文中的验证。那么是否就代表OSPFv3不够安全呢,其实不是呢,因为IPv6相比IPv4更加安全(底层更安全,何必采取多的验证呢)。IPv6的拓展头部中AH和ESP用来保证报文的完整性和机密性(IPSec中的两种通信保护协议)。
增加了两种LSA。Link-LSA和Intra-Area-Prefox-LSA。前者是用于为每一条链路生成一条LSA,只会在本地链路范围内传播。后者是用于描述路由上IPv6前缀消息的