OSPF:开放式最短路径优先协议
OSPF是一个内部网关协议IGP,使用SPF算法,是对链路状态路由协议的一种实现,用于在单一自治系统内决策路由。
一、OSPF特点
-
传递网络掩码,基于IP协议封装(跨层封装),协议号为89。
-
需要结构化的部署:区域划分、地址规划。
-
传递信息称作LSA,LSA链路状态通告,包含路由信息和拓扑信息。
路由LSA:描述本路由器上接口的路由信息。
拓扑LSA:描述路由器之间的连接信息。 -
更新方式:触发更新、30分钟的链路状态刷新。
-
更新地址:组播和单播更新;
组播地址:224.0.0.5(ALL SPF router) 224.0.06(ALL DR router) -
支持路由认证
-
支持手工汇总
-
支持区域划分
-
OSPF比较消耗设备资源
-
在OSPF路由计算过程中采用的是Dijkstra算法。OSPF路由器会利用此算法来计算出最短路径树(SPT)。每台OSPF路由器都会发送一种易于解读都报文——链路状态通告(LSA),向邻居路由器描述本机以及本机所连接的链路。
二、OSPF区域
- 区域划分的意义:减少LSA的数量、减少LSA的传播范围。
- 区域的划分是基于接口(链路)的。
- 区域的标记:十进制或者类似于IP地址A.B.C.D
- 区域的分类:
骨干区域:区域标记为0或0.0.0.0
非骨干区域:区域标记不等于0或0.0.0.0 - 区域设计原则:向日葵型网络结构
OSPF网络中必须存在唯一的骨干区域(单区域除外)
若存在非骨干区域,非骨干区域必须与骨干区域直接相连 - OSPF中路由器的角色
骨干路由器:所有接口属于area 0
非骨干路由器:所有接口都不属于area 0
ABR:区域边界路由器,能够产生3类LSA的路由器
ASBR:自制边界系统路由器,能够产生5类或7类LSA的路由器
三、OSPF消息数据包
类型 | 描述 | 用途 |
---|---|---|
1 | Hello | 用来发现邻居、选举DR/BDR,维护OSPF邻居关系 |
2 | DBD (数据库描述) | 用在数据库交换过程中,确立主/从关系,交换LSA包头,以及确定首个序列号 |
3 | LSR (链路状态请求) | 用在DBD交换过程中,请求本路由器已知的特定LSA |
4 | LSU (链路状态更新) | 用来向已发出LSR数据包,以请求特定LSA的邻居,发送完整的LSA |
5 | LSack (链路状态确认) | 用来确认本路由器已收到的LSU数据包 |
Hello:
Hello数据包是OSPF 1 类数据包。Hello数据包的作用是:让两台OSPF路由器建立起邻居关系。在MA/NBMA网络环境中,Hello数据包选举OSPF路由器的DR/BDR。通过广播介质发送时,Hello数据包的目的IP地址为224.0.0.5;通过非广播介质发送,其目的IP地址为单播IP地址。
- 用于邻居路由发现、建立和保活。
- 周期性发送,周期时间为10s或30s(根据不同的网络类型默认10s或30s)
Network Mask: 表示发送Hello数据包(参与OSPF进程)的路由器接口的网络掩码。仅只有广播介质(MA网络环境中)才会检查此字段值。
Hello Interval: 表示每隔多长时间发送一次Hello数据包,单位为秒。对于两台尝试建立OSPF邻接关系的路由器来说,Hello 和 Dead 时间必须一致。其中Broadcast和P2P,此字段值为10s;其他网络环境中,此字段值为30s。
Options: 表示(发送Hello数据包的)路由器所支持的能力。Options字段的格式如下所列:
DN位,为MPLS/VPN所用。
O位用于不透明LSA(opaque LSA)详见RFC2370。
DC位表示路由器支持按需电路特性。参考网上博文 OSPF DC按需链路技术剖析
EA位表示路由器支持(接收及转发)外部属性LSA。
N/P位表示路由器支持非完全端区域(not-so-stubby area,NSSA)。
MC位表示路由器具备组播OSPF能力。
E位,E位置位时,表示路由器具备接收外部LSA的能力。
T位 表示路由器支持ToS(通常为0)。
Router Prionrity : 默认情况下,此字段值被设置为1。在选举DR/BDR时起着重要作用;OSPF路由器发送Hello数据包中路由器优先级字段值越高,越有可能成为DR。此字段值为0,则不参与DR选举。
Dead Intervar: 默认情况下,此字段值是Hello Interval字段值的4倍。表示一段以秒为单位的时间。
Designated Router: 表示DR路由器的IP地址。若DR不存在或尚未发现,此字段值为0.0.0.0。DR通过Hello协议选举而出。具有最高优先级的路由器(所发Hello数据包中路由器优先级字段值最高的路由器)将成为发包接口所处网络内的DR。在路由器优先级字段值相等的情况下,Router-ID值最高的路由器(所发Hello数据包中指定路由器字段值最高的路由器)将成为(发包接口所处网络内的)DR。可以说OSPF是接口敏感型的协议。
Backup Designated Router: 标识BDR,指明BDR的接口IP地址。若无BDR,此字段值为0.0.0.0。BDR通过Hello协议选举而出。
Neighbor: 包含通过Hello数据包获知的邻居路由器的Router-ID。
DBD:
DBD数据包是OSPF数据包的第2种类型,常用在(OSPF邻居路由器之间的)数据库交换期间。
- 数据库描述,通俗地讲是LSA的集合。
- 首个DBD数据包用来建立主/从(Master and Slave)路由器。
- 选举“主”路由器亦会用此数据包来设置(确定)初始化序列号。
- Router-ID值最高的路由器会成为“主”路由器,并发起数据库同步。
Interface MTU: 此字段值指明发包接口(发送DBD数据包的路由器接口)所能发出的数据包的最大长度,单位为字节。由OSPF虚链路发出的DBD数据包的接口MTU字段值必须设置为0。
Options: 与Hello数据包所含字段相同。
I位: 此位置1时,则表示邻居双方发出的首个DBD数据包。
M位: 此位置1时,则表示DBD数据包尚未发送完毕。
MS位: 主/从位。此位置1时,表示在DBD交换过程中,发包路由器为“主”路由器,此位置0时,则为“从”路由器。
DBD Sequence Number: 此字段包含由“主”路由器设置的唯一值(序列号),在数据库交换过程中使用。只有“主”路由器才能增加此字段的值(序列号的值)。
LSA Headers: 此字段包含若干链路状态数据库包头。
LSR:
向对端路由器请求LSA,其动作行为发生在dbd报文后。
链路状态请求数据包时OSPF数据包的第3种类型,在部分路由数据库信息“遗失”或“过时”的情况下发送。LSR数据包用来重新取回“遗失”的路由数据库中的精确信息。DBD交换过程完毕后,邻居双方(主/从路由器)还会互发LSR数据包,请求对方发送DBD交换过程中通告过的LSA
LS Type:标识所请求的LSA类型。
LS-ID:表示特定LSA的链路状态ID。
Advertising Router:包含生成LSA的路由器的Router-ID。
LSU:
向对端发送其拥有的LSA。
链路状态更新数据包是OSPF数据包第4种类型,OSPF路由器会发此类数据包来实施LSA的泛洪。单个LSU数据包内会包含多条LSA。OSPF路由器也会发送LSU数据包,来回应(邻居路由器发出的)LSU数据包。以泛洪方式发出的LSA由LSA确认数据包进行确认。只要有一条未经确认的LSA,(OSPF路由器就会)每隔重传间隔时间重传一次。
LSACK:
收到对方的LSA时发送,相当于TCP中的ACK。
链路状态确认数据包是OSPF数据包的第5种类型,用来对每条LSA进行确认。OSPF路由器也会发送LSack数据包,来应答LSU数据包。可用单个LSack数据包一次性确认收到的多条LSA。LSack数据包负责LSU数据包的可靠传输。
链路状态确认数据包以组播的方式发送。若(发送LSack数据包的)路由器为DR/BDR,则IP包头的组播目的IP地址为224.0.0.5(所有SPF路由器地址)。否则,LSack数据包IP包头的组播目的IP地址为226.0.0.6(DR/BDR地址)。
四、OSPF邻居状态机制
邻居关系建立条件:
- router-id 必须不同
- area ID 相同
- 认证: 认证类型 (不认证=0 明文认证=1 MD5=2) 认证数据
- hello时间,dead时间
- 特殊区域标识(E(外部路由位)=1 ; N(NSSA外部路由位)=0 P=0)
- MA网络中,网络掩码必须一致
- 必须同时使用单播或组播更新
- 更新源检测(双方的IP地址必须在同一网段)
状态 | 状态描述 |
---|---|
Down (失效) | 表明OSPF路由器尚未从邻居路由器收到任何OSPF协议数据包。 |
Init (初始) | 初始化状态,一旦开始发送hello报文,进入初始化状态。 |
Two-way 双向通信状态 (邻居状态) | 接收到包含自己router-id 的对方hello报文。 |
Exstart(预启动状态) | 一旦开始发送主从DBD,则进入预启动状态。 |
Exchange (预交换) | 主从选举完成,则发送携带LSA头部信息的DBD,进入预交换状态,会发送LSR 数据包。(但是没有LSU) |
Loading (加载状态) | 一旦发送LSU数据包,进入了加载状态,进行大量LSA的学习。 |
Full (邻接状态) | 双方LSA同步(双方LSA全部学习) |
邻居状态下(two-way): MA的网络中会选举DR(指定路由器) BDR(备份指定路由器) DR选举: 1.比较优先级 (范围:0-255,默认优先级为1 ,越大越优) 2.比较各自的router-id,越大越优 注意:1.DR抢占是关闭的 2.DR是一个接口概念 3.优先级范围0-255,数字为0代表不参与选举 4.先 选举BDR ,再升级为DR
主从选举: 发生在exstart状态,通过双方的router-id进行比较,router-id大的一方为主。 发送的 主从选举DBD,DBD中包含了MTU值(默认思科直接启用,华为中默认不包含MTU,可以使用命令 激活传递MTU值的功能,若双方的MTU值不同则卡在exstart 状态)。