网络工程师(35):应用最广泛的路由协议OSPF

2023-09-04 09:28:08

OSPF(Open Shortest Path First,开放最短路径优先)协议是一种基于链路状态的动态路由协议,RIP不会考虑链路状态,只关心距离,路由都是听别人告诉的,而OSPF则是根据链路状态信息自己计算路由,从设计上就避免了路由环路。什么是链路状态?简单来说,就是一条链路(或称为一个子网)的IP地址前缀、掩码、链路开销、网络类型等信息。

打个比方,你驾车去一个陌生的地方,RIP就像每个岔路口的路标,指示你走最近的路;而OSPF则像地图导航,由你自己从众多路线方案中选择一条最优的路(不一定是最近的)。

怎么理解最优呢?在OSPF中,去往目的网段的链路开销最小即为最优。链路开销是根据链路带宽自动计算的,计算方法是:

链路开销=参考带宽÷链路带宽,最小值为1(为什么最小值是1而不是0呢?只有直连路由和手工配置的静态路由开销为0,所有动态路由协议的开销都大于0)。

参考带宽默认取值为100Mbps。比如一条带宽为64k的PPP链路,开销为100×1000÷64=1562,一条百兆以太网链路开销为1,千兆、万兆链路也为1。

由于网络技术的发展,带宽越来越高,我们发现默认的参考带宽已无法区分百兆以上的链路,所以,在网络设计时,应把参考带宽设置为网络中链路的最高带宽以上。

当然,我们也可以通过配置手工改变链路带宽,其目的是影响OSPF选择最优路由。除非必要,否则不建议这么做。

RIP由于跳数的限制,不适用于大规模网络环境。OSPF则可以通过划分区域,解决网络规模扩容的问题,特别适用于中大型网络。

OSPF划分区域时,每个区域都有一个区域ID,区域ID长得和IP地址很像,为描述方便,一般把区域0.0.0.0简称区域0,区域0.0.0.1简称区域1,等等。

在OSPF区域中,区域0规定为骨干区域,其他都是普通区域。如果网络中OSPF只有一个区域,那么这个区域ID无论是什么都行。但如果存在多个区域,则骨干区域(区域0)必须存在且只能有一个,其他区域必须和区域0通过ABR(区域边界路由器)相连。

什么是ABR?如果一台路由器有接口属于不同的区域,且至少有一个接口在区域0中有邻居关系,那么这台路由器就是ABR。

ABR是一个勤劳"搬运工",它会把普通区域中的路由一条一条地搬到骨干区域中,也会把骨干区域中的路由全部搬到普通区域中。但是注意,它不会把一个普通区域中的路由搬到另一个普通区域。

如上图,三个普通区域的路由都会被两个ABR搬到区域0,此时区域0中包含了全部四个区域的路由(包括区域0自己的),右边的ABR会把区域0中的路由(已经包含了区域2和区域10.0.0.0的路由)全部搬到区域1中,左边的ABR会把区域0中的路由(已经包含了区域1和区域2的路由)搬到区域10.0.0.0中,同样,还会把区域0中的路由(已经包含了区域1和区域10.0.0.0的路由)搬到区域2中。

至此,每个区域都包含了整个网络的路由。

我们发现,ABR并不会把一个普通区域的路由搬到另一个普通区域,而必须通过骨干区域才行。

还有一种OSPF路由器叫ASBR(自治系统边界路由器)。如果一台路由器还有其他路由,不管是直连路由,还是静态路由,还是RIP路由,或者是另一个OSPF进程中的路由,只要这台路由器把它们搬到OSPF中,那么这台路由器就是ASBR。

一个典型的应用是,企业网中运行了OSPF,出口路由器连接了Internet,配置了缺省路由用于访问Internet。为了使整个企业网都能访问Internet,需要在出口路由器上把这条缺省路由引入到OSPF中,此时,这台出口路由器就是ASBR。简而言之,谁做了路由引入,谁就是ASBR。

关于ASBR,我们后面还会详细讨论。

在RIP中,路由器只知道路由是谁告诉我的,而不知道路由的起点在哪里。在OSPF中,每条路由都会标识起点路由器是谁(为什么要标识?OSPF需要知道目标网段是谁始发的,然后才能计算去这个网段的最优路径。就像我们在地图上要先标出目的地,然后才能知道怎么去一样。再反过来看RIP,知道它为什么是"道听途说"的路由协议了吧)。OSPF使用Router ID(RID)来标识OSPF路由器。

RID长得和IP地址、区域ID一样,可以手工配置,如果没有手工配置,OSPF选取Loopback接口中地址最大的为RID,如果没有Loopback接口,则OSPF选取物理接口地址最大的为RID。

由于RID用来标识一台路由器,所以不能冲突。实际上,只要保证在一个区域内RID不冲突即可。但考虑到网络拓扑改变等其他因素,一般建议在整个网络中RID不要冲突(地图上有两个地名相同会很麻烦)。


小Q:如果路由表中某条路由的开销为0,那么这条路由一定不是动态路由协议发现的。这样说对吗?