OSPF
基本概念
名称
Open Shortest Path First,开放式最短路径优先协议。
版本
OSPF v2(IPV4)与OSPF v3(IPV6)。
协议类型
标准的无类别链路状态型协议。无类别(传递网络掩码),链路状态型(基于拓扑,防环)
传递的路由信息
OSPF传递的路由信息为LSA,链路状态通告(Link-State Advertisement),它是链路状态型协议使用的一个分组,包括有关邻居和通道成本的信息。LSA被路由器接收用于维护路由选择表。可简单理解为在不同环境下产生的不同拓扑或路由。
使用范围
IGP(一个AS之内)
更新方式
触发更新,当网络结构发生变化时再更新路由信息。周期更新,周期为每30min。且更新时采用组播更新(224.0.0.5、224.0.0.6)。
跨层封装
基于IP协议跨层封装,无四层(传输层),分段改为分片,无端口号,有协议号为89。
OSPF区域
OSPF支持区域划分。基于接口(链路)来划分。
作用
①限制LSA的传播范围。
②减少LSA的数量。
③同一区域传拓扑信息,不同区域传路由信息。
标识方法
十进制数与类似IP地址(X.X.X.X),其中0区域为骨干区域,非0区域为非骨干区域。
划分原则
①多区域OSPF网络中必须存在且唯一的骨干区域(Area 0或Area-0.0.0.0)。单区域时可不为Area 0。
②若存在非骨干区域,非骨干区域必须与骨干区域相连,实现区域的星型结构。
③若存在非骨干区域,必须有区域边界路由器(ABR),且ABR路由器同时连接骨干区域与非骨干区域(接口划分)。
OSPF协议中路由器的角色
骨干路由器
该路由器的所有接口都属于同一个OSPF区域内。
非骨干路由器
①ABR:区域边界路由器。连接骨干与非骨干区域。
②ASBR:自治系统边界路由器。连接OSPF与非OSPF区域,能将非OSPF协议的路由引入。
OSPF数据包类型

五种类型的报文
一、Hello

保活包,组播周期发送,用于邻居关系的发现、建立与保活。在Hello包中存在本地已知邻居的Router ID,Hello time为10s或30s,Dead time为Hello time的四倍。Hello包中的四个参数必须一致(上图带*的参数)才可建立邻居关系。华为设备还要求邻居间接口的IP地址子网掩码必须一致。
二、DBD
Datebase Description,数据库描述包,对链路拓扑的路由信息的描述。
DBD相关概念
①隐性确认:普通的DBD需要Ack确认,而假DBD包(主从选举时)不需要,此时会使用从对主的隐性确认的方式,基于序列号同步进行确认。
②MTU参数:DBD报文中存在MTU参数,要求邻居间的MTU值必须相同,否则将卡在Exstart状态。华为设备默认不检查MTU值,需要手动配置开启检查(注意两端保持相同状态),且可进行修改。
③描述字段:I位为1标识本地发出的第一个DBD包,M位为0标识本地发出的最后一个DBD包,MS位为1代表主,0代表从。
三、LSR
LS Request,链路状态请求包。
四、LSU
LS Update,链路状态更新包,携带了具体的LSA(拓扑信息)
五、LSAck
LS Acknowlegement,链路状态确认包。
OSPF状态机
前三个状态(建立邻居关系)

①Down State:停机状态,即启用OSPF协议之前的状态。在启用OSPF协议后,路由器会发送Hello包,然后进入下一个状态(初始化状态)。
②Init State:初始化状态,即等待建立邻居关系的状态。在收到包含有自己RID的Hello包后,则与对方一起进入下一个状态(双向连接状态)。
③Two-Way State:双向连接状态,即标志着邻居关系建立完成。
后四个状态(建立邻接关系)
在经过前三个状态后,会进行条件匹配,若匹配成功则继续进行下一个状态(预启动状态),否则停留在双向连接状态保持邻居关系。
①Exstart State:预启动状态,使用假DBD(效果类似Hello包,但无需Ack确认,采用隐性确认的方式)双方比较RID,进行主从关系的选举(从会使用主的序列号发包以表示选举结果),RID大者优先进入下一个状态(准交换状态)。
②Exchange State:准交换状态,使用真正的DBD包进行拓扑目录的共享(需要使用Ack包进行确认)。
③Loading State:加载状态,根据对比拓扑目录信息找出本地缺少的信息,然后使用LSR、LSU与LSAck包来进行具体拓扑信息的共享,实现OSPF收敛。
④Full State:最终状态,共享完成,标志着邻接关系建立完成。
OSPF工作过程
第一步:启动配置完成后,邻居间组播收发Hello包,建立邻居关系,生成邻居表。
第二步:邻居间进行条件匹配,匹配失败则保持邻居关系,周期性保活即可;匹配成功的,将进行邻接关系的建立,该过程中将先使用DBD进行拓扑目录共享,再使用LSR、LSU与LSAck来获取本地未知的LSA信息,最终完成邻接关系间的LSDB同步,生成数据库表。
第三步:本地基于LSDB,利用SPF算法(最短路径优先算法,由有向图到树状结构图),计算到达所有未知网段的最短路径,然后将计算结果加载到路由表中,整个收敛过程就此完成。之后,进行Hello包周期保活,且每30min邻接关系间周期比对DBD。
OSPF的收敛
①LSA的洪泛,使整个OSPF网络收到同一条LSA。
②LSDB(链路状态数据库,即所有LSA的集合)的同步,整个OSPF网络的LSDB需要一致。
OSPF应对网络结构突变
新增或断开
直连新增或断开网段的设备,基于触发更新,直接使用更新数据包(LSU)来告知本地所有的邻接,然后邻接也会将此消息发送给整个OSPF网络中的其他设备。
无法通信
Dead time倒计时结束后还未收到邻居的Hello包,则断开邻居关系,并删除有关信息。
邻居到邻接关系的匹配条件
(1)在P2P网络中,所有的OSPF邻居关系必然需要建立成为邻接关系。
(2)在MA网络中,由于OSPF不支持接口的水平分割,若两两间均为邻接关系,会导致大量的重复更新,所以必须进行DR/BDR的选举(使用组播224.0.0.6),在该网段的非DR/BDR设备间只能建立为邻居关系。当DR出故障后,BDR会临时充当DR的角色来与其他设备建立邻接关系。
注: DR/BDR是基于接口的,且DR/BDR在同一MA网络中只能各一个,且必须有DR,可以没有BDR。
DR/BDR的选举规则
(1)先比较接口优先级,范围为0-255,默认为1,越大越优,0代表不参选;
(2)再比较RID,越大越优。
相关配置
①修改接口的优先级:
②由于DR/BDR选举是非抢占的,只会在选举时间(40s)内选出DR/BDR,逾期不候,所以在修改完接口优先级后,需要手动重启OSPF进程,手动干涉才会生效:
OSPF的优先级与开销值
优先级(AD值)
华为设备OSPF默认内部路由优先级为10,外部路由为150。
开销值(cost值)
计算方法为 100Mbps / 带宽,由每一段链路的cost值累加所得。
注: 若接口带宽大于参考带宽(100M),则cost会取为1。由此可能导致选路不佳的情况,可以通过修改参考带宽来避免该情况的出现,修改时注意整个OSPF网络内的参考带宽需要保持一致。配置命令为 bandwidth-reference ?(单位默认为Mbits/s)
OSPF在不同网络类型接口下的工作方式
接口网络类型 | 工作方式 |
---|---|
LoopBack | P2P类型,无Hello包,使用32位主机路由传递 |
P2P | P2P类型,宣告后自动建邻,不选举DR/BDR |
BMA | Broadcast类型,宣告后自动建邻,选举DR/BDR |
NBMA | P2P类型,宣告后自动建邻,不选举DR/BDR,会出现问题 |
查看某接口的OSPF工作方式:
NBMA网络类型会出现的问题
NBMA默认OSPF的工作方式为P2P类型,该工作方式仅允许建立一个邻居关系,导致无法在点到多点环境下建立所有的邻居关系。此时需要通过修改接口的工作方式来解决此问题;
①修改接口工作方式为Broadcast:
[huawei-Tunnel0/0/0]ospf network-type broadcast
②若同一NBMA网络内仅修改了部分接口的工作方式为Broadcast,而其他接口仍为P2P工作方式的话,此时能建邻,但无法选DR/BDR(P2P类型不选DR/BDR),最终仍然无法正常收敛。所以需要将NBMA所有接口均修改为Broadcast工作方式。
③修改后,若该NBMA网络的拓扑结构为全连网络结构,那么DR/BDR的选举正常。若为非全连拓扑结构,可能由于信息的不对称,导致DR/BDR选举结果出现问题。所以星型结构(中心到站点),DR必须固定在中心站点,无BDR;部分网状结构基于实际环境情况来决定是否固定DR。
④部分网状结构推荐使用p2mp工作方式,该模式只能手工配置,适用于部分网状结构,Hello time为30s,Dead time为120s,自动建邻不选DR/BDR。
OSPF配置
OSPF启动
[Router] ospf 1 router-id 1.1.1.1
其中1为OSPF的进程号(Process ID),只具有本地意义。1.1.1.1为RID(Router ID),写法类似于IP地址,为了标识此设备在该OSPF网络中的唯一性。
注: RID的产生方式(手工指定 > 环回接口IP地址最大的 > 物理接口中IP地址最大的)。
OSPF宣告
[Router-ospf-1-area-0.0.0.0] network 12.1.1.0 0.0.0.255
OSPF支持反掩码精确宣告,反掩码是由连续的0和连续的1所构成,其中连续的0对应固定位,连续的1对应随机位。
查表
(1)查看邻居表
[Router] display ospf peer
[Router] display ospf peer brief //简表
(2)查看数据库表
[Router] display ospf lsdb
(3)查看OSPF路由表
[Router] display ip routing-table protocol ospf
[Router] display ospf routing //查看本地所有与OSPF相关的路由(发出的与接收的)