OSPF 开放式最短路径优先
运行链路状态路由协议的路由器知晓整个网络的拓扑图结构
首先建立邻居关系,再交互链路状态(Link-state,LS)
LS:每台路由器都会产生、描述自己接口的状态(接口开销、与邻居的状态、网段信息)LSDB同步
计算一颗以自己为根的、无环的最短路径树,将计算出的最优路径加载到自己的路由表
Router-ID:
路由器标识,用于在OSPF域中唯一的标识一台OSPF路由器
同一个域中不允许存在两个相同的Router-ID
创建进程时没有手工指定Router-ID,则会自动选则设备上的一个IP地址作为Router-ID
OSPF三张表:
邻居表(Peer Table)
描述邻居状态、主从关系、Router-ID、DR优先级、接口IP地址等信息
链路状态数据库(Link-State Database,LSDB)
网络中泛洪链路状态信息被称为LSA(Link-State Advertisement,链路状态通告)
将网络中的LSA搜集后装载到自己的LSDB
OSPF路由表(Routing table)
根据LSDB中的数据,运行SPF算法计算一颗以自己为根的、无环的最短路径树,将计算出的最优路径加载到自己的路由表
度量值
cost 越小,路径越优,OSPF路径的cost值等于从目的地到本地路由器沿途所有入接口的Cost总和
报文类型及格式
OSPF协议基于IP协议运行,协议号为89
224.0.0.5 组播IP地址意指所有的OSPF路由器
224.0.0.6 组播IP地址意指所有的OSPF DR路由器
类型 | 报文名称 | 报文描述 |
---|---|---|
1 | Hello | 用于发现直连链路上的OSPF的邻居,以及维护OSPF邻居关系 |
2 | DD(Database Description,数据库描述) | 用于描述LSDB,携带LSDB中LSA的头部数据 |
3 | LSR(Link State Request,链路状态请求) | 用于向OSPF邻居请求LSA |
4 | LSU(Link State Update,链路状态更新) | 用于发送LSA,完整的 |
5 | LSAck (Link State Acknowledgment,链路状态确认 | 设备收到LSU,对接受的LSA进行确认 |
Hello报文格式
头部报文
Type(类型):对应1-hello、2-DD、3-LSR、4-LSU、5-LSAck
Packer length(报文长度)
Checksum(校验和)
AU Type(校验类型)
Authentication(认证数据)
Network Mask:一方接口上收到的Hello报文中的“网络掩码”与本地接口不同,则忽略
Hello Interval(Hello间隔):须确保两台路由器接口Hello间隔相同,否则则无法建立邻居
Options(可选项):设置相应的比特位来通告自己支持的某种特性或拥有的某种能力
Router priority(路由优先级):选举DR、BDR,缺省为一
Router Dead Interval(路由器失效时间):也需相同
Designated Router(指定路由器)
Backup Designated Router(备份路由器)
Neighbor(邻居)
DD报文
描述LSDB,携带LSDB中LSA的头部数据,互为邻居的路由器才会发送DD报文在描述自己的LSDB之前,双方需协商主/从(Master/Slave),通过交互DD报文来完成(Routr-ID大的为Master),这种DD报文不包含任何LSA头部信息
Interface MTU(接口最大传输单元)
Options
I位:用于协商Master/Slave
M位:1,表示后续还有DD报文;0则是最后一个
MS位:Master路由器为1,Slave为0
DD Sequence Number(DD序列号):在报文交互过程中加一
LSR报文
在于OSPF邻居交换DD报文后,知晓了LSDB摘要,就发送报文请求LSA完整数据
链路状态类型(Link-State Type):指示本条LSA的类型
链路状态标识(Link-State ID):LSA的标识,不同类型的LSA,对该字段定义不一样
通告路由器(Advertising Router):产生该LSA的路由器
这三个元素标识了路由器请求的LSA
LSU报文
收到邻居发送的LSR后,以LSU进行回应,包含对方请求的LSA完整信息,一个LSU可以包含多个LSA,
当网络发生变化时,会触发LSU报文泛洪
LSAck报文
确保LSA进行可靠送达,会对邻居发送的LSA进行确认
邻接关系
在路由器接口激活OSPF后,开始发送和侦听Hello报文,通过Hello报文发送彼此并确认双向通信后,建立邻居关系
协商Master/Slave,交互LSA头部的DD报文描述自己的LSDB,交互双方的LSA,当双方LSDB同步完成后,两台路由器形成了对网络拓扑的统一认识,并开始独立计算路由,才算形成邻接关系
OSPF邻居状态
Down(失效):邻居状态切换的初始状态,未收到邻居发送的Hello报文
Init (初始):当路由器直连链路上的邻居发送有效的Hello报文,未在Hello报文邻居字段看到自己的Router-ID,为Init字段,表明该直连链路上有一个活跃的OSPF路由器,但未双向通信
Attempt (尝试):只在NBMA(非广播型多路访问类型)网络中出现,在该网络下手动指定邻居,在NBMA接口激活,发送Hello报文,但未收到有效的Hello报文
2-way(双向通信):收到邻居发送的Hello报文,且发现自己的Router-ID
Exstart (交换初始):发送空的DD报文协商Master/Slave
Exchange(交换):向邻居发送描述的LSDB的DD报文,序列号逐渐加1
Loading (加载):向邻居发送LSR请求LSA的完整数据
Full(全毗邻):完成了与邻居的LSDB同步
网络类型
点到点类型(p2p) 一段链路只能连接两台路由器的环境
广播型多路访问类型(Broadcast Multi-Access,BMA)允许多台路由器接入,任意两台路由器之间都能进行二层通信,一台发送的广播数据会被其他的所有路由器收到
非广播型多路访问类型(NBMA) 允许多台路由器接入,但不具备广播能力
点到多点类型 (P2MP)无需选举DR、BDR
在接口上配置 ospf network 类型
DR、BDR
在路由器接口都在同一网段时,两两建立OSPF邻接关系、则会有n(n-1)/2个邻接关系,消耗额外的网络资源
MA(多路访问)网络中所有的DRother都只和DR、BDR建立邻接关系,DROther之间只停留在2-way状态
DR、BDR选举在2-way之后,DR角色不具备抢占性,是一个接口级别概念
区域概念和多区域部署
所有非骨干区域都要和Area0相连,分骨干区域之间不允许直接相互发布区域间路由,Area0包含所有ABR
ABR只能将达到自己直连区域的内部路由通告给Area0
OSPF路由器作用
内部路由器(IR) : 所有接口都接入同一个OSPF区域的路由器
区域边界路由器(ABR):接入多个区域的路由器,至少有一个接口在Area0中,负责在区域间传递路由信息
骨干路由器(BR):所有接口都接入Area0
AS边界路由器(ASBR):将OSPF域外的路由引入本域
LSA及特殊区域
类别 | 名称 | 描述 |
---|---|---|
1 | 路由器LSA (Router LSA) | 每台路由器都会产生,描述所有OSPF直连接口的状况和Cost值,只在接口所属区域泛洪 |
2 | 网络LSA (Network LSA) | DR产生,描述DR所接入的MA网络所有与之形成邻接关系的路由器,只在接口所属区域泛洪 |
3 | 网络汇总LSA (Network Summary LSA) | ABR产生,描述到达某个区域的目标网段的路由,用于区域间路由传递 |
4 | ASBR汇总LSA (ASBR Summary LSA) | ABR产生,用于描述ASBR,相当于一条到达ASBR的“主机路由” |
5 | AS外部LSA (AS External LSA) | 由ASBR产生,用于描述本AS之外的外部路由 |
7 | 非完全末梢区域LSA (NSSA LSA) | 由ASBR产生,用于描述本AS之外的外部路由,NSSA LSA仅仅在产生这个LSA的NSSA内泛洪,不能直接进入到骨干区域 NSSA的ABR会将7类LSA转换为5类LSA注入到骨干区域 |
LSA头部
LSU报文发送链路状态更新,包含一个或者多个LSA,是完整的LSA数据,各种LSA拥有相同的LSA头部
链路状态老化时间(Link-State Age):在被始发路由器产生时,值为0,随后在网络中泛洪,老化时间逐渐增加,达到MaxAge,不再用于 路由计算
可选项(Option):对应ospf所支持的某种特性
链路状态类型(LS type)
链路状态ID:LSA的标识
通告路由器(Advertising Router):产生该LSA的路由器Router-ID
链路状态序列号(Ls sequence number):LSA序列号,用于判断LSA的新旧或者是否存在重复
LSA报文结构
type-1 LSA(Router-LSA)
V :为1表示为Virtual Link 端点
E:1为ASBR
B:1为边界路由器
Type-2 LSA(Network-LSA)
相连的路由器(Attached Router)的Router-ID
Type-3 LSA(Summary-LSA)
ABR产生,解决区域间路由传递问题
Type-4 LSA(ASBR Summary-LSA)
ASBR汇总LSA,由ABR产生,到达ASBR的主机路由
Type-5 LSA(AS-External-LSA)
描述外部路由
Type-7 LSA(非完全末梢区域外部LSA,Not-So-Stubby Area External LSA)
描述OSPF外部路由,只在NSSA内泛洪
区域类型及详解
骨干区域(Backbone Area) OSPF域的核心枢纽,一个OSPF域只能有一个Area0 ,所有区域内路由必须通过Area0中转
常规区域(Normal Area) 缺省情况下都为常规区域
末梢区域(Stub Area) 一个非0的常规区域只有单一的一个出口,不需要特定的外部路由来选择离开区域出口,一个区域被设置为Stub区域,则所有连接到这个区域的路由器都要将该区域配置为Stub区域,配置为Totally-Stub,需要在ABR上配置,stub no-summary
非完全末梢区域(Not-So-Stubby Area) NSSA区域允许外部路由引入该区域,阻挡type4、type5-LSA进入该区域,只在当前的NSSA内 泛洪,ABR将type-7 LSA转换为type-5 LSA注入area0,泛洪到整个OSPF域,一个区域被设置为NSSA区域,则所有连接到这个区域的路由器都要将该区域配置为NSSA区域,配置为Totally NSSA,需要在ABR上配置,nssa no-summary
Type-1 | Type-2 | Type-3 | Type-4 | Type-5 | Type-7 | |
---|---|---|---|---|---|---|
常规区域 | √ | √ | √ | √ | √ | × |
Stub区域 | √ | √ | √ | × | × | × |
Totally Stub区域 | √ | √ | ×. | × | × | × |
NSSA | √ | √ | √ | × | × | √ |
Totally NSSA | √ | √ | ×. | × | × | √ |
. : ABR会自动下发一条Type-3 LSA的默认路由,其他的都被禁止
判断LSA的新旧
拥有更高链路状态序列号的LSA实例被认为更新,路由器每次刷新LSA时,会将该LSA的状态序列号加1
链路状态序列号相同,拥有更大校验和的LSA被认为更新
以上都相同时,老化时间被设置为MaxAge(3600s),被认为最新
老化时间不为MaxAge,则老化时间相差超过MaxAgeDiff(一个LSA实例,从其始发设备出发,直至被泛洪到整个AS边界所需最长时间,为15min),老化时间小的LSA被认为更新
OSPF协议特性
路由汇总
在ABR上部署路由汇总
abr-summary x.x.x.x mask
汇总路由的cost值,缺省情况下为被汇总的路由Cost值最大的一个
在ASBR上部署路由汇总
asbr-summary x.x.x.x mask
被汇总的明细路由度量值类型为Metric-Type-1,则汇总路由的cost值为明细路由的cost最大值
被汇总的明细路由度量值类型为Metric-Type-2,则汇总路由的cost值为明细路由的cost最大值加一
Virtual Link
部署在两台OSPF路由器之间,穿越非骨干区域,实现另一个非骨干区域与Area0的连接
不能部署在stub区域内,Type-5 LSA不会通过Virtual Link传播
默认路由
在常规区域发布默认路由
在出口路由器上配置 default-route-advertise cost 10 type(指定路由的Metric-Type) 2 在发布该默认路由时该路由器需存在一条静态路由,增加always关键字,是否存在默认路由,都始终在OSPF网络下发默认路由
在stub区域中发布默认路由
ABR会自动向该区域下发一条默认路由,使用default-cost修改cost值
在Totally Stub区域发布默认路由
只发送唯一一条Type-3 LSA,默认路由
在NSSA中发布默认路由
ABR在该NSSA下发送默认路由,使用Type-7 LSA描述
在Totally NSSA区域发布默认路由
只发送唯一一条Type-3 LSA,默认路由
报文认证
空认证
简单口令认证,也被称为明文认证
密文认证
转发地址(FA)
Type-5 LSA和Type-7 LSA包含的特殊字段
所包含的FA为0.0.0.0,则认为到达该目的网段的数据包应该发往ASBR
所包含的FA不为0.0.0.0,则认为到达该网段数据包应该发往这个FA(所标识的设备),在OSPF路由表能够找到匹配这个FA的路由,则使用该FA所指的下一跳地址作为这条外部路由下一跳,,如果没有符合上述条件的路由,则该条LSA不会用于外部路由计算
防环机制
-
区域内部路由防环
依赖SFP算法,计算出一颗以自己为根、无环的最短路径树,计算出到达每个网段的最优路径,实现区域内路由无环路
-
区域间路由防环
OSPF要求所有的非骨干区域必须与Area0相连,区域间路由需要通过Area0中转
ABR从非骨干区域收到的Type-3 LSA不能用于区域间的路由计算
ABR只能将自己到达所连接区域的区域内部路由注入骨干区域(区域间路由则不被允许),可以将其到达所连接区域的区域内部路由及到达其他区域的区域间路由注入非骨干区域
ABR不会将描述到达某个区域内网段路由的Type-3 LSA再注入回该区域
Type-3 LSA设计了Down-Bit,用于MPLS VPN环境下进行路由放环
-
外部路由防环
OSPF路由类型以及优先级
区域内路由(Intra Area Route):根据区域内泛洪的Type-1 LSA、Type-2 LSA计算得到的路由,到达其直连区域内的网段
区域间路由(Inter Area Route):根据Type-3 LSA计算得到的路由,到达其其他区域内的网段
Type1外部路由(Metric-Type-1 External Route):路由器根据Type-5 LSA(Metric-Type-1)计算出的外部路由
Type2外部路由(Metric-Type-2 External Route):路由器根据Type-5 LSA(Metric-Type-2)计算出的外部路由