OSPF是基于开放标准的链路状态路由选择协议,它完成各路由选择协议算法的两大主要功能:路径选择和路径交换。
在共同管理域下的一组运行相同路由选择协议的路由器的集合为一个自治系统(autonomous system,AS)。在网络中,一个AS是一个有权决定本系统使用哪种路由协议的单位,它可以是一个企业,一座城市,随着网络的发展,对AS的定义已经不是十分精准了,网络的发展使网络之间经常出现网络合并情况,导致同一个AS中使用的路由协议越来越多,所以AS的定义应该是在共同管理下的互联网络。
内部网关路由协议(IGP):用于在单一AS内决策路由,内部网关路由协议包括RIP、OSPF等。
与内部网关路由协议相对应的是外部网关路由协议(EGP),外部网关路由协议用于在多个AS之间执行路由。
IGP是用来解决内部通信的,而EGP是用来解决AS间的通信的。
运行RIP路由协议的路由器只需要保存一张路由表,而使用OSPF路由协议的路由器需要保存以下三张表:①邻居列表;②链路状态数据库;③路由表。
OSPF路由协议与RIP相比,前者适合更大型的网络环境,因为OSPF是一种链路状态型的路由协议,不会产生环路问题,因此不需要使用最大跳数等限制来防止路由环路的产生。具体区别如下图所示:
OSPF将AS分割成多个小的区域,OSPF的路由器只在区域内部学习完整的链路状态信息,而不必了解整个AS内部所有的链路状态。
OSPF协议中有一个几个很重要的概念,如“Router ID”、“DR”、“BDR”,我们先来了解一下Router ID:
因为运行OSPF的路由器要了解每条链路是连接在哪个路由器上的,因此,就需要有一个唯一的标识来标记OSPF网络中的路由器,这个标识就是Router ID,Cisco路由器是这样来得到它们的Router ID的。
首先,路由器会选取它所有loopback接口上数值最高的IP地址。若没配置loopback接口的IP地址,那么路由器就在所有活动物理端口中选取一个数值最高的IP地址作为路由器的Router ID。用作Router ID的路由器接口不一定非要运行OSPF协议。
一般我们会在配置OSPF时,使用 “router-id“ 来指定路由器的Router ID,也可以把想要配置的Router ID配置为loopback地址,两种办法二选一即可,但一定要注意不可从物理端口中选举Router ID。因为该端口一旦down掉,便会影响网络中路由器之间的通信。
接下来便是“DR”和“BDR”:
运行OSPF的路由器通过与邻居路由器建立邻接关系,互相传递链路状态信息。如果每两个路由器之间都要建立邻接关系,那么就会构成n(n-1)/2个邻接关系,这时就有些混乱了,而且浪费了很多不必要的网络资源。
为了可以避免这些问题的发生,可以在该网段上选举一个指定路由器(Designated Router,DR )。由DR和网络中的其他路由器建立邻接关系,并负责将网段上的变化告知它们。
为了实现冗余,当DR失效时,需要有一个新的DR来接替DR的工作,这便是BDR(Backup Designated Router,BDR)。网络上所有的路由器将和DR和BDR同时形成邻接关系。DR和BDR之间也将形成邻接关系。
DR和BDR即可以自动选举,也可以手工选举。
自动选举:网段上router ID最大的路由器将被选举为DR,第二大的将被选举为BDR,这样的选举可能不是最佳的,如果网段中有Cisco 7200 和3800系列路由器,那么3800路由器可能会由于router ID较而被选为DR,所以若要采用自动选举,则必须要注意Router ID的配置。
手工选举DR和BDR:需要设置路由器的优先级,每台路由器的接口都有一个路由器优先级,优先级的大小范围是0~255,数值越大,优先级越高,Cisco路由器默认的优先级是1,接口优先级可以在接口模式中通过“ip OSPF priority”命令来更改,若路由器的优先级被设置为0,它将不参与DR和BDR。
DR和BDR的选举过程:
当一台OSPF路由器启动并发现它的邻居路由器时,它将会去检查有效的DR和BDR路由器,如果DR和BDR存在,这台路由器将会接受已经存在的DR和BDR路由器,如果不存在,将执行一个选举过程,选出具有最高优先级的路由器作为BDR路由器,如果多个路由器的优先级一样,那么Router ID最大的路由器将被选中。如果没有有效的DR路由器存在,那么BDR路由器将被提升为DR路由器,然后执行一个选举过程选举BDR路由器。
路由器的优先级可以影响一个选举过程,但是它不能强制更换已经存在的DR或BDR路由器,因此,在一个广播多路访问网络上,最先初始化启动的两台具有选举资格的路由器将成为DR和BDR路由器,若想让路由器根据自己配置的Router ID来选举DR和BDR,那么在所有路由器接入网络后,可以在特权模式下使用“clear ip ospf pro”来清除OSPF相关信息,让网络中的路由器进行重新选举,如果实际情况允许,也可重启网络中的路由器,但路由器都关机后,前两个运行起来的路由器,必须是自己想要作为DR和BDR的路由器。
OSPF的组播地址有两个224.0.0.5和224.0.0.6,用来发送链路更新消息,链路更新消息会先发送给DR和BDR侦听的地址224.0.0.6,但BDR只侦听不相应。然后DR路由器使用组播地址224.0.0.5泛洪更新报文到其他所有路由器。
OSPF邻接关系的建立的过程有两个阶段,共经历七种状态:
至此完全邻接关系建立就完成了。OSPF协议的应用环境应考虑一下几点:
OSPF单域的配置基本命令如下:
Router(config)#router ospf 1 #配置OSPF的进程号。进程号是本地路由器的进程号,用于标识一台路由器上的多个OSPF进程,其值可以在1~65535选取。
Router(config-router)#router-id 1.1.1.1 #指定Router ID,若已经配置loopback接口地址,则这条命令可以省略,将1.1.1.1配置为loopback地址时,掩码则最好为255.255.255.255
Router(config-router)#network 192.168.1.0 0.0.0.255 area 0 #配置运行OSPF协议的接口,也就是将与本路由器直连的网段声明,以便让别的路由器学习到该路由器上的直连网段。 “area”是指定区域,在单域配置中区域必须为0。
以上述同样格式的network命令声明该路由器上所有的直连网段,配置便完成了。不过需要注意的是,在声明网段时,网络地址后面跟的是反掩码。
查看邻居路由器的命令:Router#show ip ospf neighbor
查看F0/0接口的数据结构:Router#show ip ospf interface f0/0 #可以查看到该网段的DR和BDR,属于哪个区域等详细信息。
修改接口F0/0的优先级为2Router(config)#in f0/0
Router(config-if)#ip ospf priority 2 #注意优先级为0的话将不参与DR和BDR的选举
Router(config-if)#ip ospf cost 2 #修改接口的cost值(cost值为路径选择的一种方式,值的取值范围为1~65535)
当网络环境中有多家厂商的产品,则应注意cost值,有些厂家默认的是1,如果网络中所有的路由器没有使用同一种计算cost的方式来指定OSPF的开销,那么OSPF协议将不能正确的进行路由选择。
查看邻居列表及其状态:
Router#show ip ospf neighbor
查看OSPF的配置
Router#show ip ospf #查看OSPF的配置
转载于:https://blog.51cto.com/14154700/2374461