IPv6
OSPFv3路由协议
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
进程运行在子网上。
Ø
链路多实例复用
² OSPFv3
支持链路多实例复用
,一条链路上可以运行多个
OSPF
实例(
instance
)。例如,可以使用两个实例让一条链路运行在两个区域内。
²
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
首部报文结构:
如下图所示:
其中:
Ø
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
采集到的报文。
Hello
报文结构
如下图所示:
报文字段的含义:
Ø 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
字节。
如下图所示: