一、OSPF协议概述
OSPT:开放式最短路径优先协议;ospf是无类别链路状态型路由协议,邻居间基于拓扑信息进行交互,更新量很大,故为了能在复杂的中大型网络中工作,需要结构化的部署(良好的IP地址规划和区域划分)。
二、OSPF的数据包类型
1.Hello包 --- 周期收发,用于邻居的发现,邻居关系的建立、周期的保活(时间为10s或30s)
2.DBD包 --- 数据库描述包 , 用于携带数据库目录
3.LSR包 --- 数据链路状态请求包 , 基于本地未知的LSA信息进行查询
4.LSU包 --- 数据链路状态更新包 , 用于传递具体的LSA信息
5.LSACK包 --- 数据链路状态确认包, 用于确认和保持可靠性
什么是LSA(LSA---链路状态通告---具体的每一条的拓扑或路由信息)
Hello包:在OSPF中Hello包为周期收发,邻居间的hello包的参数必须完全一直,不然无法建立邻居。
有以下几个参数:RID;Hello、dead time;区域编号;认证字段;末梢区域标记;在华为设备中邻居间hello包还将携带建邻的接口ip地址子网掩码,也必须和邻居一致;(如下图)
、
DBD包:DBD包中携带接口的MTU值,要求两端接口MTU一致,否则将卡在exstart状态机;华为设备默认不携带MTU值。
DBD包中的描述位:
I 为1表示本地发出的第一个DBD
M 为0表示本地发出的最后一个DBD
MS 为1表示本地为主,为0表示本地为从
DBD使用序列号来进行隐性确认,从基于主的序列号进行;
三、OSPF状态机 --- 邻居间邻居关系的不同阶段
1.Down(路由器刚开始的状态),一旦接受到Hello包便进入到下一个状态
2.init(初始化),接收到的Hello包中若存在本地的RID,进入下一个状态
3.two-way(双向通信),邻居关系建立的标标志
详解:AR1向AR2发送Hello包,告诉AR2我是192.168.1.1,我谁都不认识,AR2接收到了hello包(AR2此时的状态为init),接下来AR2向AR1发送hello包,告诉AR1我是192.168.1.2,我认识192.168.1.1,AR1接受到了hello包(此时AR1的状态为two-way,AR2的状态依旧是init---同理等AR1告诉它他自己的AID是,它的状态也就变成了two-way)
注意:此时发送hello是以组播的方式进行发送的
由two-way状态转入下一个状态机的条件(点到点网络可以直接进入下一个转台机,MA网络进行DR/BDR选举进入下一个状态机,非DR/BDR间不可以进入下一个状态机)
4.Exstart(预启动), 此时使用不携带数据库目录的DBD包来进行主从关系的选举,RID数值大的为主,主可以优先进入下一个状态机。此时路由间的邻居关系变为邻接关系。(Exstart选主从关系,避免同时更新,导致网络拥塞)
5.Exchange(准交换),使用携带路由条目的DBD包来进行交换。
6.loading(加载), 查看完其他邻接发来的DBD后,基于本地未知的LSA信息,查询后使用LSR向对端发起请求,对端接受到后发送LSU来共享这些LSA信息,本地收到后发送LSACK确认包(这个状态是为了让邻接间数据库的一直)
7.FULL(转发)邻接关系建立的标志
四、OSPF工作过程
启动配置后,邻居间组播发送Hello包,获取对端的RID,建立邻居后,生成邻居表;邻居关系建立后,关乎条件,条件不匹配的邻居间,将维持邻居关系,仅发送Hello包周期保活即可;
如果条件满足:可以建立邻接关系
将使用DBD、LSR、LSU、LSACK来进行交换、分享,同步数据库,获取未知的LSA信息,最终生成与邻接一致的数据库表。
当数据库表同步之后,本地使用SPF算法,将数据库表转化为有向图,再将有向图计算为最短路径树,然后以本地为起点,计算出到达所有陌生网段的最短路径,然后再将这些最短路径加载到本地的路由表中。收敛完成;
如果拓扑结构发生以下改变
1.新增网段:直连设备新增网段,使用LSU直接向本地所以的邻接设备触发更新,对端需要进行确认;
2.断开网段:直连设备断开网段,使用SUL直接向本地所以的邻接设备触发更新,对端需要进行确认;
3.无法沟通:没有周期的Hello包; deat time为hello time的4倍,正常被每一个新的hello刷新,归零时自动断开邻居关系,删除该邻接共享的信息。
注意:
选路时,在华为设备中,默认的优先级为10;使用cost作为度量;
Cost=开销值=参考带宽/接口带宽
默认参考带宽100M;cost值向上取整数;故当接口带宽大于参考带宽时,cost值为1;可能导致选路不佳;可以手工修改默认的参考带宽:ospf协议默认将选择cost值之和最小的路径,为最短路径加表;
五、OSPF邻居关系建立为邻接关系的条件
1.点到点网络 --- 直接由邻居关系建立为邻接关系
2.MA网络 --- 在MA网络中,如果两两间都建立邻接关系,将可能出现大量的重复更新;DV距离矢量路由协议可以使用接口水平分割来解决,由于OSPF邻接需要进行数据库对比,故不能设计接口水平分割;只能通过,DR/BDR选举来解决;所有非DR/BDR之间为邻居关系,不进行数据库的同步
选举规则:
1.先比较选举接口的优先级,默认为1,优先级高的为DR,优先级次高的为BDR,若优先级为0则不参选;
2.如若优先级相同,则比较参选设备的RID数值,数值大的为DP,次高的为BDR
DR/BDR的作用:DR负责将链接状态更新转发给多播网络上的其他路由器,BDR充当DR的备份,当DR失效时,BDR将立即接替其职责,确保网络的稳定性。
DR/BDR选举过程流程图
六、OSPF的网络接口类型 --- ospf在不同网络中的工作模式
1.在LooopBack中:ospf工作方式为环回专用工作模式 , 没有hello包,以32位主机路由传递
2.点到点类型(PPP,HDLC,GRE):ospf工作方式为P2P , hello time为10s ,无需选举DR,邻居直接建立为邻接
3.BMA(以太网):ospf工作方式为Broadcast ,hello time为10s,需要选举DR,非DR/BDR仅为邻居关系。
4.NBMA(MGRE) 默认和普通GRE一样接口工作方式为p2p,该工作方式在华为设备上仅和最先收到的hello包建立邻居关系;
故在MGRE环境需要手工修改接口工作方式:
[r1-Tunnel0/0/0]ospf network-type ?
broadcast Specify OSPF broadcast network
nbma Specify OSPF NBMA network
p2mp Specify OSPF point-to-multipoint network
p2p Specify OSPF point-to-point network
注意:邻居间的网络接口工作方式必须一致,这样才可以进行正常的建邻和正常收敛,p2p 和broadcast 两种工作方式的hello time均为10s,故可以建立邻居关系,但在DR选举上不同,故无法正常交流LSA;
若将MGRE下所有接口的工作方式修改为broadcast,需要关注拓扑结构:
- 全连网状结构,可以正常工作,正常选举DR/BDR
- 非全连 ---管理员手工合理安排DR位置
- 星型结构-- 仅中心站点为DR,无BDR
补充:
OSPF区域划分规则:
- 必须为星型结构 区域0为骨干,大于0为非骨干,非骨干必须连接骨干区域
- 区域间必须使用ABR来互联 -- ABR区域边界路由器