目录
1.OSPF简介
OSPF(Open Shortest Path First)协议是一种用于路由选择的链路状态协议,它是由IETF(Internet Engineering Task Force)定义的,被广泛用于企业和服务提供商的网络中。
OSPF可以在大型网络中自适应地计算路径,并选择最优路径来转发数据包,从而提高网络的可靠性、灵活性和性能。
它使用链路状态数据库(LSDB)来存储网络拓扑信息,并通过洪泛算法来传递信息,最终计算出网络的最短路径树。
该协议支持VLSM(Variable-Length Subnet Mask)地址分配,可以应对复杂的网络拓扑,同时还支持多种路由类型,如多路径路由、默认路由和区域路由等。
2.OSPF工作原理简介
- 通过Hello报文建立邻居关系
- 泛洪LSA并完成LSDB记录同步
- SPF算法计算并形成路由
图 2-1 OSPF工作原理简介
3.OSPF基础概念
3.1 OSPF系统
图 3-1 OSPF系统
3.1.1 OSPF路由器分类
- 内部路由器(IR,Internal Router):所有的OSPF接口都在同一个区域的路由器。
- 骨干路由器(BR,Backbone Router):至少有一个OSPF接口属于骨干区域(区域0)的路由器。
- 区域边界路由器(ABR,Area Border Routers):至少有一个OSPF接口属于骨干区域且至少有OSPF接口连接属于非骨干区域,ABR用来连接骨干区域和非骨干区域。
- 自治系统边界路由器(ASBR,AS Boundary Router):至少有一个OSPF接口属于OSPF一个区域(任何区域),另外一个接口连接连其他AS边界路由器并用于交换路由器信息。
3.1.2 OSPF区域
(1)OSPF区域分类
OSPF区域分为骨干区域和非骨干区域,骨干区域和非骨干区域统称为常规(Normal)区域。
- 非骨干区域
非骨干区域区域号不能为0.0.0.0,非骨干区域通过物理连接或者虚连接连接骨干区域。
- 骨干区域
骨干区域区域号固定为0.0.0.0,骨干区域的作用是汇总各个区域的LSA信息,并通过ABR通告给和骨干区域相连的各个区域。
OSPF区域划分规定:
1.骨干区域必须是连续的,分离的骨干区域需要通过虚连接联通。
2.非骨干区域必须和骨干区域联通(通过物理连接或者虚连接联通)。
(2)OSPF特殊区域
OSPF特殊区域主要通过以下信息进行区分:ABR和ASBR数量,是否有虚连接穿过该区域,是否位于AS边缘,允许哪些LSA进入该区域。
按照以上信息的差异,OSPF特殊区域可以分为以下4种:
- Stub(末梢)区域
Stub区域需要满足以下条件:
- 只有一个ABR没有ASBR。
- 没有虚连接。
- 非骨干区域。
- 处于AS边缘。
Stub区域只允许同一AS(自治系统)Type 1 LSA,Type 2 LSA,Type 3 LSA在区域内通告,这样可以减少区域内路由表项数量。
- Totally Stub(完全末梢)区域
Totally Stub区域需要满足以下条件:
- 只有一个ABR没有ASBR。
- 没有虚连接。
- 非骨干区域。
- 处于AS边缘。
Totally Stub区域和Stub区域的区别是Totally Stub区域只允许Type 1 LSA,Type 2 LSA,不允许Type 3 LSA在区域内通告,这样进一步减少区域内路由表项数量。
Totally Stub区域如何和外部区域通信?
ABR产生一条缺省的Summary LSA (Type 3 LSA)通告给Totally Stub区域,区域内的路由器通过ABR与外界通信。
- NSSA(非纯末梢)区域
NSSA区域需要满足以下条件:
- 有大于或等于一个ABR且有大于或等于一个ASBR。
- 没有虚连接。
- 非骨干区域。
NSSA区域允许同一AS(自治系统)Type 1 LSA,Type 2 LSA,Type 3 LSA在区域内通告,且允许通过ASBR引入其他AS(自治系统)路由以Type 7 LSA进入该区域,NSSA区域ABR会通过Type 5 LSA通告给AS内其他区域。
- Totally NSSA(完全非纯末梢)区域
Totally NSSA区域需要满足以下条件:
- 有大于或等于一个ABR且有大于或等于一个ASBR。
- 没有虚连接。
- 非骨干区域。
Totally NSSA区域允许同一AS(自治系统)Type 1 LSA,Type 2 LSA在区域内通告,不允许Type 3 LSA在区域内通告。
Totally NSSA区域允许不同AS(自治系统)Type 7 LSA该区域,NSSA区域ABR会通过Type 5 LSA通告给AS(自治系统)内其他区域。
Totally NSSA区域如何和AS(自治系统)内其他区域通信?
ABR产生一条缺省的Summary LSA (Type 3 LSA)通告给Totally NSSA区域,区域内的路由器通过ABR与外界通信。
表 3-1 OSPF特殊区域
3.1.3 OSPF路由类型
OSPF路由可以分为4类:
- 区域内路由(Intra Area Route)
- 区域间路由(Inter Area Route)
- 第一类外部路由(Type-1 Externel Route)
- 第二类外部路由(Type-2 Externel Route)
表 3-2 OSPF路由类型
3.2 OSPF报文
OSPF共有5中报文:Hello报文,DD报文,LSR报文,LSU报文,LSAck报文。
- Hello报文
Hello报文用于维护邻居路由器列表,并检测邻居路由器是否在线。此报文设置有OSPF的管理IP地址,包括标识号、优先级、邻居IP地址等信息。
- DD(Database Description)报文
DD报文用于交换LSDB(链路状态数据库)的摘要信息,以确定哪些LSA(链路状态广告)需要传输和接收。DD报文传输的信息为LSA头部信息,传输LSA头部的目的在于减少网络流量,通常路由器的LSA数量会比较多,如果传输LSA完整信息的话会造成网络流量大的问题。
- LSR(Link State Request)报文
LSR报文用于请求一个或多个LSA的完整副本。LSR报文同样只包含LSA头部信息。
- LSU(Link State Update)报文
LSU报文用于传输一个或多个LSA的完整副本。当路由器LSDB中有更改时,LSU报文将通知其他路由器的更新LSDB。只有LSU会携带完整的LSA信息。
- LSAck(Link State Acknowledgment)报文
LSAck报文用于确认收到的LSA,并向发送方发送确认消息。路由器发送LSU报文后,如果没有收到对端LSAck报文,将会重传LSA。
图 3-2 OSPF报文交互流程
3.2.1 OSPF首部格式
图 3-3 OSPF首部格式
Version:OSPF版本,1字节。
Message Type:报文类型,1字节。
- 1:Hello报文
- 2:DD报文
- 3:LSR报文
- 4:LSU报文
- 5:LSAck报文
Packet Length:OSPF报文长度,2字节。
Source OSPF Router:路由器ID,4字节,发送OSPF报文的源路由器ID。
Area ID:区域ID,4字节。
Checksum:校验和,2字节。
Auth Type:验证类型,2字节。
Auth Data:验证数据,4字节。
3.2.2 OSPF报文格式
(1)Hello报文格式
图 3-4 Hello报文格式
Network Mask:4字节,发送Hello报文接口IP的子网掩码。
Hello Interval:2字节,发送Hello报文的时间间隔。
Options:1字节,选项,由下面比特位组成。
- DN:Down比特位
- O:Opaque比特位
- DC:Demand Circuit比特位
- L:LLS Data Block比特位
- NP:N或P比特位
- MC:Multicast比特位
- E:External Routing比特位
- MT:Multi-Topology比特位
Router Pri:1字节,本路由器的DR优先级。
Router Dead Interval:4字节,本地路由器失效时间。
Designated Router:4字节,DR接口IP地址。
Backup Designated Router,4字节,BDR接口IP地址。
Active Neighbor:4字节,已发现邻居路由器的Router ID。
(2)DD报文格式
图 3-5 DD报文格式
Interface MTU:2字节,发送DD报文接口的MTU数值。
Options:1字节,选项,由下面比特位组成
- DN:Down比特位
- O:Opaque比特位
- DC:Demand Circuit比特位
- L:LLS Data Block比特位
- NP:N或P比特位
- MC:Multicast比特位
- E:External Routing比特位
- MT:Multi-Topology比特位
DB Description:DB说明,1字节
- I:1比特,多个DD报文,第一个DD报文置1。
- M:1比特,多个DD报文,最后一个DD报文置1。
- MS:1比特,设置DD报文双方主从关系。
DD Sequence:4字节,DD报文序列号。
LSA Headers:4字节,LSA头部信息列表。
(3)LSR报文格式
图 3-6 LSR报文格式
Link State Request以下几个部分组成
LS Type:4字节,请求的LSA类型。
Link State ID:4字节,由LSA类型决定实际意义。
- Type 1 LSA:产生该LSA的路由器Router ID。
- Type 2 LSA:DR接口IP地址。
- Type 3 LSA:目的网络IP地址。
- Type 4 LSA:ASBR Router ID。
- Type 5 LSA:目的网络IP地址。
Advertising Router:4字节,发送此报文路由器Router ID。
(4)LSU报文格式
图 3-7 LSU报文格式
Number of LSAs:4字节,报文中LSA数量。
LSA:LSA列表,LSA格式后面有详细介绍。
(5)LSAck报文格式
图 3-8 LSAck报文格式
LSA Headers:LSA头部列表。
3.2.3 LSA格式
(1) LSA首部格式
图 3-9 LSA首部格式
LS age:LSA年龄,2字节,该LSA的年龄(距离上次生成的时间)。
Options:选项,1字节,LS类型、范围、发生器类型等选项。
LS type:LSA类型,1字节,常见LSA类型如下:
- 1:Router-LSA,
- 2:Network-LSA
- 3:Network-summary-LSA
- 4:ASBR-summary-LSA
- 5:AS-external-LSA
- 7:NSSA-external-LSA
Link state ID:链路状态ID,4字节,LSA的标识符。
Advertising Router:广告LSA路由ID,4字节。
LS sequence number:LSA序列号,4字节。
LS Checksum:LSA校验和,2字节,校验范围为除LS age字段外的LSA数据。
Length:LSA的长度,2字节 LSA body 不定长 LSA的具体内容。
(2) LSA格式
- Type 1 LSA:路由器LSA(Router-LSA)
图 3-10 Router-LSA格式
V位:1比特,如果长生此LSA的路由器有设置虚连接,该位置1,否则置0。
E位:1比特,如果产生此LSA的路由器是ASBR,该位置1,否则置0。
B位:1比特,如果长生此LSA的路由器是ABR,该位置1,否则置0。
Number of Links:2字节,路由器OSPF链路数量。
Link ID:4字节,由Link Type决定实际意义。
Link Data:4字节,由Link Type决定实际意义。
Link Type:1字节,实际的链路类型
- 1.P2P(点对点网络):Link ID表示邻居路由设备的Router ID,Link Data表示发送该LSA的路由器接口的IP地址。
- 2.Transit(传送网络):Link ID表示DR接口的IP地址,Link Data表示发送该LSA的路由器接口的IP地址。
- 3.Stub(末梢网络):Link ID表示IP网络或子网地址,Link Data表示发送该LSA的路由器接口所在网络的子网掩码。
- 4.Virtual Link(虚连接):Link ID表示邻居路由设备的Router ID,Link Data表示发送该LSA的路由器接口的MIB-II ifIndex(接口索引)值。
TOS:1字节,固定为0。
Metric:2字节,链路开销。
- Type 2 LSA:网络LSA(Network-LSA)
图 3-11 Network-LSA格式
Network Mask:4字节,该网络子网掩码。
Attached Router:4字节,该网段所有与DR形成邻居关系的路由器Router ID。
- Type 3 LSA:网络聚合LSA(Network-summary-LSA)
图 3-12 Network-summary-LSA格式
Network Mask:4字节,目的网络的子网掩码。
TOS:1字节,服务类型。
Metric:3字节,链路开销。
- Type 4 LSA:ASBR聚合LSA(ASBR-summary-LSA)
- Type 5 LSA:自治系统外部LSA(AS-external-LSA)
3.3 OSPF网络类型
OSPF网络可以分为以下4种类型:
- P2P(点到点,point-to-point)类型。
- P2MP(点到多点,point-to-multipoint)类型。
- BMA(广播多路访问,Broadcast multi-Access)类型。
- NBMA(非广播多路访问,Non-Broadcast multi-Acces)类型。