一、OSPF介绍与特性

  OSPF(open shortest path first,开放最短路径优先),属于动态路由协议中的链路状态协议。何谓“链路状态”?链路指的是接口,状态指的是邻居接口之间的关系

  OSPF的AD=110,基于IP协议(即OSPF封装在IP协议中),协议号89(即在IP数据包的protocol会填写89)

特点:

  • 无路由环路
  • 每台路由拥有完整的网络拓扑
  • 采用SPF算法计算最短路径
  • OSPF数据包封装在IP数据包中
  • AD值为110
  • 适合中大型网络

二、OSPF基础知识

1.cost计算

cost计算我这里分为了两种:
1)单个接口cost计算
单个接口cost一般计算公式为= (100*1000K)/接口带宽
  其中接口带宽的单位是Kbit/sec,但是如果路由器接口带宽是超过100000Kbit/sec,那么单个接口cost计算结果一般小于或等于1,等于1还好,小于1的话怎么办?规定小于1的cost计算结果统一为1

2)路由的cost计算
  路由的cost计算都是基于单个接口cost计算得出的,路由的cost计算的基础就是某路由学习到A路由,那么A路由从目的路由器传递过来这一路上经过的每个路由器的入接口cost累计和

2.组播地址

  OSPF数据包的交互依赖组播地址224.0.0.5和224.0.0.6,其中224.0.0.5这个组播地址是所有启用OSPF的路由器所共同监听的,而224.0.0.6在broadcast网络类型中是DR和BDR监听的。

  注意在broadcast网络类型中,OSPF邻居建立完成后,DRothers都只和DR和BDR建立FULL关系,DRothers之间建立TWO-WAY关系。这里的关系也就是我们前面所说的“链路状态”中的状态。继续说,LSA泛洪完毕,如果此时某条链路断开则产生LSU和LSACK,假设DRothers_A下的链路断开,那么他会向224.0.0.6发送LSU(需要实验)

3.OSPF计时器

OSPF最重要的4个计时器,就是hello timedead timeLSA刷新时间LSA最大老化时间

  • hello time:该字段位于hello包中,默认设定时间为10s,启用OSPF的路由器接口将每10s发送一次hello包
  • dead time:该字段位于hello包中,默认设定时间为40s,在接口每次收到hello包之后,dead time重置,如果dead time倒计时为0时,仍然没有收到hello包,那么宣告该邻居失效
  • LSA刷新时间:为了保证每台路由器的LSA信息完整和有效,每隔30min将会执行LSDB泛洪,且每条LSA序列号 + 1,同时重置LSA age
  • LSA最大老化时间:当收到LSA时,重置LSA age时间,如果超过LSA age(即2*LSA刷新时间),那么LSA就会被从LSDB中删除。

4.接口优先级

  OSPF的接口优先级是用在broadcast网络类型中用于选举DR和BDR,接口优先级很容易懂,接口越“优先”(即优先级值越大),那么就越有可能成为老大/老二(即DR/BDR)。但是注意接口优先级值如果是0,那么表示该接口不参与broadcast网络类型的DR/BDR选举

5.router-id

  OSPF网络的router-id用于唯一标识OSPF域的路由器。同时也用于broadcast网络类型中用于选举DR和BDR。如果你没有修改OSPF域路由器的接口优先级,那么按照默认接口优先级都是相同的,但是仍需要选举出DR/BDR,所以需要另一个参数来比较,这个参数必须不能再相同,如果再相同也是不能比较并选举出DR/BDR的。如果你没有手动配置router-id,那么思科路由器的router-id自动选择是如果有loopback接口地址,那么使用最大的loopback接口地址为router-id,如果没有则选举出活跃物理接口中最大的接口IP地址为router-id

6.DR与BDR选举

  现在我们讲到前两个参数相关的DR和BDR选举了,DR/BDR选举只能在broadcast网络类型中选举。

为什么broadcast网络类型需要DR和BDR选举?
因为需要精简OSPF邻居数量,以减少OSPF数据包的交互和简化邻居关系。

什么是DR、BDR、DRothers?

  • DR是design router,即指定路由器
  • BDR是backup design router,即备份指定路由器
  • DRothers是其他路由器

  DR和BDR选举流程:同一个broadcast网络中的路由器发送hello报文,建立邻居后,开始先选举BDR,然后如果broadcast网络中没有DR,那么BDR成为DR,重新选举BDR。BDR/DR选举原则就是先比较邻居发送的hello包中的priority,大的成为BDR,如果hello包中的priority一致(一般都是一致的为1,因为一般不改priority,除非你不想让某台路由器的某个接口参加DR/BDR选举),那么根据hello数据包的ospf header中的router-id进行比较,大的成为BDR。这样选举出broadcast网络中的DR/BDR。剩下的不是DR和BDR的路由器接口就是DRothers。

值得注意的是DR和BDR选举完后,如果你想修改DRothers的priority为最大也是没有效果的,即DR/BDR非抢占原则。

7.序列号

OSPF两个序列号:

  • DD seq
  • LSA seq

1) DD seq
  DD序列号是用于确定DBD交互时master和slave的同步,该字段位于DBD报文中

2) LSA seq
  LSA序列号用于比较LSA的新和旧,该字段位于每个LSA中(一般完整LSA位于LSU和LSACK中)。LSA序列号长度为4字节,OSPF每隔30min泛洪LSA,以保持每一条LSA的有效性和LSDB同步。每次泛洪LSA都会将LSDB中的LSA的序列号 + 1,如果超过LSA age,那么LSA就会被删除

三、OSPF基本原理与实现

1.OSPF数据包

1)OSPF header

OSPF数据包 = OSPF header(24字节) + OSPF data

  OSPF data带着是5种不同的OSPF数据包类型,比如hello、DBD、LSR、LSU、LSACK。而5种不同的OSPF数据包有着相同的OSPF header。那么先介绍OSPF header,然后在下个小节中介绍5种OSPF data

OSPF header
  • 版本:IPV4使用的OSPFv2、IPV6使用的是OSPFv3
  • 类型:5种OSPF数据包类型(hello、DBD、LSR、LSU、LSACK)
  • 总长度:ospf header + ospf data
  • router-id:即OSPF路由器的router-id
  • area-id:OSPF接口所处的OSPF区域,如果是虚链路这里会填写0.0.0.0,因为虚链路被认为是骨干的一部分
  • 认证类型:如果OSPF链路两端配置了认证,才会有下面的认证*字段
  • 数据部分:这里就需要根据OSPF数据包类型来决定了

其中影响邻居建立的字段是area-id、认证

2)OSPF数据包类型

简单了解下5种OSPF数据包类型

OSPF header

hello

作用:用于建立和保活OSPF邻居,其中部分字段会影响OSPF邻居的建立,比如area-id、网络掩码、认证、hello-time、dead-time

OSPF header
  • 网络掩码:指发送数据包的接口的网络掩码,网络掩码影响OSPF邻居建立
  • hello time:指接口发送hello包的间隔时间,hello time影响OSPF邻居建立
  • 可选项:见可选项
  • priority:接口的优先级
  • dead time:指接收到hello包的最大时间,如果在该时间段内没有收到hello包,那么就会将邻居断开
  • DR:指broadcast网络上的DR接口IP地址
  • BDR:指broadcast网络上的BDR接口IP地址
  • 邻居:在dead time时间内建立的邻居router-id列表

tips:

  • 如果接口网络掩码不同,那么DR无法用2类LSA描述你这台路由器,所以会影响OSPF邻居建立
  • 如果接口网络类型为P2P,同时接口网络掩码不同,尽管邻居可以建立,但是路由无法加表!

DBD

作用:DBD报文用于正在建立的邻居关系

OSPF header
  • 接口MTU:指定接口所允许的MTU大小
  • 可选项:见可选项
  • I M MS:
    • I:如果I位=1,那么表示该DBD包是第一个DBD包
    • M:如果M位=1,那么表示该DBD包不是最后一个
    • MS:如果MS=1,表示发送该DBD包的是master,如果MS=0,表示发送该DBD包的是slave
  • DD序列号:在LSDB同步过程中,需要确保路由器能够收到完整的DBD序列,由master指定,后续DD seq依次增加
  • LSA首部:列出始发路由器的LSDB中的部分或全部LSA首部

LSR

作用:收到DBD后,对比本地LSDB中的LSA,如果有感兴趣的LSA,本路由器会使用LSR封装感兴趣的LSA首部进入数据部分中发送到链路上

OSPF header
  • LSA type:1类LSA-7类LSA(除6类LSA)
  • link state id:根据LSA type变化而变化,具体见LSA详解中每种LSA的link state id
  • advertising router:是指始发LSA通告的路由器的router-id

LSU

作用:LSU是用于完整LSA信息的泛洪扩散和发送LSA去响应LSR的。OSPF数据包是不能离开发起他们的网络的,因此一个LSU可以携带一个或多个完整的LSA,但是这些LSA只能传送到始发路由器的直连邻居。接收LSA的邻居路由器将负责在新的LSU中重新封装相关的LSA,从而进一步泛洪扩散到自己的邻居

OSPF header
  • LSA数目:记录该LSU中携带了多少个LSA
  • LSA:会有多个LSA,LSA中不仅有LSA首部,会有更加详细的LSA信息,见LSA详解

LSACK

为什么需要LSACK?因为OSPF基于IP协议,而根据IP协议的首部字段得知IP协议不可靠,为了保证OSPF的数据包可靠交互,需要增加该数据包

LSACK的内容就是LSA首部

《 OSPF 第二部分 ,当前占位》


保持一个积极向上的良好心态,分享网络技术!