趣解路由系列发布之后,文档君收到了好多关于OSPF的留言。为了满足各位粉丝们的要求,这不,文档君带着大量OSPF干货,来啦~
PART.01RIP为啥“过气”?
如果想好好说说OSPF,那就不得不从最“古老”的路由协议之一—RIP(Routing Information Protocol,路由信息协议)开始讲起。
RIP最突出的特性是使用跳数(报文经过路由器的个数)作为路由好坏的度量:跳数最小即认为该路由最优。
随着网络的发展,链路(设备之间的传输通道)的种类和特性不断升级变化,仅仅考虑跳数已经不能客观反映路由的优劣了。
例如到达同一个目的地,有两条路径:A→B,A→C→D→B。
虽然A→B路径最短,但是实际应用的时候并不合适,以网络带宽和链路状态来衡量网络质量会更加合理,比如在上图中采用带宽更大的A→C→D→B路径效果更好。
同时,RIP限制最大跳数为15,跳数16就变成了RIP路由协议“不可到达的远方”~因此RIP无法用于搭建大规模的网络。
RIP“过气”不只因为可扩展性差,还有收敛速度慢、易产生环路的缺点,但是在这里就不过多介绍啦~
PART.02OSPF是如何计算路由的?
接下来,就要隆重介绍下动态路由协议中的当红炸子鸡—OSPF(Open Shortest Path First,开放最短路径优先)啦!
与RIP不同,OSPF是一种链路状态路由协议,它可以收集路由器周边的拓扑变化,并形成一个靠谱的路由结构。
如果说RIP提供的是路标,只告诉你下一步该怎么走,转来转去还是容易迷路(产生环路)。那么OSPF提供的就是地图了,每个运行OSPF协议的路由器上都有一张完整的网络图。地图在手,迷路不再有!
OSPF的花费(cost)可以是路由距离、链路的吞吐量或链路的可靠性,这种路由度量相比于RIP协议的跳数更加灵活和准确,并且适用于更大更复杂的网络。
以下图所示的网络为例,说明OSPF计算出路由的过程。
下图是由四台路由器组成的网络,连线旁边标注了从一台路由器到另一台路由器所需要的花费(cost)。为简化问题,我们假定同一链路连接的两台路由器之间互相发送报文所需花费是相同的。
首先,每台路由器都根据自己周围的网络拓扑结构生成一条LSA(链路状态广播),并通过相互之间发送OSPF协议报文将这条LSA发送给网络中其他所有的路由器。这样每台路由器都收到了其他路由器的LSA。将所有的LSA放在一起称作LSDB(链路状态数据库)。显然,这四台路由器的LSDB都是相同的。
其次,由于一条LSA是对一台路由器周围网络拓扑结构的描述,那么LSDB则是对整个网络拓扑结构的描述。路由器将LSDB转换成一张矢量权重图,这张图便是对整个网络拓扑结构的真实反映。那么,这四台路由器得到的是一张完全相同的图。
最后也是最重要的是,每台路由器都会以自己为根节点,使用最短路径优先(SPF)算法计算出一颗最短路径树(选择cost值最小的那条路径),通过最短路径树生成到网络中其他路由器的最短路由,形成路由表。这4台路由器各自得到的路由表是不同的。
从上面的分析可以得出,OSPF协议计算出路由主要有以下3个主要步骤。
描述本路由器周边的网络拓扑结构,并生成LSA。
将自己生成的LSA在自治系统里传播,并同时收集所有的其他路由器生成的LSA。
根据收集的所有LSA计算出路由。
OSPF计算路由的方法就是这么简单~~
那为什么说OSPF更适合大型网络呢?
PART.04OSPF如何适应大型网络的?
我们一起来看看OSPF适应大型网络有哪些高招!
回想我们上学的时候,老师是怎么管理一个班的学生呢?
文档君替你回答:当然是分小组、选组长啦!
分小组:划分网络区域
OSPF应用于大型网络时,比如网络中可能有几十台或者上百台路由器。
当这些路由器运行OSPF协议,并传递、收集LSA时,网络中会充斥着这些协议报文,这样的LSDB容量会很大,运行SPF算法会很慢,不利于路由的正常计算和转发。
OSPF中通过设置区域来解决这个问题。如图所示,将一个大型网络分割成若干个小网络,每个小网络称为一个区域(Area),用一个数字来对区域编号。其中,区域0称为骨干区域,其他非0编号的区域称之为非骨干区域,并规定非骨干区域必须和骨干区域相连。
经过这样的处理后,OSPF有以下优点。
只有同一区域内路由器的LSDB会保持同步,路由的变化首先在本区域内更新。路由更新信息在传递给别的区域时,可在区域边界路由器(ABR)上进行路由聚合,以减少通告到其他区域的LSA数量,可将网络拓扑变化带来的影响最小化。
这样可以很好地解决路由计算和转发速度慢的问题。当然,在实际组网应用时,OSPF还根据不同的区域特点,定义了很多计算路由的优化方法,这里就不一一展开描述了。
我们知道在OSPF协议中要求每个区域与骨干区域(Area 0)必须直接相连,但是实际组网中,网络情况非常复杂,有时候在划分区域时,无法保证每个区域都满足这个要求。这时候就需要虚链接技术来解决这个问题。
虚链接是指在两台ABR之间,穿过一个非骨干区域(也称为转换区域,Transit Area),建立的一条逻辑上的连接通道(需在两端的ABR上同时配置)。
如上图所示,在路由器C和路由器E之间建立了一条虚链接,使Area3和骨干区域Area0之间有了逻辑连接,Area1为转换区域。“逻辑通道”是指两台ABR之间的其他运行OSPF的路由器只是转发报文,相当于在两个ABR之间形成了一个点到点的连接,因此在这个连接上,与物理口一样可以配置接口的各类参数。
选组长:OSPF选举
在广播和NBMA(Non-Broadcast Multiple Access,非广播多路访问)类型的网络上,任意两台路由器都需要传递路由信息。如果网络中有N台路由器,那么则要建立“N×(N-1)/2”次的传递。这是没有必要的,而且浪费了宝贵的带宽资源。
为了解决这个问题,OSPF协议指定一台路由器作为“组长”——DR(Designated Router,指定路由器)来负责传递信息。所有的路由器都只将路由信息发送给DR,再由DR将路由信息发送给本网段内的其他路由器。
两台不是DR的路由器(DR Other)之间不再建立邻接关系,也不再交换任何路由信息。这样在同一个网段之间只需要建立N-1个邻接关系,每次路由变化只需要进行2×(N-1)次的传递即可。
选组长的方法虽然非常有效,但是万一组长不在,整个组的同学谁来负责管理呢?
所以OSPF也定义了“副组长”—BDR(Backup Designate Router,备用指定路由器)。
BDR是DR的一个备份。在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。
一旦DR失效,BDR会立即变成DR。由于不需要重新选举,而且邻接关系事先已经建立,所以BDR替代DR的过程非常短暂。BDR成功“上位”为DR后,还需要再重新选举出一个新的BDR,但是这个选举过程不会影响路由的计算。
通过前面对OSPF的介绍,不知道粉丝们是否有所收获呢?