ospf在中等规模的网络中应用

OSPF原理

  基于开放式标准的链路状态路由协议,ospf是一种IGP协议,只能工作在自治系统内部,不能跨越自治域系统运行。

        运行OSPF协议的路由器,在刚开始工作的时候,首先和相邻路由器建立邻居关系形成邻居表,然后互相交换自己所了解的网络拓扑。路由器在没有学习到全部网络拓扑之前,是不会进行任何路由操作的,因为这时路由表是空的。只有当路由器学习到了全部网络拓扑,建立了拓扑表(也称为链路状态数据库)之后,它们会使用最短路径优先(SPF)算法,从拓扑表中计算出路由来。因为,所有运行OSPF路由协议的路由器都维护着相同的拓扑表,路由器可以自己从中计算路由,所以这些路由器之间不必周期性地传递路由更新包,OSPF路由协议的更新包是增量更新。这种更新方式也节省了对网络带宽的消耗。

        在OSPF路由协议网络中,当网络拓扑发生改变时(比如有新的路由器或网段加入网络,或者网络出现了故障,某个网段坏掉了),会发现该变化的路由器会向其他路由器发送触发的路由更新包---链路状态更新包(LSU)。在LSU中包含了关于发生变化的网段的信息---链路状态通告(LSA)。接收到该更新包的路由器,会继续向其他路由器发送更新,同时根据LSA中的信息,在拓扑表里重新计算发生变化的网段路由。由于没有holddown时间,OSPF路由协议的收敛速率是相当快的,这一点对于大型网络或者电信网络是非常重要的。

        OSPF还有一个重要特性,就是可以把一个大型的路由网络进行分级设计,这使得可以在大型网络中正常而高效的工作。OSPF把大型网络划分为骨干区域和非骨干区域。骨干区域只有一个,并且被固定的称为区域0,所有非骨干区域都必须和骨干区域相连。在每个小区域里,路由器不再去关心其他区域的链路改变,而只关心本区域的链路改变,一个区域的网络拓扑变化,只会引起本区域的网络收敛操作,通过划分区域,网络故障的影响范围缩小,整个网络不再频繁地进行收敛操作。

       在区域与区域的边界处有边界路由器。该路由器负责学习两个区域的路由,而区域内部的路由器只需要使用静态路由或者汇总路由,把目的地是其他区域的数据包路由给边界路由器,由边界路由器将数据包路由到其他区域,这样路由器所维护的路由表体积显著减小,路由操作效率提高。

        但是为了达到以上目的,每一个区域的路由都要尽量地进行汇总,这就要求进行分级的体系化编址

OSPF路由协议的配置步骤

1、声明使用OSPF路由协议

        router(config)#router ospf process-id

process-id是进程号,范围1~65535。在同一个使用OSPF路由协议的网络中不同的路由器可以使用不同的进程号。一台路由器可以启用多个OSPF进程。

2、发布网段

        router(config-router)#nework address wildcard-mask area area-id

address可以是网段、子网或者接口的地址;wildcard-mask称为通配符掩码,它与子网掩码正好相反,但是作用是一样的;area-id是区域标识,它的范围是0~65535,区域0是骨干区域,OSPF路由协议在发布网段的时候必须指明其所属的区域。

3、声明完全末区区域

        router(config-router)area area-id stub [no-summary]

no-summary只在区域边界路由器上配置。

以下为案例配置,一个城域网,八个高性能三层交换机组成骨干区域,与之相联的小区或者企业则作为边界区域连接到骨干区域,而核心交换机就人微言轻这些边介区域和骨干区域之间的边界路由器。把边界区域设置成完全末节区域。

switchA

......

hostname switchA

ip name-server 0.0.0.0

!

ip subnet-zero

ip routing   (三层交换的路由一定要启)

......

interface loopback0

    ip address 1.1.1.1 255.255.255.0

(该逻辑接口的IP地址作为三层交换机A在OSPF路由网络中的ID)

......

interface gigabitethernet0/1

    no switchport

    ip address 148.1.1.1 255.255.255.0

!

interface gigbitethernet0/2

    no swithcport

    ip address 192.1.1.1 255.255.255.0

(注意先取消switchport模式配置IP地址)

.....

router ospf 64

    network 1.1.1.1 0.0.0.0 area 0

    network 148.1.1.0 0.0.0.255 area 0

    network 192.1.1.0 0.0.0.255 area 0

......

end

switchB

......

hostname switchB

......

ip routing

......

interface loopback0

    ip address 2.2.2.2 255.255.255.0

interface fastethnet0/1

    no switchport

    ip address 193.1.1.2 255.255.255.0

......

inteface gigabitethnet0/1

    no switchport

    ip address 192.1.1.2 255.255.255.0

......

router ospf 64

    network 2.2.2.2 0.0.0.0 area 0

    network 192.1.1.0 0.0.0.255 area 0

    network 193.1.1.0 0.0.0.255 area 1

(通过将不同的链路发布到不同的区域该路由器成为一台区域边界路由器)

area 1 stub no-summary

(该命令表示区域1是一个完全末节区域,no-summary表示该路由设备是完全末节区域的边界路由器)

......

end

企业路由器C

......

hostname routerc

!

interface loopback 0

    ip address 3.3.3.3 255.255.255.0

!

interface fastethernet 0/0

    ip address 193.1.1.1 255.255.255.0

!

interface fastethrnet0/1

    ip address 152.1.1.1 255.255.255.0

!

......

router ospf 64

    network 3.3.3.3 0.0.0.0 area 1

    network 152.1.1.0 0.0.0.255 area 1

    netwrok 193.1.1.0 0.0.0.255 area 1

(该路由器的全部链路发布在区域1中,这台路由器位于区域1)

area 1 stub

(该命令表示路由器C是完全末节区域1中的一台路由器,完全末节区域1中的所有路由设备都应该配置该命令,否则不能形成邻居关系)

......

ip route 0.0.0.0 0.0.0.0 192.1.1.2

(由于完全末节区域内的路由器不能学习其他区域的路由,所以应该使用静态路由将访问其他区域的数据包路由到边界路由器,由了解整个网络路由的边界路由器将数据包路由到其他区域)

......

end

常见的配置问题和检测路由协议命令

运行OSPF协议的路由器首先要和其他相邻的路由器建立邻居关系,然后才能和这些路由器交换链路状态信息,从而学习路由,导致无法建立邻居关系的配置问题可能有以下几种:

1、相邻的路由器互相不发送Hello包。

2、相邻的路由器的hello-interval或dead-interval不相同

3、连接路由器的接口属于不同的网络类型。

4、邻居验证的密码或关键字不同。

另外,在配置OSPF协议时还要保证以下几点:

1、在路由器的接口上配置的IP地址和子网掩码正确无误。

2、在发布网段的时候使用了正确的通配符掩码。

3、网段发布到了正确区域。

检验配置命令

1、show ip ospf interface

用来检查接口是否被配置在相应的区域里,另外我们也可以看到该接口所连接的邻居,以及在接口上的hello-interval和dead-interval这两个参数。

2、show ip ospf

可以看到链路状态更新的时间间隔及网络收敛的次数等信息

3、show ip ospf neighbor detail

显示邻居的详细信息列表,包括它们的优先级和当前状态。

4、show ip ospf database

显示路由器管理的拓扑表的内容、路由器标识和ospf路由协议的进程号。

 

当对OSPF路由协议配置进行了改变(比如更改了发布的网段)之后,如果这种改变在路由表里反应的特别慢,我们可以使用下面的命令来清空路由表,让路由器表立刻开始更新

    router#clear ip route *

这个命令清空整修路由表,让路由器重新建立路由表

也可以指定某一条路由条目

    router#clear ip route a.b.c.d

如果怀疑OSPF路由协议的链路状态更新包有问题,我们可以如下命令

    router#debug ip ospf events

该命令会报告所有的OSPF路由协议事件。

下面的命令

    rotuer#debug ip ospf adj

会报告关于邻居的OSPF事件。