OSPF协议

  OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。

RID

  RID(Router ID)为路由器ID标识,作为识别路由器的身份凭证,区域内的RID必须唯一,冲突会造成邻居关系无法形成。
OFPS中RID默认为自动生成,遵循自动选举规则:

(1)逻辑口优先,数字大优先

(2)物理口数字大优先

  RID一旦选取出来就是一个稳定的状态,重新配置会自动选取RID,实际应用中不推荐使用自动选取。


手动指定RID一般指定为loopback0的地址,设置方法如下: Router-id 1.1.1.1

DR和BDR

DR为指定路由器,BDR为备份指定路由器,DR和BDR的存在是为了减轻路由器负担,减少邻接关系

区域中路由器共分三个角色:DR(一个)、BDR(一个)、DRother(一个或多个)


他们之间的关系为:

DR和BDR:邻接

DR/BDR和DRother:邻接

DRother和DRohter:邻居

选举DR、BDR规则:

(1)比较接口优先级(大),默认为1,范围0-255

(2)比较RID(大)

若将接口优先级设为0,则不参与DR/BDR的选举,只能成为DRohter

DR一旦选举出来也是一个稳定状态

工作原理

  OSPF的简单说就是两个相邻的路由器通过发报文的形式成为邻居关系,邻居再相互发送链路状态信息形成邻接关系,之后各自根据最短路径算法算出路由,放在OSPF路由表,OSPF路由与其他路由比较后优的加入全局路由表。整个过程使用了五种报文、三个阶段、四张表。

五种报文

Hello报文:建立并维护邻居关系。

DBD报文(Database Description):发送链路状态头部信息。

LSR报文(Link-state Request):把从DBD中找出需要的链路状态头部信息传给邻居,请求完整信息。

LSU报文(Link-state Updata):将LSR请求的头部信息对应的完整信息发给邻居。

LSACK(Link-state Acknowledge):收到LSU报文后确认该报文。

三个阶段

邻居发现:通过发送Hello报文形成邻居关系。

路由通告:邻居间发送链路状态信息形成邻接关系。

路由计算:根据最短路径算法算出路由表。

四张表

邻居表:主要记录形成邻居关系路由器。

链路状态数据库:记录链路状态信息。

OSPF路由表:通过链路状态数据库得出。

全局路由表:OSPF路由与其他比较得出。

工作流程

  OSPF协议启动的第一步就是先要确定邻居关系,才能有之后的路由交换。邻居关系建立遵循四要素:

(1)RId不能冲突

(2)在hello/dead时间间隔内——hello:10 dead:40s

(3)区域号两端要一致

(4)认证要一致



  当两个路由器通过直连线连接时,一个路由器会先发出一个hello包,hello包中包含自身路由id(RID)和一些简单信息,如下图所示

  RouterA先发送一个hello包报告自身RID,RouterB接收到A发来的hello包后返回一个附带自身RID的hello包,A接收到后,两路由器便建立起了邻居关系。

  两个路由器建立起邻居关系后,便由DRBDR选举规则选举出DR和BDR,或手动设定出DR和BDR。有了DR后边开始进行路由信息的交换。

  图中ip为172.16.5.3的路由器被选举为DR,开始交换操作的DBD报文由DB统一分发给其他路由器,其他路由器接收到DBD报文后与自身链路状态数据库进行比对,并发送自身的DBD报文信息。

  双方都返回LSAck后边开始作所需路由条目信息的请求和响应,最后完成交换工作。

  这是两路由器间的数据交互流程,当一个路由器接收到LSU包时,具体的处理机制又是如何的?


如下图所示

  一个路由器接收到LSU后,会先查看此LSU包携带的信息是否存在于自己的路由表里,如果不存在,将其添加到自己的链路状态数据库中,再向发送LSU的路由器返回LSAck,并通过泛洪的方式告知自己的下级路由。

  当路由器发现此LSU已存在,并且于自己存储的信息一致时,会对此LSU包进行丢弃,且不做任何回复。若此LSU已存在但信息不一致,若此信息较信,会重复上段所述步骤进行信息更新,若此LSU包信息比自身存储信息要旧,则会在全网发送较信的LSU信息,实现全网同步。

原文地址:https://www.cnblogs.com/aqiao/p/13259113.html