OSPF(Open Shortest Path First,开放式最短路径优先)是IEIF定义的一种基于链路状态(LS)的内部网关协议(IGP)目前针对IPV4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740).
hello包用于周期发现、建立和保活邻居关系。当路由器启动ospf进程后,默认每10秒(hello时间,可以修改)发送一个hello包,hello中携带自己的RID和已知邻居的RID,当路由器收到的hello包中包含自己的RID,建立邻居关系。建立邻居关系之后通过hello包告诉邻居我还在,即保活作用。如果过了40秒(dead-time 4倍的hello时间)任没有收到邻居的hello包,即认为该邻居消失。
注:RID:因为ospf传递的是拓扑信息,需要一个参数对所有路由器进行区分和标定,所以ospf引入RID来完成这个工作,RID在ospf网路内具有唯一性,且由32位二进制构成,采用IP地址的格式。RID可以手工配置或自动获取,如果是自动获取,设备将会在自己环回接口的IP地址中选择最大的作为自己的RID。如果没有环回接口,则将在自己的物理接口上选择IP地址最大的作为RID。
DBD报文(Database Description Packet)
由于ospf传递的拓扑信息庞大,所以ospf在互相传递LSA时,先将本地lsa信息的目录传给对方,对方在根据目录选择自己没有的LSA信息,这个目录信息就是DBD包。
LSR报文:(Link-state Request Packet)
通过DBD包获取邻居的lsa信息目录后,将收到的lsa信息目录和本地数据库进行对比,然后通过LSR包向邻居请求本地所没有的lsa信息
状态机总结:
1、运行链路状态路由信息的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。
2、每台路由器都会产生LSA,路由器将接收到的LSA放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑。
3、每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算,每台路由器都计算出一颗以自己为根的、无环的、拥有最短路径的“树”。有了这棵”树“,路由器就已经知道了到达网络各个角落的优选路径。
4、最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。
四步:
指定路由器 — DR
备份指定路由器 — BDR
注意两点:
DR/BDR的选举:
选举规则:
1、先比较优先级。优先级最大的为DR,优先级次大的为BDR。
优先级的取值方位是0-255,优先级的默认值是1.
优先级
若一个接口的优先级设置为0,则代表该接口放弃DR/BDR选举。
若优先级相同,则比较RID,RID大的路由器对应的接口为DR,次大的为BDR。
选举模式:
OSPF头部指的是所有五种OSPF数据包都包含的公共参数部分。头部长度为24个字节。
HELLO — 周期性发现,建立,保活邻居关系。DR/BDR选举。
网络掩码 — 发出该数据包接口所配置的IP地址掩码信息。 — 华为体系中这个参数邻居双方所携带的值不一致将无法正常建立邻居关系。 — 这个限制条件仅针对MA网络,P2P网络不受限制。
hello时间,死亡时间
— 如果邻居双方这两时间参数不同,则将限制邻居关系的建立。
可选项 — 8位 — 每一位代表路由器遵从某个OSPF特性 — OSPF特殊区域的标记在其中,如果邻居双方特殊区域的标记不一致,则将限制邻居关系的建立。
路由器的优先级 — 发出hello包接口所配置的DR/BDR选举的优先级
DR/BDR
— 网络中DR和BDR所对应接口的IP地址。在没有选出DR和BDR之前,将使用0.0.0.0进行填充。
Hello包中限制邻居关系建立的因素:
网络掩码(Network Mask):一旦路由器的某个接口激活了OSPF,该接口即开始发送Hello报文,该字段填充的是该接口的网络掩码。两台OSPF 路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码,如果一方在接口上收到的Hello报文中“网络掩码”字段与本地接口不同,则忽略该Hello报文,此时邻居关系无法正确建立。
Hello间隔(Hello lnterval):接口周期性发送Hello报文的时间间隔(单位为s)。两台直连路由器要建立OSPF邻居关系,需确保接口的Hello lnterval相同,否则邻居关系无法正常建立。缺省情况下,OSPF路由器在P2P或Broadcast类型的接口上的 Hello间隔为10s,在NBMA及P2MP类型的接口上的Hello间隔为30s.
可选项(Options):该字段一共8bit,每个比特位都用于指示该路由器的某个特定的OSPF 特性。路由器通过设置相应的Options比特位来通告自己支持某种特性或者拥有某种能力。OSPF 邻接关系建立过程中,Options字段中的某些比特位会被检查,这有可能会直接影响到OSPF邻接关系的建立。 (特殊区域的标记)
路由器优先级(Router Priority:路由器优先级,也叫DR优先级,该字段用于DR、BDR 的选举。在华为的数通产品上,缺省时OSPF接口的DR优先级为1,这个值是可以通过命令修改的。OSPF在多路访问网络(MA)中会进行DR(Designated Router,指定路由器)和BDR(Backup Designated Router,备用指定路由器)选举,而该字段的值将对选举结果产生影响
路由器失效时间(Router Dead nterval):在邻居路由器被视为无效前,需等待收到对方Hello报文的时间(单位为s)。两台直连路由器要建立OSPF 邻居关系,需确保双方直连接口的Router Dead lnterval相同,否则邻居关系无法正常建立。缺省情况下,OSPF路由器接口的Router Dead nterval为该接口的Hello lnterval的4倍
指定路由器(Designated Router):网络中DR的接口IP地址。如果该字段值为0.0.0.0,则表示没有DR,或者DR尚未选举出来。
备份指定路由器(Backup Designated Router):网络中 BDR的接口IP地址。如果该字段值为0.0.0.0,则表示网络中没有BDR,或者BDR尚未选举出来。
邻居(Neighbor)。在直连链路上发现的有效邻居,此处填充的是邻居的Router-iD,如果发现了多个邻居,则包含多个邻居字段。
DBD包
— 数据库描述报文
DBD包还存在第三种形态,即仅完成确认的确认包状态。
MTU
— 设备默认没有开启接口MTU值的检测,所以将携带0。
[r1-Serial4/0/0]ospf mtu-enable
— 如果邻居双方都开启了MTU值的检测,但是,双方携带的MTU值不同,则邻居状态将停留在Exstart
状态。
I
— init
— 如果这个标记位置1,则这个DBD包是进行主从关系选举的数据包。
M
— MORE
— 该位置1,则代表后面还有更多的DBD包。
MS
— Master
— 该位置1,则代表发送该数据包的路由器为主。 — 在主从关系选举出来之前,双方都将认为自己是主,所以,都会将字节的MS置1;当主从关系选举结束后,将只有主会置1,从置0。
DBD序列号
— 在DBD报文交互中,会逐次加1,用于确保DBD包传输的有序性及可靠性。
接口最大传输单元(interface Maximum Transmission Unit):接口的MTL。以华为AR2200路由器为例,缺省时授口发送的DD报文中,无论该接口实际的MTU值是多少,i该字段的值都为0.
可选项(Options):路由器支持的OSPF可选项
I位(lnitial Bit):也即初始化位,当该DD报文用于协商Master/Slave路由器时,该比特位被置1,Master/Slave选举完成后,该比特位被置0
M位(More Bit);该比特位如果设置为1,则表示后续还有更多的DD报文;如果被设置为0,则表示这是最后一个DD报文。
MS位(Master Bit):Master路由器在自己发送的DD报文中将该比特位设置为1,slave路由器贝修其设置为0.
DD序列号(DDSequence Number):DD报文的序列号,在DD报文交互的过程中,DD序列号被逐次加1,用于确保DD报文传输的有序和可靠性。值得注意的是,DD序列号必须是由Master路由器来决定的,而Slave路由器只能使用Master路由器发送的DD序列号来发送自己的DD报文。** (这个做法就是隐性确认,通过对方发送的数据包中的序列号,起到确认的效果。DBD包的主从关系选举就是为了完成隐性确认的)**
LSA头部(LSA Header):当路由器使用DD报文来描述自己的LSDB时,LSA的头部信息被包含在此处。一个DD报文可能包含一条或多条LSA的头部。
LSR
— 链路状态请求报文 — 基于DBD包请求未知的LSA信息。
链路状态类型,链路状态ID,通告路由器 — LSA
三元组 — 这三个参数可以唯一的标识出来一条LSA信息。
LSU包
— 链路状态更新报文 — 真正携带LSA信息的数据包
路由器收到邻居发送过来的LSR后,会以LSU报文进行回应,在LSU报文中就包含了对方请求的LSA的完整信息,一个LSU报文可以包含多个LSA。另外,当路由器感知到网络发生变化时,也可以触发LSU报文的泛洪,以便将该变化通知给网络中的其他OSPF 路由器。在多路访问网络中,非 DR、BDR路由器向224.0.0.6这个组播地址发送LSU报文,而DR及BDR会侦听这个组播地址,DR在接收LSU报文后向224.0.0.5发送LSU报文,从而将更新信息泛洪到整个OSPF区域,所有的OSPF 路由器都会侦听224.0.0.5这个组播地址。
LSACK
— 链路状态确认报文 — 确认包
为了确保LSA 能够可靠送达,当一台路由器收到邻居发送过来的LSU报文时,需要对报文中包合的 LSA进行比对,心训后个ISA斗部的长度为20byte)。图3-9展报文中包含着路由器所确认的LSA的头部(每个LSA头部的长度为20byte)。
OSPF的许多功能或特性都是基于接口实现的,当一个按口派泊代RN民矶表、会维护许多OSPF变重,例如只从汝八rTrne)也是其中之一,而且是一个非常重要的认证类型等,接口的网络类型(Network-Type) 也是其中之一,而且是一个非常重要的变量。OSPF 接口的网络类型与该接口采用的数据链路层封装有关,在不同网络类型的接口上OSPE的操作有所不同。
OSPF的接口网络类型:
P2P
MA
BMA
NBMA
OSPF接口网络类型 — 指的是OSPF接口在不同的网络类型默认下的不同工作方式。
[r2]display ospf interface GigabitEthernet 0/0/0
— 查看OSPF接口工作方式
在华为体系中,将环回接口在OSPF中的开销值定义为0,不会受到外界变化的影响。(修改参考带宽不会影响该值。)
[r2-LoopBack0]ospf network-type broadcast
— 修改OSPF接口网络类型
华为体系将tunnel接口的传输速率定义为64K,实际上虚拟接口不存在传输速率。这样设定的目的是为了让隧道接口的开销值变的很大,导致在存在其他路径时,尽可能的避免走隧道接口,因为隧道接口需要进行复杂的封装和解封装过程,导致效率降低。
全连的MGRE环境 — MESH
— 所有节点即使中心,也是分支。
[r1-ospf-1]peer 12.0.0.2
— 指定单播邻居 — 一定需要双向指定。
Attempt
— 尝试 — 过度状态,只有在需要手工指定邻居关系的状态下出现,在指定对方后等待对方指定时将处于该状态,一旦对方指定,则将进行后续状态。
注意:两个路由器的直连接口即使网络类型不匹配,也能够建立起OSPF邻接关系,但是OSPF路由的计算却是极有可能出现问题的,这是因为接口的网络类型会影响到路由器产生的LSA中对该接口的描述,而这将关系到路由器对网络拓扑的理解以及路由的计算。因此,OSPF邻居的互联接口网络类型必须一致