OSPF路由协议概述
1.1 内容简介
随着Internet技术在全球范围的飞速发展,OSPF已成为目前Internet广域网和Intranet企业网采用最多、应用最广泛的路由协议之一。OSPF是Open Shortest Path First(开放最短路由优先协议)的缩写。它是IETF组织开发的一个基于链路状态的内部网关协议。目前针对IPv4协议使用的是OSPF Version 2(RFC2328)。
OSPF协议是由Internet Engineering Task Force的OSPF工作组所开发的,特别为TCP/IP 网络而设计,包括明确的支持CIDR和标记来源于外部的路由信息。OSPF也提供了对路由更新的验证,并在发送/接收更新时使用IP多播。此外,还作了很多的工作使得协议仅用很少的路由流量就可以快速地响应拓扑改变。
本文主要介绍OSPF 路由协议的基本原理,包括:OSPF的协议报文、邻居状态机、链路状态同步,以及DR、BDR选举和OSPF区域的划分。
本文来源于H3C网络学院教材,作为OSPF路由协议实验的主要参考资料。通过这个实验,学生应该能掌握OSPF 路由协议的基本概念和基本原理,OSPF路由计算过程,具备规划和配置OSPF 路由协议的能力,并能处理一般的OSPF故障。
说明:
若没有特别说明,下文中所提到的OSPF均指OSPFv2。
1.2 相关概念回顾
在理论课程中,我们对距离矢量和链路状态路由协议有了一定的了解。下面,我们将会回顾一些相关的概念,指出距离矢量算法和链路状态算法的一些区别。
1.2.1 路由表
路由器转发分组的关键是路由表。每个路由器中都保存着一张路由表,表中每条路由项都指明分组到某子网或某主机应通过路由器的哪个物理端口发送,然后就可到达该路径的下一个路由器,或者不再经过别的路由器而传送到直接相连的网络中的目的主机。
根据来源不同,路由表中的路由通常可分为以下三类:
1. 链路层协议发现的路由(也称为接口路由或直连路由)
2. 由网络管理员手工配置的静态路由
3. 动态路由协议发现的路由。
路由协议
静态路由协议
动态路由协议
距离矢量路由协议
(如RIP)
链路状态路由协议(如OSPF IS-IS)
图1-1如图1-1路由协议的分类
其中动态路由协议又包括有:TCP/IP协议栈的RIP(Routing Information Protocol,路由信息协议)协议、OSPF(Open Shortest Path First,开放式最短路径优先)协议;OSI参考模型的IS-IS(Intermediate System to Intermediate System)协议等。如图1-1。
1.2.2 距离矢量算法和链路状态算法
动态路由协议有很多种,分类标准也很多。主要的分类标准是根据算法的不同来划分,不同的算法能适应的网络规模也不尽相同。目前常见的动态路由协议,根据使用的算法可分为: 距离矢量协议(Distance-Vector):包括RIP和BGP。其中,BGP也被称为路径矢量协议(Path-Vector)。
链接状态协议(Link-State):包括OSPF和IS-IS。
以上两种算法的主要区别在于发现路由和计算路由的方法。
1. 距离矢量协议(Distance-Vector):
距离矢量协议也称为Bellman-Ford协议,网络中路由器向相邻的路由器发送它们的整个路由表。路由器在从相邻路由器接收到的信息的基础之上建立自己的路由表。然后,将信息传递到它的相邻路由器。这样一级级的传递下去以达到全网同步。也就是说距离矢量路由表中的某些路由项有可能是建立在第 2 手信息的基础之上的,每个路由器都不了解整个网络拓
扑,它们只知道与自己直接相连的网络情况,并根据从邻居得到的路由信息更新自己的路由表,进行矢量行叠加后转发给其它的邻居,
距离矢量算法存在的一个重要的问题就是会产生路由环路。路由环路问题产生的原因和距离矢量算法的原理有关,正如前面所讲的,每个路由器根据从其它路由器接收到的信息来建立自己的路由表。如果某个路由器出现“故障”或者因为别的原因而无法在网上使用时,就会造成路由环路。
针对产生回路的问题,防止和解决的方法有:
定义最大路由权值
水平分割
毒性逆转
路由保持法
触发更新
距离矢量协议无论是实现还是管理都比较简单,但是它的收敛速度慢,报文量大,占用较多网络开销,并且会产生路由环路,为避免路由环路得提供特殊处理。路由环路是DV算法必须要解决的问题,只有处理好环路问题的路由协议才能应用在实际的系统中。常见的D-V 路由协议一般都会采用上述阐述的多种方法解决路由环路的问题。
2. 链路状态算法
链路状态算法对路由的计算方法和距离矢量算法有本质的差别。距离矢量算法是一个平面式的,所有的路由表项学习完全依靠邻居,交换的是整个路由表项。链路状态是一个层次式的,执行该算法的路由器不是简单的从相邻的路由器学习路由,而是把路由器分成区域,收集区域内所有路由器的链路状态信息,根据链路状态信息生成网络拓扑结构,每一个路由器再根据拓扑结构图计算出路由。链路状态路由协议的一些注意事项如下:
网络中的设备并不向邻居传递“路由信息”,而是通告给邻居一些链路状态。
网络中的设备(路由器)最终都会得到网络的拓扑结果元素,只是详细程度并不相同。
各设备以自身为“树根”,根据LSDB中的数据计算到各个网断的“最短生成树”。
由于各设备有义务将网络拓扑信息向下传递,而具体的路由信息又是各设备自己计算所得,所以链路状态协议中,对是否“发出路由”不能进行控制,但可以控制路由的某些属性。
3. 距离矢量算法和链路状态算法的比较
采用链路状态算法的路由器,首先要得到整个网络的拓扑结构,再根据网络拓扑图计算出路由。这种路由的计算方法对路由器的硬件相对要求较高,但它计算准确,一般可以确保网络