#电脑#
上帝观

原始门户:
https://mp.weixin.qq.com/s/U5rLJ7M_gsk5nOw3hJOLsw
OSPF出现在背景中
上图是一个简单的OSPF网络,那么为什么会出现OSPF呢?
开放式最短路径优先OSPF协议是由IETF定义的基于链路状态的内部网关路由协议。
为什么OSPF会发生?:因为RIP是基于距离矢量算法的路由协议,所以它存在
收敛慢;容易产生路由环路;扩展性差,最大只能支持15跳。
OSPF的出现很好地解决了上述三个问题,那么OSPF是如何解决上述三个问题的呢?我们一起来看看吧。
什么是OSPF协议?
OSPF是一种基于链路状态的路由协议,它通过设计保证没有路由环路。
那么什么是链路状态协议呢?
如果距离矢量路由协议提供路标,那么链路状态路由协议提供地图。每台运行链路状态协议的路由器都有完整的网络图。
就像你有地图怎么会迷路?每台运行链路状态协议的路由器都有一个映射库来避免环路。
链路状态协议的工作原理
每台运行链路状态路由协议的路由器都知道整个网络的链路状态信息,从而计算出到达目的地的最佳路径。
1.LSA洪水:
运行链路状态路由协议的路由器会大量发送链路状态通告LSA,其中包含路由器的已知接口状态、接口IP地址、掩码、开销和网络类型。
一般来说,每台路由器都会向其它相邻路由器发送一些有关自身、本地直接链路、这些链路的状态以及所有直接相连邻居的信息。
2.建立LSDB:
收到LSA的路由器可以根据LSA提供的信息建立自己的链路状态数据库LSDB。
一般来说,每台路由器都会收到网络中其它路由器的LSA信息,所有这些LSA信息构成了LSDB。这里应该注意,当网络稳定时,网络中的所有设备应该具有相同的LSDB。
3.建立最短路径树:
运行OSPF协议的路由器在LSDB的基础上使用SPF算法进行计算,并建立到每个网络的最短路径树。
4.路由计算:
通过最短路径树获得到达目的网络的最佳路由,并将其添加到IP路由表中。
常见的链路状态协议有:
OSPF:开放最短路径优先协议
IS-IS:中间系统到中间系统协议
OSPF议定书的特点
OSPF支持区域的划分,区域内的路由器使用SPF最短路径算法,保证区域内部无环;
a、为什么要划分区域?
划分OSPF区域可以减少路由器的LSDB规模,减少网络流量。
一个区域内的详细拓扑信息不会发送到其他区域,而是在区域间传输抽象的路由信息,而不是描述拓扑结构的详细链路状态信息。
每个地区都有自己的LSDB,不同地区的LSDB是不同的。路由器将为其连接的每个区域维护一个单独的LSDB。因为详细的链路状态信息不会在区域外发布,所以LSDB的规模大大减小。
B.OSPF是如何划分区域的?
1.路由器的每个接口可以划分为一个区域,一个路由器可以同时属于多个区域。
2.0区为骨干区,其他区域为非骨干区。每个非主干区域必须连接到主干区域。
3.在区域之间运行的路由器称为区域边界路由器ABR,它包含所有相连区域的LSDB。
自治系统边界路由器ASBR是指与其他AS中的路由器交换路由信息的路由器,该路由器会向整个AS通告该AS的外部路由信息。
C.为什么SPF算法可以保证区域内无环路?
SPF算法以每个路由器为根来计算它到每个目的路由器的距离,每个路由器会根据一个统一的数据库来计算路由域的拓扑图,类似于一棵树。在SPF算法中,它被称为最短路径树。该树是无环的。
OSPF区域之间的连接规则确保区域之间没有路由环路。
为了避免区域间的路由环路,非骨干区域不允许直接相互发布路由信息,所有非骨干区域都需要依靠骨干区域进行通信。因此,每个区域都必须连接到主干区域。
以OSPF LSA的形式发行航线;
OSPF依靠OSPF地区设备间OSPF报文的交互,实现路由信息的统一;
OSPF消息封装在IP消息中,可以以单播或组播的形式发送;
OSPF支持触发更新,它可以快速检测和宣布自治系统中的拓扑变化。
OSPF协议的路由器id
路由器ID
路由器ID是一个32位值,用于唯一标识自治系统中的路由器。您可以为运行OSPF的每台路由器手动配置路由器ID,或者指定IP地址作为路由器ID。
如果路由器ID不是手动配置的,运行OSPF的路由器如何选择路由器ID?
1.如果设备有多个逻辑接口地址,路由器使用逻辑接口中最大的IP地址作为路由器ID;;
2.如果没有配置逻辑接口,路由器将使用物理接口的最大IP地址作为路由器ID。
注意:
1.为运行OSPF的路由器配置新的路由器ID后,有必要通过重置路由器上的OSPF进程来更新路由器ID。
2.通常建议手动配置路由器ID,防止路由器ID因接口地址改变而改变。

OSPF协议邻居/邻接
邻居:
路由器启动后,它会通过OSPF接口发送Hello消息来发现邻居。
接收到Hello报文的OSPF路由器会检查报文中定义的一些参数,如果双方参数一致,就会彼此形成邻居关系。
毗邻:
形成邻居关系的两端可能不总是形成相邻关系,这取决于网络类型。
只有双方成功交换DD报文和LSA,才能形成真正的邻接。
OSPF协议网络类型
OSPF协议支持四种网络类型,即点对点网络、广播网络、NBMA网络和点对多点网络。
1.点对点网络是指只有两台路由器直接相连的网络。运行PPP的64K串行线路就是点对点网络的一个例子。
2.广播网络是指支持两台以上路由器并具有广播能力的网络。有三台路由器的以太网就是广播网络的一个例子。
OSPF可以在不支持广播的多个接入网络上运行。此类网络包括帧中继和异步传输模式网络,它们运行在星型拓扑结构上,这些网络的通信依赖于虚电路。
OSPF定义了两种支持多址接入的网络:非广播多址接入网络和点到多点网络。
3.NBMA:在NBMA网络中,OSPF模拟广播网络的运行,但每台路由器的邻居需要手动配置。NBMA要求网络中的路由器形成完整的连接。
默认情况下,OSPF认为帧中继和ATM的网络类型是NBMA。
4.P2MP:把整个网络想象成一组点对点的网络。点对多点模式应该用于不能完全连接的网络。
注意:
现有的网络大多属于点对点网络和广播网络,因为帧中继和ATM网络已经基本被淘汰。
DR和BDR选举
为了减少广播网络和NBMA网络中的OSPF流量,OSPF将选择一台指定路由器和一台备用指定路由器。
选举DR和BDR的条件:
至少有两台路由器的每个广播网络和NBMA网络都有一个DR和BDR。点对点网络和P2MP中不需要选举DRBDR。
DRBDR的工作原理
1.指定DR后,所有路由器都与DR建立邻接关系,DR成为广播网络的中心点;
2.当灾难恢复失败时,BDR接管业务。广播网络中的所有路由器都必须与BDR建立邻接关系。
为什么需要选举DRBDR?
1.DR和BDR可以减少邻接的数量,从而减少链路状态信息和路由信息的交换次数,可以节省带宽,减轻路由器处理能力的压力。
2.既不是DR也不是BDR的路由器只与DR和BDR形成邻接关系,交换链路状态信息和路由信息,从而大大减少大型广播网络和NBMA网络中的邻接数量。
DR和BDR的选举
邻居发现完成后,路由器会根据网段类型进行DR选举。
1.在广播和NBMA网络中,路由器将根据参与选举的每个接口的优先级进行DR选举。
优先级值的范围是从0到255,值越高,优先级越高。默认情况下,接口优先级为1。如果接口的优先级为0,该接口将不参与DR或BDR的选举。
2.如果优先级相同,则比较路由器ID。数值越大,越倾向于被选为博士。
为了备份DR,应该在每个广播和NBMA网络上选举一个BDR。BDR还将与网络上的所有路由器建立邻接关系。
为了维护网络上邻接关系的稳定性,如果网络中已经存在DR和BDR,那么新添加的路由器就不会变成DR和BDR,不管该路由器的路由器优先级是否最大。如果当前DR失败,当前BDR自动成为新DR,BDR在网络中重新选举;如果当前的BDR失败,DR将保持不变,并且BDR将被重新选择。这种选举机制的目的是维护相邻关系的稳定性,尽量减少拓扑结构的变化对相邻关系的影响。
示例:
在没有DR的广播网络上,邻接数可以根据公式n/2计算,其中N代表参与OSPF的路由器接口数。
如图所示,所有路由器都有六个邻接关系。在本例中,DR和BDR用于将邻接从6减少到5。RTA和RTB只需要与DR和BDR建立邻接关系,RTA和RTB是邻居。
在这种情况下,邻接数的减少效果并不明显。但是,当网络上部署了大量路由器(如100台)时,情况就大不相同了。
OSPF议定书五条信息
OSPF直接运行在IP协议之上,使用IP协议号89。
运行OPSF协议的路由器通过五种报文的交互,从邻居状态到达邻居状态,完成LSA的泛洪,使网络路由器的LSDB一致。每个路由器根据SPF算法根据自己的LSDB计算路径,生成最优路由加入路由表。
让我们来看看这五种类型的信息。每条消息使用相同的OSPF报头。
1.你好消息:
最常用的消息用于发现和维护邻居关系。在广播和NBMA类型的网络中,选择指定路由器DR并备份指定路由器BDR。
2.DD消息:
当两台路由器同步LSDB数据库时,它们使用DD报文来描述它们的LSDB。DD报文的内容包括LSDB每个LSA的报头。LSA报头只占LSA总数据的一小部分,因此它可以减少路由器之间的协议消息流量。
3.LSR消息:
两台路由器相互交换DD报文后,它们知道对方路由器的哪些LSA在本地LSDB中丢失了。这时,它们需要发送LSR消息,向对方请求丢失的LSA。LSR仅包含所需LSA的汇总信息。
4.LSU消息:用于向对端路由器发送所需的LSA。
5.LSACK消息:用于确认收到的LSU消息。
OSPF协议状态机
运行OPSF协议的路由器通过五种报文的交互到达邻居状态,中间可能会经历以下八种状态:
Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
尝试:这种状态只存在于NBMA网络上,说明你没有收到邻居的任何信息,但是你周期性的给邻居发送消息,间隔为HelloInterval。如果在RouterDeadInterval的时间间隔内没有收到来自邻居的Hello消息,它将处于Down状态。
Init:在这种状态下,路由器已经收到邻居发来的Hello报文,但是不在收到的Hello报文的邻居列表中,还没有和邻居建立双向通信关系。

2-Way:在这种状态下,已经建立了双向通信,但没有建立邻居关系。这是邻接建立之前的最高状态。
ExStart:这是形成邻接的第一步。邻居状态变为此状态后,路由器开始向邻居发送DD消息。主从关系就是在这种状态下形成的,初始DD序列号也是在这种状态下确定的。在此状态下发送的DD消息不包含链路状态描述。
交换:在这种状态下,路由器互相发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
加载:互相发送LSR消息请求LSA,发送LSU消息宣布LSA。
完整:路由器的LSDB已经同步。


