文章目录
- RIP协议
- RIP链路失效、恢复问题
- RIP路由表的处理
- OSPF协议
- 分层的OSPF
- 主干路由器
之前我们也介绍了,作为我们现在广泛使用的Internet网络来说,采用的路由策略是层次化路由策略。 即将不同区域、组织的网络划分成一个个自治系统,在自治系统内部采用自定义的路由协议(算法)计算路由信息,而自治系统间的路由协议(算法)则依靠每个自治系统的网关路由器来实现。
在Internet网络中,自治系统(AS)的内部路由协议也被称为内部网路协议(IGP interior gateway protocols)。
最常见的AS内部路由协议:
- 路由信息协议:RIP(Router Information protocol)
- 开放最短路优先:OSPF(Open Shortest Path First)
- 内部网关路由协议:IGRP(Interior Gateway Routing Protocol)(Cisco思科私有协议)
在本节中,我们首先介绍AS内部路由协议:RIP协议和OSPF协议。
RIP协议
RIP协议早于1982年随BSD-UNIX操作系统发布。
基于距离向量路由算法实现,来计算在自治系统(AS)内,到达某一个节点的最短路由。
RIP协议在使用距离向量路由算法时,有一些特殊的设置:
- 距离度量:跳步数(max = 15 hops),每条链路一个跳步。
- 每隔30s,邻居之间交换一次距离向量Dv。在距离向量路由算法中,每次节点间交换彼此距离向量时,称为一次通告。
- 每次通告时,最多25个目的子网(IP地址形式)
具体的可以看以下这个例子,图中大写的A、B、C、D就是路由器,小写的u、v、w等就表示一个个子网(实际网络中,这些子网的表示就应该是CIRD形式,网路地址/前缀长度)。
在上述示例网络中,路由器A应该具有上述信息:到达子网u,需要一个跳步;到达子网v,需要两个跳步(先从A->B, B->v,经过两个链路);以此类推。
理论上来说,每次上述AS内部交换的距离向量信息,就是上述目的子网,跳步数组成的距离向量。
实际中的网路中路由器存储的转发信息可能如下所示:
上面的路由表中显示了路由器D的转发表,比如去往目的子网w经过的下一跳路由器是A,且需要的跳数为2。
假设,此时AS内进行了距离向量的交换(通告),此时路由器A的路由表为:
由于原先路由器D的转发表中,从路由器D到目的子网z需要经过的跳数是7,吸一跳路由器是B。而现在路由器A中的转发表到达目的子网z的跳数是4。那么在进行一次距离向量的交换后,路由器D会依据交换的距离向量信息重新计算到其他子网的跳数。此时从路由器D到目的子网z的最短跳数就是4+1=5,应该转发到路由器A,而不是原先的路由器B了。
更新后的路由器D的转发表如下所示:
事实上,上述抽象过程就是距离向量路由算法更新节点距离向量的计算过程,只不过在RIP协议中路由表多了下一跳信息。
RIP链路失效、恢复问题
在RIP协议中,判断链路失效的方法是:
当一个路由器如果在180s没有从另外的邻居收到新的通告,就可以推断跟对应的邻居/链路失效。
上面我们介绍过,RIP协议每30s邻居间发送一次通告,因此也就是如果有6个通告路由器都没收到,则推断与对应的邻居/链路失效。
如果路由器推断某一邻居或到邻居的链路不可用时,就需要重新计算路由,因为原先经过这个邻居的路径信息都不可用了。
重新计算可能会导致距离向量的改变,如果发生了改变,该路由器也需要将该距离向量通告给其他的邻居节点。邻居再依次向外发送通告(如果转发表改变),以此类推。
这里有个问题,就是链路失效信息能否快速传播到全网?
实际上,这个是不一定的,需要考虑网络特性以及协议机制,因为有可能产生无穷计数问题。
但是对RIP协议来说,这种问题应该来说被很大程度消减了,因为正如我们最初介绍的,RIP协议定义了最大有效跳步数15(无穷大距离=16 hops)。换句话说,即便出现无穷跳数问题,也可以在有限的次数内,得到正确的收敛。
同时,RIP协议也使用了毒性逆转技术用于预防乒乓(ping-pong)环路。
RIP路由表的处理
RIP路由表是利用一个称作route-d(daemon)的守护进程进行管理,是一个标准的应用层进程。作为一个应用进程,它的数据传输一定会用到传输层协议,具体来说,RIP协议就是利用UDP协议将通告报文封装成UDP数据报来周期性传输。
既然RIP协议是由应用进程实现的协议,为什么还把它叫做网络层的协议呢?需要注意的是,在网络中对一个层次的划分,无论是OSI参考模型、TCP/IP参考模型、还是五层参考模型也好,通常不是根据协议的具体实现形式来划分的,而是根据功能进行划分的。 换句话说,实现的功能是为了解决哪一层的功能,就属于对应层次的协议,而具体的实现形式可以是高层的应用进程实现,后者是底层的硬件实现都可以。
OSPF协议
OSPF协议我们之前提到过,名称叫做最短路径优先(Open Shortest Path First)。
OSPF协议的特点包括:
-
“开放”:公众可用,即不是某一个公司或企业私有的协议。
-
采用链路状态路由算法(构造链路状态分组,借助Dijkstra算法求节点间最短路径)。
- 链路(LS)状态分组扩散(通告)
- 每个路由器构造完整的网络(AS)拓扑图
- 利用Dijkstra算法计算路由
-
OSPF通告中每个入口对应一个邻居。即有多少个邻居与其相连,就会有多少个入口,其中包含了邻居的ID、链路费用等信息。
-
OSPF通告在整个AS范围内泛洪(通告发给邻居,邻居再发给邻居,以此类推)
- OSPF报文直接封装在IP数据报中进行传输的(即没有借助于TCP/UDP传输层协议)。
-
与OSPF协议极其相似的一个路由协议:IS-IS路由协议
OSPF协议有时候会被认为是对RIP协议后续的一个改进协议,与RIP协议相比,OSPF的优点包括:
-
安全(Security):所有OSPF报文可以被认证(预防恶意入侵)。
- 比如一个恶意入侵在网络中构造一些虚假的链路状态分组,并在网络中进行扩展,如果不加以鉴别,被路由器维护在链路状态数据库中,就会使得路由器得到一个假的网络拓扑,进而得到错误的路由数据。
-
允许使用多条相同费用的路由(RIP只能选一条)
如果到达某个目的网络具有多条相同费用的路径的话,OSPF协议不是在这些路径中任取其中一个,而是可以同时使用多条路径。这样做的优点就在于,有大量数据要传输到网络中时,可以把这些数据分散到多条路径上去,这样可以实现负载/流量的均衡。
-
对于每条链路,可以针对不同的TOS设置多个不同的费用度量
e.g.,卫星链路可以针对“尽力”(best effort)TOS设置“低”费用;针对实时TOS设置“高”费用。
实现不同类型数据分组的分流。
-
集成单播路由与多播路由:
多播路由:把一个数据报路由到某一个多播组的所有成员,保证每个多播组成员都能收到这个数据报的副本。
多播OSPF协议(MOSPF)与OSPF利用相同网络拓扑数据
-
最明显的优点:OSPF支持对大规模AS分层(hierarchical)
分层的OSPF
分层的OSPF示例如下所示:
OSPF可以在上图的AS中,再对层次进一步划分。划分成两级分层:
- 若干局部区(Area)
- 主干区(Backbone)
这样的划分思想与我们之前介绍过的层次路由的思想是非常一致的。
在OSPF协议中使用了这样进一步的层次划分后,就可以只在每个划分的AS区域内交换链路状态分组就可以了,从而更进一步的缩小了交换链路状态分组的范围。 使得在一个大的自治系统内部,链路状态分组的传播和扩散范围更小了,极大地提高了计算效率,节省了网络带宽。
由于只在AS区域内的路由器间交换链路状态分组,因此每个区域内的路由器只掌握所在区域的详细网络拓扑,也只在这个区域内按照链路状态算法计算路由信息。
同样的,在划分区域后,区域间的路由信息交换跟我们之前将分层路由原理是类似的,都需要借助于网关路由器,如下所示
区边界路由器从上图中可以看出,它既是某个区域的路由器,同时也是主干区的路由器。作为某个区域的路由器,它可以跟区域内的路由器交换链路状态分组,构造区域的网络拓扑,根据链路状态算法计算路由。
同时,它也是个主干去的路由器,因此也可以参与主干区的链路状态分组交换,得到主干区的网络结构拓扑和路由交换信息。
更重要的,作为区边界路由器,它需要负责汇总它所在区域网络内的路由转发信息,并通告给其他区边界路由器。从而让其他区域的区边界路由器知道如何到达该区域的路由信息。
主干路由器
在主干区域内的路由器称为主干路由器。在主干区域内既存在区边界路由器,也存在一般内部路由器。我们将一般内部路由器成为主干路由器。
主干路由器跟其他局部区域的内部路由器一样,只在主干区运行OSPF路由算法,扩散链路状态分组,按照Dijkstra计算路由等操作。
除此之外,也包含一个特殊的AS边界路由器(自治系统边界路由器)。这个AS边界路由器需要负责连接其他自治系统。
由于OSPF是自治系统内的协议,当在自治系统内部继续分层时,仍然是局限在一个自治系统内。而作为一个自治系统,终究要去其他自治系统相连,这里的区边界路由器就相当于网关路由器,连接其他自治系统。
事实上,在自治系统内可以有多个AS边界路由器,负责不同的与其他AS自治系统的路由交换和转发。
更详细的信息可以参考RFC 2328