OSPF讲解
开放式最短路径优先协议:OSPF 是IETF(公有标准)定义的一种基于链路状态的内部网关路由协议(IGP)。支持中到大型企业网络(路由器数量100台左右、路由条目2-3万条、功能多)、属于无类协议,支持VLSM和CIDR。
版本:V1(实验室)、V2(支持IPv4)、V3(同时支持IPv4和IPv6--双栈模式)
算法:采用的SPF算法(迪杰斯特拉),即最小生成树算法(传递拓扑和路由信息)
特点:1、不易环路-ospf区域内采用SPF最短路径算法,是不存在路由环路的,OSPF区域间传递路由信息的时候,传递的是路由协议,也就是说OSPF区域之间传递路由信息的时候,可能会产生路由环路。
2、收敛速度--支持触发更新,能够快速检测并通告自治系统内的拓扑变化; ERGRP>IS-IS>OSPF>RIP
协议特点:
1、OSPF 把自治系统划分成逻辑意义上的一个或多个区域;
2、OSPF 通过 LSA(Link State Advertisement)的形式发布路由;
3、OSPF 依靠在 OSPF 区域内各设备间交互 OSPF 报文来达到路由信息的统一;
4、OSPF 报文封装在 IP 报文内,可以采用单播或组播的形式发送。
工作原理:
OSPF要求区域内每台运行OSPF的路由器都了解区域内的链路状态信息,这样才能计算出到达目的地的最优路径。首先路由器之间发送hello报文建立邻居和邻接关系,形成邻居表;
邻居之间通过LSA泛洪交互拓扑信息,LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息,收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB形成拓扑表;
路由器在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树,通过计算得出到达每个目的网络的最优路由并将其加入到IP路由表中,形成路由表。
介绍一下报头信息
OSPF报头封装:Layer2 /IPv4/OSPF/FCS(IP协议号为89)

Version:版本字段,指出所采用的OSPF协议版本号(V1\V2\V3)
Packet Type:报文类型字段,标识对应报文的类型。OSPF有5种报文,分别是:Hello报文、DBD报文、LSR报文、LSU报文、LSAck报文。
Packet Length:报文长度字段,整个报文(OSPF报头和报文)的字节长度。
Router ID:路由器ID字段,指定发送报文的源路由器ID。
Area ID:区域ID字段,指定发送报文的路由器所对应的OSPF区域号。
Checksum:校验和字段,对OSPF报头和各报文具体内容但不包括下面的Authentication字段的校验和,用于对端路由器校验报文的完整性和正确性。
AuType:认证类型字段,0为不认证,1为明文认证,2采用MD5密文认证。
Authentication:认证字段,具体值根据不同认证类型而定:认证类型为不认证时,此字段没有数据,认证类型为简单认证时,此字段为认证密码,认证类型为MD5认证时,此字段为MD5摘要消息。
OSPF五种报文类型
1、Hello:建立和维护OSPF邻居关系,10s发送一次
2、DBD:链路状态数据库描述信息(描述LSDB中LSA头部信息)
3、LSR:链路状态请求,向OSPF邻居请求链路状态信息
4、LSU:链路状态更新(包含一条或多条LSA)
5、LSAck:链路状态确认包,对LSA进行确认
LSDB:链路状态数据库;LSDB由LSA汇总得到的
LSU: 链路状态跟新,用于封装LSA,一个LSU包含一个或多个LSA
LSA:链路状态通告,内容包含拓扑信息和路由信息;共11种类型(0-11),1类LSA是在区域内泛洪发送;2类LSA在区域内子网络发送;3类LSA是在ABR设备上发送跨区域通告;4类LSA在区域间发送描述AS边节点的。5类、7类。
OSPF报文类型:
1、Hello 报文:邻居发现报文(根据网络类型10s或30s发送一次);用于发现和实时的维护邻居关系,并在广播和非广播网络类型中选举DR/BDR.
2、DBD报文:数据库描述报文;两台路由器进行LSDB数据库同步时,用DBD报文来描述自己的LSDB。DBD报文的内容包括LSDB中每一条LSA的头部(LSA的头部可以唯一标识一条LSA)和序列号。LSA头部只占一条LSA的整个数据流量的一小部分,这样就可以减少对链路带宽的消耗。
3、LSR报文:链路状态请求报文;两台路由器互相交换过DBD报文之后,知道对端的路由器有哪些LSA是本地LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA(内容包含link state ID、ADV router、LSA类型、LSA序列号)。
4、LSU报文:链路状态更新报文;用来向对端路由器发送所需要的LSA。
5、LSACK报文:链路状态确认报文;用来对接收到的LSU报文进行确认。
确认机制一:显式确认--一发一确认(使用单独的报文确认) LSR/LSU/LSACK
确认机制二:隐式确认---一发一回应(使用相同的报文+序列号回应)DBD
点到点网络:使用组播地址224.0.0.5发送
广播网络:hello(组)、DD(单)、LSR(单播)、LSU(组播)、LSACK(组播)
邻居状态机:

邻居和邻接关系建立的过程如下:
1、Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
2、Attempt:此状态只在NBMA/点到多点非广播网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为Hello发送周期。如果四倍Hello发送周期内未收到邻居的Hello报文,则转为Down状态。
3、Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中(路由器ID),尚未与邻居建立双向通信关系。
4、2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态(邻居关系已建立,可以发送hello报文)。
-广播、非广播网络:选举指定/备份路由器DR/BDR(full)、DR Others(2-way)
-比较参选路由器OSPF优先级(0-255,默认1,0没有参选资格,值越高越优先)
-优先级相同时,继而比较路由器ID,值越高越优先(DR/BDR选举不支持抢占)
-点到点网络/点到多点(非广播)不需要选举主/备份路由器DR/BDR
注:DR Others只和DR/BDR建立邻居/邻接关系,DR Others发送跟新给DR/BDR时使用组播地址224.0.0.6;DR/BDR和DR Others之间同步跟新时使用组播地址224.0.0.5;选举时间为4倍的hello时间(wait interval为40S或120S)。
5、ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DBD报文。主从关系是在此状态下形成的,初始DBD序列号也是在此状态下决定的,在此状态下发送的DBD报文不包含链路状态描述。
路由器使用DBD报文进行主从路由器(Master/Slave)的选举和数据库摘要信息交互过程:
-邻居状态变为ExStart以后,RTA向RTB发送第一个DBD报文(载荷为空),在这个报文中,DBD序列号被设置为X(假设),RTA宣告自己为主路由器。RTB也向RTA发送第一个DBD报文,在这个报文中,DBD序列号被设置为Y(假设)。RTB也宣告自己为主路由器。由于RTB的Router ID比RTA的大,所以RTB应当为主路由器(DBD中包含MTU和router ID,思科默认开启MTU一致性检测)。
-主路由器(MAster):发起第一个DBD报文;确认序列号
-从路由器(Slave):仅仅对主路由器发送的DBD报文做确认
6、Exchange:此状态下路由器相互发送包含链路状态信息摘要的DBD报文,描述本地LSDB的内容。
7、Loading:相互发送LSR报文请求LSA,互相发送LSU/LSACK报文互相同步LSA
8、Full:路由器的LSDB已经同步(邻接关系已建立,可以发送hello、LSDB、路由信息)。
OSPF建立邻居、邻接关系需要满足的条件:
1、版本必须一致(OSPF报头中/2-way)
2、Router ID不能冲突(OSPF报头中/2-way)
3、直连路由器两端的区域号Area保持一致;和接收端口所属区域的Area ID不一致,但是值为0,表示属于骨干区域,而且是在一个虚连接上发送的;(OSPF报头中/2-way)
4、认证类型和认证密钥保持一致(OSPF报头中/2-way)
5、掩码保持一致(HELLO报文中/2-way)广播/非广播网络中需保持一致
6、Hello时间、Dead时间保持一致(HELLO报文中/2-way)
7、Option字段中,E位和N位区域类型保持一致(HELLO报文中/2-way)
8、直连链路两端的MTU值保持一致(first DBD报文中)
9、直连链路两端的网络类型匹配,否则FULL状态下不能交互LSA

浙公网安备 33010602011771号