OSPF

OSPF(Open ShortestPath First,开放最短链路优先)路由协议是典型的链路状态路

由协议。OSPF 由IETF在20 世纪80 年代末期开发,OSPF 是SPF 类路由协议中的开放式版本。

最初的OSPF 规范体现在RFC1131中,被称为OSPF 版本1,但是版本1 很快被进行了重大改

进的版本所代替,这个新版本体现在RFC1247 文档中。RFC1247 被称为OSPF 版本2,是为了

明确指出其在稳定性和功能性方面的实质性改进。这个OSPF 版本有许多更新文档,每一个

更新都是对开放标准的精心改进。接下来的一些规范出现在RFC1583 和2328 中。OSPF 版本

2 的最新版体现在RFC 2328 中。而OSPF 版本3 是关于IPv6 的。OSPF 的内容多而复杂,所

以本书分了多个章节来介绍。本章只讨论单区域的OSPF。

OSPF作为一种内部网关协议(InteriorGateway Protocol,IGP),用于在同一个自治

系统(AS)中的路由器之间交换路由信息。OSPF 的特性如下:

1. 可适应大规模网络;

2. 收敛速度快;

3. 无路由环路;

4. 支持VLSM 和CIDR;

5. 支持等价路由;

6. 支持区域划分, 构成结构化的网络;

7. 提供路由分级管理;

8. 支持简单口令和MD5 认证;

9. 以组播方式传送协议报文;

10. OSPF 路由协议的管理距离是110;

11. OSPF 路由协议采用cost 作为度量标准;

12. OSPF 维护邻居表、拓扑表和路由表。

另外,OSPF 将网络划分为四种类型:广播多路访问型(BMA)、非广播多路访问型(NBMA)、

点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。不同的二层链路的类

型需要OSPF 不同的网络类型来适应。

下面的几个术语是学习OSPF 要掌握的:

1. 链路:链路就是路由器用来连接网络的接口;

2. 链路状态:用来描述路由器接口及其与邻居路由器的关系。所有链路状态信息构成

链路状态数据库;

3. 区域:有相同的区域标志的一组路由器和网络的集合。在同一个区域内的路由器有

相同的链路状态数据库;

4. 自治系统:采用同一种路由协议交换路由信息的路由器及其网络构成一个自治系统;

5. 链路状态通告(LSA):LSA 用来描述路由器的本地状态,LSA 包括的信息有关于路由

器接口的状态和所形成的邻接状态;(最大老化时间是3600s,最大更新时间是1800s)

6. 最短路经优先(SPF)算法:是OSPF 路由协议的基础。SPF 算法有时也被称为Dijkstra

算法,这是因为最短路径优先算法(SPF)是Dijkstra 发明的。OSPF 路由器利用 SPF,独立

地计算出到达任意目的地最佳路由

要了解OSPF之前,我们要了解一下动态路由选择协议,动态路由选择协议分两种,第一种为距离矢量协议,代表协议为RIP协议,第二种协议为链路状态协议,代表协议为OSPF协议。距离矢量协议中路由器之间的通信是双方直接通告路由表,而链路状态协议是先建立邻居,然后在同步数据库(通过链路状态通告信息(LSA))同步完数据库开始运行SPF算法,选择最短无环路的路由路径并放入路由表中,所以OSPF通告的是数据库。

OSPF的区域

OSPF引入了区域的概念,区域分2种:                                                            

1.骨干区域(area 0)                                                                      

2.常规区域

注意,所有的常规区域必须和骨干区域相连

OSPF的邻接关系的建立是依赖于hello包的

下面3种与区域相关的通信量类型

:域内通信量———是指由在单个区域内的路由器之间交换的数据包构成的通信量。

:域间通信量———是指由在不同区域的路由器之间交换的数据包构成的通信量。

:外部通信量———是指由OSPF域内的路由器和其他路由选择域的路由器之间交换的数据包构成的通信量。

路由器的类型

内部路由器:是指所有接口都属于同一个区域的路由器。

区域边界路由器(Area Border Routers ,ABR)是指连接一个或者多个区域到骨干区域的路由器。也就是说一个非骨干区域和骨干区域相连的那个路由器就是ABR路由器

自主系统边界路由器(Autonomous System BoundaryRouter,ASBR)可以认为是ospf域外部的通信量进入ospf域的网关路由器,也就是说,ASBR路由器是用来把其他路由选择协议学习到的路由,通过路由重分发注入到ospf中

1. 内部路由器:OSPF 路由器上所有直连的链路都处于同一个区域;

2. 主干路由器:具有连接区域0 接口的路由器;

3. 区域边界路由器(ABR):路由器与多个区域相连;

4. 自治系统边界路由器(ASBR):与AS 外部的路由器相连并互相交换路由信息

虚链路

虚链路是指一条通过一个非骨干区域连接到骨干区域的链路。

配置虚链路的要求

1.虚链路必须配置在两台ABR路由器之间

2.配置了虚链路所讲过的区域必须拥有全部的路由选择信息,这样的区域又被称为传送区域

3.传送区域不能是一个末梢区域

配置命令

(1)步骤1:配置路由器R1

R1(config)#router ospf 1

R1(config-router)#router-id 1.1.1.1

R1(config-router)#network 1.1.1.00.0.0.255 area 2

R1(config-router)#network192.168.12.0 0.0.0.255 area 2

(2)步骤2:配置路由器R2

R2(config)#router ospf 1

R2(config-router)#router-id2.2.2.2

R2(config-router)#network 2.2.2.00.0.0.255 area 1

R2(config-router)#network192.168.12.0 0.0.0.255 area 2

R2(config-router)#network192.168.23.0 0.0.0.255 area 1

R2(config-router)#area 1virtual-link 3.3.3.3

(3)步骤3:配置路由器R3

R3(config)#router ospf 1

R3(config-router)#router-id3.3.3.3

R3(config-router)#network 3.3.3.00.0.0.255 area 0

R3(config-router)#network192.168.23.0 0.0.0.255 area 1

R3(config-router)#network192.168.34.0 0.0.0.255 area 0

R3(config-router)#area 1virtual-link 2.2.2.2

(4)步骤4:配置路由器R4

R4(config)#router ospf 1

R4(config-router)#router-id4.4.4.4

R4(config-router)#network 4.4.4.00.0.0.255 area 0

R4(config-router)#network192.168.34.0 0.0.0.255 area 0

4.实验调试

在路由器R4 上查看路由表:

R4#show ip route

Codes: C - connected, S - static, R - RIP, M - mobile,B - BGP

D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPFinter area

N1 - OSPF NSSA external type 1, N2 - OSPF NSSAexternal type 2

E1 - OSPF external type 1, E2 - OSPF external type 2

i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia- IS-IS inter area

* - candidate default, U - per-user static route, o -ODR

P - periodic downloaded static route

Gateway of last resort is not set

O IA 192.168.12.0/24 [110/192] via 192.168.34.3,00:02:19, Serial0/0/0

1.0.0.0/32 is subnetted, 1 subnets

O IA 1.1.1.1 [110/193] via 192.168.34.3, 00:02:19,Serial0/0/0

2.0.0.0/32 is subnetted, 1 subnets

O IA 2.2.2.2 [110/129] via 192.168.34.3, 00:02:19,Serial0/0/0

3.0.0.0/32 is subnetted, 1 subnets

O 3.3.3.3 [110/65] via 192.168.34.3, 00:02:19,Serial0/0/0

4.0.0.0/24 is subnetted, 1 subnets

C 4.4.4.0 is directly connected, Loopback0

O IA 192.168.23.0/24 [110/128] via 192.168.34.3,00:02:19, Serial0/0/0

C 192.168.34.0/24 is directly connected, Serial0/0/0

从R4 的路由表的输出,可以看出路由器R1 能够通过使用转接区域1 的虚拟链路到达区

域0。

【技术要点】

虚链路属于区域0,所以在进行区域0 认证的时候,不要忘记虚链路的认证,例如如果

区域0 采用MD5 认证,则在虚链路上配置如下:

R3(config-router)#area 1virtual-link 2.2.2.2 message-digest-key 1 md5 cisco

划分区域的优点

1.有效减少路由选择协议对路由器CPU和内存的占用*

2.可以降低路由选择协议的通信量,*

3.有效减少数据库条目的大小,加快收敛*

4.没有环路*

5.可以随意的扩充规模*

6.故障隔离*

注意:带*号的一定要记住

OSPF协议的操作

!发现邻居

宣告OSPF的路由器从所有启动OSPF协议的接口上发出hello数据包,如果两台路由器共享一条公共数据链路,并且能够协商他们各自hello数据包中所指定的某些参数,那么他们就能建立邻居了。

       Hello包中的信息有:

1.始发路由器的路由器ID(RouterID)

2.始发路由器接口的区域ID(AreaID)

3.始发路由器接口的地址掩码:

4.始发路由器接口的认证类型和认证信息;

5.始发路由器接口的Hello时间间隔;

6.始发路由器接口的路由器无效时间间隔;

7.路由器的优先级;

8.指定路由器(DR)和备份指定路由器(BDR)

邻居是否建立的条件

第一种说法(书上的)

1.hello包中

        1.接口掩码信息是否相同

        2.hello包的时间间隔和死亡时间是否相同

        3.routerID是否是唯一的

        4.MTU(接口的最大传输单元)是否相同

        5在一个广播网中两个优先级不能全为0,因为在广播网中要选DR和BDR。如果没有就会卡在2—way状态

         6区域ID要相同

2.OSPF报头

1.认证类型要相同

2.认证密钥要相同(一般都为MD5认证)

3.端口的ACL把组播地址为224.0.0.5的hello包给过滤掉了.

第二种说法:

①.hello 间隔和dead 间隔不同;

.同一链路上的hello 包间隔和dead 间隔必须相同才能建立邻接关系。默认情况下,

hello 包发送间隔如表6-1 所示。

表6-1 OSPF hello 间隔和dead 间隔

网络类型      Hello 间隔(秒) Dead 间隔(秒)

广播多路访问    10               40

非广播多路访问   30               120

点到点          10                40

点到多点         30                120

默认时Dead 间隔是Hello 间隔的四倍。可以在接口下通过“ip ospf hello-interv和“ip ospf   dead-interval”命令调整。

②区域号码不一致;

③特殊区域(如stub,nssa等)区域类型不匹配;

④认证类型或密码不一致;

⑤路由器ID 相同;

⑥ Hello 包被ACL deny;

⑦链路上的MTU 不匹配;

⑧接口下OSPF网络类型不匹配

!!建立邻接

邻接关系的建立是由交换hello信息的路由器类型和交换hello信息的网络类型决定的。

网络类型

(1)点到点网络(point—to—point);

(2)广播型网络(broadcast);

(3)非广播多路访问(N B M A)网络

(4)点到多点网络(point—to—multipoint);

(5)虚链路(virtuallinks)(包括末梢网络(stub network))

        DR和BDR的选举

1.为什么要选举DR和BDR

因为对于OSPF来说,在完成数据库的同步(建立邻居的步骤中,这个会在后面讲)中会有大量的LSA泛洪,会有一些不必要的LSA产生,这样就会极大的消耗CPU

2.DR/BDR选举规则:

首要因素是时间,最先启动的路由器被选举成DR(最先配置的等待40s还没有收到对方的hello数据包就会把自己设置为DR;

②如果同时启动,或者重新选举,则看接口优先级(范围为0-255),优先级最高的被选举成DR,默认情况下,多路访问网络的接口优先级为1,点到点网络接口优先级为0,修改接口优先级的命令是“ ip ospfpriority”,如果接口的优先级被设置为0,那么该接口将不参与DR 选举;

③ 如果前两者相同,最后看路由器ID,路由器ID 最高的被选举成DR;

④DR 选举是非抢占的,除非人为地重新选举。重新选举DR 的方法有两种,一是路由器重新启动,二是执行“clear ip ospf process”命令

当选举DR/BDR 的时候要比较hello 包中的优先级(priority),优先级最高的为DR,次高的为BDR.默认优先级都为1.在优先级相同的情况下就比较RID,RID 等级最高的为DR,次高的为BDR.当你把优先级设置为0 以后,OSPF路由器就不能成为DR/BDR,只能成为DROTHER

DR/BDR选举完成后,DRother只和DR/BDR形成邻接关系.所有的路由器将组播Hello包到地址224.0.0.5以便它们能跟踪其他邻居的信息,即DR将洪泛LSU到224.0.0.5;DRother只组播LSU到地址224.0.0.6,只有DR/BDR监听这个地址

3.DR和BDR的作用

*管理多路访问网络上的泛洪扩散过程。

*描述这个多路访问网络和OSPF区域内其余与其相连的路由器

注意!!网络中的每台路由器都会与DR形成邻接关系,并且,DR是在端口上,而不是整个路由器上,也就是说在两个路由器的直连端口上就会有一个DR

!!!数据库的同步* * * *(OSPF的重点之一)

在后面的邻居状态机中我们会学到数据库的同步其实就是LSA的通告。比如说,router 1和router 2建立邻接之后要进行数据库的同步,router 1会向router 2发送一个LSDBD(数据库的摘要信息)LSDBD中包含了LSA的头部信息。下面我们来看一个图形

      Router1       发送一个LSDBD                   Router 2

(router 1在发送的同时      LSR(回应他没有的清单(router2在发送的同时也会

会产生一个5s的重传列表  LSU(请求的详细信息包含大量的LSA)产生一个5s的请求列表,收

在5s内没有收到ack的话     ACK (确认信息)            到一个就会删除一个,没收

会重传)到的就会要求重传)

下面我们来看一下LSA

LSA 类型


类型

代码

名称及

路由代码

描述


 1  

路由器LSA

(O)

所有的OSPF 路由器都会产生这种数据包,用于描述路由器上连接到

某一个区域的链路或是某一接口的状态信息。该LSA 只会在某一个特

定的区域内扩散,而不会扩散至其它的区域。


 2

网络LSA

(O)

由DR 产生,只会在包含DR 所处的广播网络的区域中扩散,不会扩散

至其它的OSPF 区域。


 3

网络汇总LSA

(O IA)

由ABR 产生,描述ABR  和某个本地区域的内部路由器之间的链路信息。

这些条目通过主干区域被扩散到其它的ABR。


 4

ASBR 汇总LSA

(O IA)

由ABR 产生,描述到ASBR  的可达性,由主干区域发送到其它ABR


 5

外部LSA

(O E1 或E2)

由ASBR 产生,含有关于自治系统外的链路信息


 7

NSSA 外部LSA

(O N1 或N2)

由ASBR 产生的关于NSSA  的信息,可以在NSSA 区域内扩散,ABR 可以

将类型7 的LSA 转换为类型5 的LSA。

下面来具体的说一下

1LSA类型1

1.(产生)同一区域内每台路由器产生的

2.(边界)同一区域内泛洪

3.链路状态ID=通告ID=始发路由器的routerID (简写为RID)

4.通告信息

1.掩码信息

2.网段

3.cost

5.三个一bit的V E B 位   v代表虚电路,e代表ASBR路由  b代表ABR路由

6.链路的数量(一条链路有多少个接口用了OSPF)

7.链路类型

      1.点到点=虚链路

链路ID==邻居的RID

链路数据==连接邻居接口的IP地址

2.广播型

链路ID==DR端口IP

链路数据==连接DR端口的IP

3.末梢网络

链路 ID==始发路由的RID

链路数据==掩码

在这里讲一下Router ID 的产生

(1)如果使用router-id 命令手工配置的Router-id的话,就是用Router ID

(2)如果没有手工配置Routerid 路由器会选取他所有的四环接口上数值最高的IP地址

(3)如果路由器没有配置IP地址的loopback(环回接口),那么路由器会选取他所有物理接口上IP地址最大的

用loopback接口作为路由器的RID 的好处是

(1)loopback接口比任何物理接口更稳定,一旦路由器启动成功,这个环回接口就处于活动状态,只有整个路由器失效时他才会失效

(2)网络管理员在预先分配和识别路由器ID的地址时有更多的回旋余地

LSA 类型2

1.(产生)DR 产生的

2.(边界)在同一区域内泛洪

3,链路状态ID==DR的接口IP

4.通告RID==始发的RID

5.通告内容

(1)掩码信息(广播网段==DR接口IP的掩码)

(2)有几个邻接关系(邻居ID 包括自己)

LSA 类型3

1.(产生)ABR产生的

2.(边界)除了stbu区域(末梢区域)完全stub区域和nass区域完全nass区域

3.链路状态====区域间的所有路由条目

4.通告ID=====ABR的RID

5通告内容

(1)掩码

(2)Cost

看一个实例图

spacer.gif

当要把aero 1 用LSA3宣告到areo 0 里面去,两个ABR路由器肯定会有LSA 3产生的,究竟是从Router 1出去呢,还是Router 2 出去呢,还是一起出去呢,

答案,是,肯定不会两个同时出去的,也就是不会负载均衡的,因为,Router0会选择先比较他们两个的cost值,cost值小的来做出口,如果两个cost值相同,他会比较RID大的来做为出口

LSA  类型4

LSA  类型4是由ABR产生的,除了stub区域完全stub区域和nass区域和完全nass区域外都可以泛洪链路状态ID是ABR 的RID 通告RID也是ABR的RID 链路ID是LSA 5 通告内容是cost值

LSA 4的作用是告诉别人怎样到ABR

LSA 4产生的条件是

(1)收到一个LSA 类型1 的 他的V E B 位中得E 位置为1了,证明是ABR路由器

(2)一个ABR从另一个ABR收到一个LSA 类型 4 会对这个LSA 4 重新产生一次 累加cost值

LSA  类型5

1.(产生)是有ASBR路由器产生的

2.(边界)除了stub区域完全stub区域和nass区域完全nass区域外都能泛洪

3.链路状态ID ==  重分发进来的外部路由条目

4.通告的RID  == ADBR的RID

5通告的内容

1.掩码

2.Cost

3.Cost类型

(1)cost类型1  == oeone       会计算链路内部的cost值

(2)cost类型2  == oetwo       不会计算链路内部的cost值(内部一般默认为20,内部不计算出口时是20)转发地址 0.0.0.0 意思是去外网的时候要先找到ASBR路由器

LSA  类型7

1.(产生)在连接nass区域的ASBR产生的

2.(边界)在nass区域泛洪

3.链路ID  ==  被重分发的路由条目

4.通告 ID  ==  ASBR的ID

5.通告的内容

(1)cost值

(2)掩码

(3)cost类型

(4)转发到地址  ==  ASBR 的 ID

OSPF  的四种特殊区域

Stub区域

(1)permit LSA 1、2、3、 deny LSA 4、5

(2)stub区域的边界ABR路由器会向stub区域通告一条默认路由

(3)在这个区域每台路由器都要配置stub

(4)不支持重分发

(5)虚电路不能配置,也不能把stub区域配制成传输区域

完全stub区域

(1)Permit LSA 1、2  deny LSA 3、4、5

(2)在stub区域干掉LSA 3 后 会产生一条默认路由

后面的和stub区域相同

Nass区域

(1)permit LSA 1、2、3、7  deny LSA 4、5

(2)全区域配置nass

(3)不支持虚电路

(4)不会自动通告默认路由

完全nass区域

和nass区域差不多,唯一区别就是干掉LSA 3后 会产生一条默认路由(要手工配)

案例1  重分发过程

spacer.gif

重分发过程

R3把 R4 的路由条目重分发到nass区域内泛洪后,R2会把LSA 类型7 转换成LSA 类型5,我们都知道类型5是ASBR产生的,R2 已经产生LSA 类型5 了证明她是ASBR ,而LSA 类型4必须要承载LSA 类型5 必定会有一个产生LSA 类型4 而产生LSA 类型4 是ABR 所以R1 会产生LSA 类型4 注意 R1是帮R2产生的LSA 类型4 所以LSA 类型4 里边的内容全是R2的信息,这样就能完成重分发了

案例2  在重分发区域内如何选择路径

spacer.gif

R2把R5重分发到OSPF区域中,则cost值为20 Router 0 访问R 5 时上面一条路和下面一条路的cost值都为20(因为在LSA 类型5中默认的是oetwo,她是不累加内部的cost值得)那么是不是就实行负载均衡呢,答案很明显不是的,因为LSA 类型5中得cost类型中的oetwo中有一个转发地址0.0.0.0,他的意思是去外网先要到ASBR ,所以Router 0走上面一条路离ASBR比较近一些,所以他会选上面一条路,因为上路的cost值小于下路的

案例3   谁会实行 7 转 5

spacer.gif

R4 把R 5 重分发到nass区域中去后,到底是R 2 执行 LSA 7 转 LSA 5呢,还是R 3 执行呢,答案是谁的RID 大谁就执行

案例4  双点双向重分发引起的路由环路


spacer.gif

首先ospf的管理距离是110  eigrp的管理距离是90  在路由表中会优先存放管理距离小的    R1 和R2的网段是192.168.1.0/24  R1 的环回接口是1.1.1.1 R2 的环回接口是2.2.2.2 以此类推

在R2 和R 3中都会做重分发时,但是因为R3的RID大,R1 会选择R3为出接口,重分发到nass区域同样的,R6会作为出口,传给R7,双点双向重分发的意思是R8和R9都会把ospf重分发到eigrp 同时也会把eigrp重分发到ospf中,假如说R8先做重分发,先把ospf重分发到eigrp中那么去往192.168.1.0的管理距离为90 会存放在R8的路由表中,R8会通告给R9,R9在做eigrp重分发到ospf中的时候的管理距离是110,而R7说他能到192.168.1.0网段,所以R9 会把数据发给R7 而R7 会把数据发给R8 这样就形成了环路了


解决办法是,1.修改管理距离  2.在R9上过滤来自R8的关于192.168.1.0 的数据




注意::::在主播地址为224.0.0.0--- 224.255.255.255中的TTL值为1

Network 的实际意义是1.在这个端口上启用OSPF并发送hello包 2.把网段宣告到OSPF内

Ospf的优化

1.修改网络类型,例如改为点到点的关闭环回接口(因为不关闭的话,环回接口被宣告进去会和端口进行建立邻居,而他的TTL值为1,端口收不到hello包就会丢弃,建立不了邻居关系,环回接口就会一直发,这样就会消耗CPU

2.修改hello包时间间隔,和死亡时间(调小则协议收敛速度加快,调大则会消耗CPU)

3.修改重传时间 LSP 的重传时间




0SPF 的的三大重点1.LSA  2.四大特殊区域  3.ospf的优化