http://xuanbo.blog.51cto.com/499334/200447
3.1 IPv6 OSPFv3
3.1.1 OSPFv3 VS OSPFv2
OSPF路由协议是链路状态型路由协议,这里的链路即设备上的接口。链路状态型路由协议基于连接源和目标设备的链路状态作出路由的决定。链路状态是接口及其与邻接网络设备的的关系的描述,接口的信息即链路的信息,也就是链路的状态(信息)。这些信息包括接口的IPv6前缀(prefix)、网络掩码、接口连接的网络(链路)类型、与该接口在同一网络(链路)上的路由器等信息。这些链路状态信息由不同类型的LSA携带,在网络上传播。
路由器把收集到的LSA存储在链路状态数据库中,然后运行SPF算法计算出路由表。链路状态数据库和路由表的本质不同在于:数据库中包含的是完整的链路状态原始数据,而路由表中列出的是到达所有已知目标网络的最短路径的列表。
OSPF协议是为IP协议提供路由功能的路由协议。OSPFv2(OSPF版本2)是支持IPv4的路由协议,为了让OSPF协议支持IPv6,技术人员开发了OSPFv3(OSPF版本3),OSPFv3由RFC2740定义。
无论是OSPFv2还是OSPFv3,OSPF协议的基本运行原理是没有区别的,然而,由于IPv4和IPv6协议意义的不同,地址空间大小的不同,它们之间的不同之处也是必然存在的。
相似之处
Ø
路由器类型相同
²
包括内部路由器(internal router)、骨干路由器(backbone router)、区域边界路由器(area border router)和自治系统边界路由器(autonomous system boundary router)。
Ø
支持的区域类型相同
²
包括骨干区域、标准区域、末节区域、NSSA和完全末节区域。
Ø
路由计算方法相同
²
都使用SPF算法。
Ø
DR选举机制相同
²
DR和BDR的选举过程相同。
Ø
网络类型相同
²
包括点到点链路、点到多点链路、多路访问、NBMA链路和虚拟链路。
Ø
邻居和邻居形成机制相同
²
OSPF 路由器启动后,便会通过OSPF接口向外发送Hello 报文,收到Hello 报文的OSPF 路由器会检查报文中所定义的参数,如果双方一致就会形成邻居关系。形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定,只有当双方成功交换DBD 报文,交换LSA 并达到LSDB 的同步之后,才形成真正意义上的邻接关系。
²
LSA的传播和老化机制相同。
Ø
基本数据包类型相同
²
都使用Hello、DBD、LSR、LSU和LSA。
不同之处
Ø
术语不同
²
在OSPFv3中,用"链路(link)"取代了OSPFv2中的"网络(network)"或"子网(subnet)"的概念。
Ø
路由进程运行方式不同
²
OSPFv3进程运行在链路上,
²
OSPFv2进程运行在子网上。
Ø
链路多实例复用
²
OSPFv2不支持链路多实例复用
Ø
Router ID唯一标识邻居
²
在OSPFv2中,当网络类型为点到点或者通过虚连接与邻居相连时,通过Router ID来标识邻居路由器,当网络类型为广播或NBMA时,通过邻居接口的IP地址来标识邻居路由器。
²
OSPFv3取消了这种复杂性,无论对于何种网络类型,都是通过Router ID来唯一标识邻居。
Ø
认证方式不同
²
OSPFv3协议自身不再提供认证功能,而是通过使用IPv6提供的安全机制来保证自身报文的合法性。所以,OSPFv2报文中的认证字段,在OSPFv3报文头中被取消。
²
OSPFv2自身提供认证功能
Ø
报文不同
²
OSPFv3报文封装在IPv6报文中,每一种类型的报文都是以一个16字节的报文头部开始。
²
OSPFv3的报文头、Hello、DBD以及LSR报文中的字段与OSPFv2有差别。
Ø
LSA类型不同
²
与OSPFv2相比,OSPFv3新增了Link LSA和Intra Area Prefix LSA。
Ø
LSA的泛洪范围
²
LSA的泛洪范围已经被明确地定义在LSA的LS Type字段,目前,有三种LSA泛洪范围。
²
链路本地范围:LSA 只在本地链路上泛洪,不会超出这个范围,该范围适用于新定义的Link LSA。
²
区域范围:LSA 的泛洪范围仅仅覆盖一个单独的OSPFv3 区域。Router LSA、Network LSA、Inter Area Prefix LSA、Inter Area Router LSA 和Intra Area Prefix LSA 都是区域范围泛洪的LSA。
²
自治系统范围:LSA 将被泛洪到整个路由域,AS External LSA 就是自治系统范围泛洪的LSA。
Ø
支持对未知类型LSA的处理
²
在OSPFv2中,收到类型未知的LSA将直接丢弃
²
OSPFv3在LSA的LS Type字段中增加了一个U比特位来位标识对未知类型LSA的处理方式:
²
如果U 比特置1,则对于未知类型的LSA 按照LSA 中的LS Type 字段描述的泛洪范围进行泛洪;
²
如果U 比特置0,对于未知类型的LSA 仅在链路范围内泛洪。
Ø
Stub区域的支持
²
由于OSPFv3支持对未知类型LSA的泛洪,为防止大量未知类型LSA泛洪进入Stub区域,对于向Stub区泛洪的未知类型LSA进行了明确规定,只有当未知类型LSA的泛洪范围是区域或链路而且U比特没有置位时,未知类型LSA才可以向Stub区域泛洪。
Ø
Option字段不同
²
在OSPFv2中,Option字段出现在每一个Hello报文、DD报文以及每一个LSA中。
²
在OSPFv3中,Option字段只在Hello报文、DD报文、Router LSA 、Network LSA、Inter Area Router LSA以及Link LSA中出现。
Ø
LSA报文格式不同
3.1.2 OSPFv3协议数据结构
OSPFv3协议直接运行在IPv6上,因此,OSPFv3的数据由IPv6报文携带。在IPv6报文头的'下一个报文头'字段中,用协议号89代表该数据包中携带的是OSPFv3的数据。
紧跟着IPv6报文头的后面是OSPFv3的报文首部,其格式如下图所示。
OSPFv3首部报文结构:
如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/d8243a002525b4e1d51f6eccd0e68de0.jpeg)
其中:
Ø
Version——代表OSPF的版本号,其值为3。
Ø
Type ——代表OSPF数据报类型。OSPF数据报的类型包括:
n
Hello包,类型代码为1。
n
DBD,类型代码为2。
n
LSR,类型代码为3。
n
LSU,类型代码为4。
n
LSAck,类型代码为5。
Ø
Packet length——以字节为单位的OSPF数据报的长度,包含报头部分。
Ø
Router ID——发送该数据包的路由器ID号。
Ø
Area ID ——该数据报所属的区域。
Ø
Checksum——整个OSPF数据报的校验和。
Ø
Instance ID——实例标志号。
Ø
Reservation——OSPFv3报头的最后8比特保留,值总为0。
下图是使用ethereal采集到的报文。
![](https://i-blog.csdnimg.cn/blog_migrate/a2ae64931fd7e45dcd7f151b28fbcb2b.jpeg)
Hello报文结构
如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/2c4bd1cfddd44631a0479615b1897fa7.jpeg)
Ø
Interface ID
——接口标志符。路由器的每一个接口都有一个唯一的标志符。
Ø
Router priority
——路由器优先级。路由器根据该值选举DR/BDR。
Ø
Options
——该24比特字段出现在Hello包、DBD和某些LSA中,OSPF路由器使用该字段实现某些与其他路由器通信的能力(详见RFC2740)。
Ø
Hello interval
——发送Hello包的周期时间。
Ø
Router dead interval
——邻居路由器认为该路由器的失效时间。
Ø
Designated router ID
——DR路由器的ID。
Ø
Backup designated router ID
——BDR路由器的ID。
Ø
Neighbors ID
——邻居列表。每个邻居ID占4字节。
如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/27de05ea8494cdc08276b293b9e2321c.jpeg)