一、OSPF协议原理

OSPF (Open Shortest Path First开放式最短路径优先)协议【协议号89】。ospf协议是一种链路状态路由协议(ps:IS -IS协议也为链路状态路由协议 ),采用触发更新的方式来向链路中其他路由器通告链路增量变化的状态,同时ospf也是一个内部网关协议(IGP Interior Gateway Protocal),它工作在一个自制系统内,用于自制系统内部的路由选择和信息交换。在广播多路网络中(例如以太网),运行ospf协议的路由器会选举出DR 和BDR ,区域中的路由器会将链路状态信息发送以组播的方式发送给DR(地址为224.0.0.6),DR 再通过组播的方式将链路状态通告给区域内的其他路由器(地址为224.0.0.5)。

OSPF的特点

1.触发更新

2.发送的链路状态信息

3.以组播方式通告状态

4.metric 带宽

5.网络规模无限制

6.等代价负载均衡(cost值相同时才实现负载分担)

7.收敛速度快

8.无路由环

9.三张表

       邻居表:或称邻接数据库(AD)存储邻居路由器的信息

       链路状态数据库:通过LSA(链路状态通告)学习到的网络状态信息

       路由表:或称转发数据库(FD),包含到达目标网络的最优路径

10.支持可变长子网掩码(vlsm)

11.支持子网不连续

12.体系化管理(分区域)

 

OSPF的泛洪机制

  当链路状态发生变化时,,检测到路由变化的ospf路由器生成并发送LSA(链路状态通告) ,并通过组播地址224.0.0.5发送给其所有的邻居路由器。接收到LSA的每个路由器都会复制一份LSA,更新它自己的链路状态数据库LSDB,并将LSA转发给其它的邻居。保证了在更新自己的路由表之前更新自己的LSDB,称作泛洪

通过对LSDB运行SPF算法,来计算到达目标网络的最佳路径,建立一个SPF树,然后从SPF树立选择最佳路径放到路由表里。

OSPF的网络类型

  1. 广播多路访问网络(DR/BDR选举)

  2. 非广播多路访问   (DR/BDR选举)

  3.点到点网络

  4.点到多点网络

 

 

 

DR/BDR选举

  1.比较hello报文的优先级,默认为1,优先级高的为DR ,次高的为BDR。当把优先级设置为0,该路由器将不能成为DR/BDR

  2.优先级相同的情况下,比较RID,高的为DR ,次高的为BDR。

二、案例

 

案例一 :ospf rip 路由重发布

案例说明

如图所示,防火墙F2、R4 以及R11的s0 接口在rip 区域内,R11的E0接口、三层交换机SW3在OSPF区域内。要求rip区域和ospf区域都可以互相学到对方路由信息。

实验设备:华为 quidway 2621 路由器两台

华为 s3526 交换机一台

H3C secpath f100-c 防火墙一台(充当路由器角色)

案例思路:

  在路由器R11上做路由重发布。在华为设备上还要重发布rip和ospf区域内的直连路由到对方区域。

实验拓扑:

clip_p_w_picpath002

 

配置步骤:

 

SW3配置

[Quidway]vlan 10 ###为了为三层交换机配置ip地址,需将接口加入vlan,并配置vlan ip

[Quidway-vlan10]port Ethernet 0/24

[Quidway]interface Vlan-interface 10

[Quidway-Vlan-interface10]ip add 192.168.3.2 255.255.255.0

[Quidway]vlan 20 ###为了为三层交换机配置ip地址,需将接口加入vlan,并配置vlan ip

[Quidway-vlan20]port Ethernet 0/23

[Quidway]interface Vlan-interface 20

[Quidway-Vlan-interface20]ip add 192.168.5.1 255.255.255.0

[Quidway]ospf ###在三层交换机上启动ospf协议

[Quidway-ospf]area 0 ###区域编号为0 ,骨干区域

[Quidway-ospf-area-0.0.0.0]network 192.168.3.0 0.0.0.255

[Quidway-ospf-area-0.0.0.0]network 192.168.5.0 0.0.0.255

R11:

[r11]int se 0

[r11-Serial0]ip add 192.168.2.2 255.255.255.0

[r11-Serial0]rip ver 2

[r11-Serial0]int e 0

[r11-Ethernet0]ip add 192.168.3.1 255.255.255.0

[r11]rip ###在自治系统边界路由器上启动 rip协议

[r11-rip]network 192.168.2.0

[r11]ospf enable ###在自治系统边界路由器上启动ospf协议

[r11-ospf]int e 0 ###将ospf协议应用在接口上

[r11-Ethernet0]ospf enable area 0 ###指出接口所在区域

[r11]rip

[r11-rip]import-route ospf cost 2 ###将ospf协议重发布到rip区域中

[r11-rip]impor direct cost 2 ###将直连路由也重发布到rip区域中

[r11]ospf enable

[r11-ospf]import rip ###将rip协议重发布到ospf区域中,cost默认为20

[r11-ospf]impor direct cost 20 ###将直连路由也重发布到ospf区域中

R4:

[R4]int se 0

[R4-Serial0]ip add 192.168.2.1 255.255.255.0

[R4-Serial0]rip ver 2 ###在接口上配置rip版本为v2

[R4-Serial0]int e 1

[R4-Ethernet1]ip add 192.168.1.2 255.255.255.0

[R4-Ethernet1]rip ver 2 ###在接口上配置rip版本为v2

[R4]rip ###在该路由器上启动rip

waiting...

RIP is running

[R4-rip]network 192.168.1.0

[R4-rip]network 192.168.2.0

fw2

[fw-2]firewall zone untrust

[fw-2-zone-untrust]add interface Ethernet 0/1 ###将接口加入到区域中,否则无法连通

[fw-2-zone-untrust]add interface Ethernet 0/2 ###将接口加入到区域中,否则无法连通

[fw-2]interface Ethernet 0/1

[fw-2-Ethernet0/1]ip add 192.168.1.1 255.255.255.0

[fw-2-Ethernet0/1]rip ver 2

[fw-2]interface Ethernet 0/2

[fw-2-Ethernet0/2]ip add 192.168.4.1 255.255.255.0

[fw-2-Ethernet0/2]rip ver 2 ###在接口上配置rip版本为v2

[fw-2]rip ###配置rip

[fw-2-rip]network 192.168.4.0

[fw-2-rip]network 192.168.1.0

配置完成后交换机sw3所学到的路由信息:

clip_p_w_picpath004

 

配置完成后边界路由器R11所学到的路由信息:

clip_p_w_picpath005

 

配置完成后路由器R4所学到的路由信息:

 

clip_p_w_picpath006

配置完成后防火墙F2所学到的路由信息:

 

clip_p_w_picpath007

 

 

案例二:ospf虚链路&&EIGRP

案例说明

有ospf区域和eigrp区域。ospf区域有area0、area1、area2,并且area2与骨干区域area0未直接相连(虚链路)。现要求将ospf区域路由重发布到eigrp中,将默认路由重发布到ospf区域中。

实验设备

   8台cisco 3620路由器

案例思路:

由于ospf的三个区域中的area2未和area0骨干区域直接相连,所以要在area1 区域的两台边界路由器上配置虚链路,使area2区域”直接“ 和area0 相连。

将默认路由发布到ospf区域时,要加上关键字”always

 

实验拓扑

p_w_picpath

 

配置步骤:

R1配置

R1>en

R1#config t

R1(config)#line con 0

R1(config-line)#logging Synchronized ###打开日志同步

R1(config-line)#no exec-timeout

R1(config-line)#exit

R1(config)#int fa 0/0

R1(config-if)#ip add 192.168.1.1 255.255.255.0

R1(config-if)#loopback   ###设置该端口为loopback 口

R1(config-if)#int ser 1/0

R1(config-if)#ip add 192.168.2.1 255.255.255.0

R1(config-if)#no shut

R1(config)#router ospf 10 ###开启ospf协议,进程号为10

R1(config-router)#network 192.168.1.0 0.0.0.255 area 0 ###192.168.1.0在区域0

R1(config-router)#network 192.168.2.0 0.0.0.255 area 0###192.168.2.0区域0

 

R2配置

R2#config t

R2(config)#line console 0

R2(config-line)#logg sy

R2(config-line)#no exec

R2(config-line)#exit

R2(config)#int ser 1/0

R2(config-if)#ip add 192.168.2.2 255.255.255.0

R2(config-if)#no shut

R2(config-if)#int ser 1/1

R2(config-if)#ip add 192.168.3.1 255.255.255.0

R2(config-if)#no shut

R2(config)#int fa 0/0

R2(config-if)#ip add 192.168.7.1 255.255.255.0

R2(config-if)#no shut

R2(config)#router ospf 10

R2(config-router)#network 192.168.2.0 0.0.0.255 area 0   ###192.168.2.0在区域0

R2(config-router)#network 192.168.3.0 0.0.0.255 area 1   ###192.168.3.0

R2(config-router)#area 1 virtual-link 192.168.5.1 ###在区域1中做虚链路,192.168.5.1 为R4的RID

R2(config)#router eigrp 10    ###开启EIGRP,自制域号为10,同一区域要相同

R2(config-router)#network 192.168.7.0

R2(config)#router eigrp 10

R2(config-router)#redistribute ospf 10 metric 1000 1000 200 29 1000 ###将ospf重发布到eigrp中

R2(config)#router ospf 10 ###默认路由重发布到ospf中

R2(config-router)#default-information originate always ###关键字:默认路由重发布到ospf中时使用

R2(config-router)#

 

R3配置

R3(config)#line con 0

R3(config-line)#logg sy   ###打开日志同步

R3(config-line)#no exec

R3(config-line)#exit

R3(config)#int ser 1/1

R3(config-if)#ip add 192.168.3.2 255.255.255.0

R3(config-if)#no shut

R3(config-if)#int ser 1/0

R3(config-if)#ip add 192.168.4.1 255.255.255.0

R3(config-if)#no shut

R3(config)#router ospf 10  ###开启ospf进程10

R3(config-router)#network 192.168.3.0 0.0.0.255 area 1

R3(config-router)#network 192.168.4.0 0.0.0.255 area 1

R4配置

Router>en

Router#config t

Router(config)#host R4

R4(config)#line con 0

R4(config-line)#logg sy   ###打开日志同步

R4(config-line)#no exec

R4(config-line)#exit

R4(config)#int ser 1/0

R4(config-if)#ip add 192.168.4.2 255.255.255.0

R4(config-if)#no shut

R4(config)#int ser 1/1

R4(config-if)#ip add 192.168.5.1 255.255.255.0

R4(config-if)#no shut

R4(config-if)#

R4(config)#router ospf 10

R4(config-router)#network 192.168.4.0 0.0.0.255 area 1

R4(config-router)#network 192.168.5.0 0.0.0.255 area 2

Router(config-router)#area 1 virtual-link 192.168.7.1(R2的Rid)  ###在区域1中做虚链路,192.168.7.1 为R2的RID

 

R5配置

Router>en

Router#config t

Router(config)#hostname R5

R5(config)#line con 0

R5(config-line)#logg sy  ###打开日志同步

R5(config-line)#no exec

R5(config-line)#exit

R5(config)#int ser 1/1

R5(config-if)#ip add 192.168.5.2 255.255.255.0

R5(config-if)#no shut

R5(config-if)#int fa 0/0

R5(config-if)#ip add 192.168.6.1 255.255.255.0

R5(config-if)#no shut

R5(config-if)#loop

R5(config-if)#

R5(config)#router ospf 10  ###开启ospf进程10

R5(config-router)#network 192.168.5.0 0.0.0.255 area 2 ###192.168.5.0在区域2中

R5(config-router)#network 192.168.6.0 0.0.0.255 area 2

R5(config-router)#

 

R6配置

R6(config)#int fa 0/0

R6(config-if)#ip add 192.168.7.2 255.255.255.0

R6(config-if)#no shut

R6(config-if)#int ser 1/0

R6(config-if)#ip add 192.168.8.1 255.255.255.0

R6(config-if)#no shut

R6(config)#router eigrp 10 ###在R6上配置eigrp协议

R6(config-router)#network 192.168.7.0

R6(config-router)#network 192.168.8.0

 

R7配置

Router#config t

Enter configuration commands, one per line. End with CNTL/Z.

Router(config)#host R7

R7(config)#line con 0

R7(config-line)#logg sy

R7(config-line)#no exec

R7(config-line)#exit

R7(config)#int ser 1/0

R7(config-if)#ip add 192.168.8.2 255.255.255.0

R7(config-if)#no shut

R7(config-if)#int ser 1/1

R7(config-if)#ip add 192.168.9.1 255.255.255.0

R7(config-if)#no shut

R7(config)#router eigrp 10   ###在R7上配置eigrp协议

R7(config-router)#network 192.168.8.0

R7(config-router)#network 192.168.9.0

R7(config-router)#

 

 

R8配置

Router(config)#host R8

R8(config)#line con 0

R8(config-line)#logg sy

R8(config-line)#no exec

R8(config-line)#exit

R8(config)#int fa 0/0

R8(config-if)#ip add 192.168.10.1 255.255.255.0

R8(config-if)#no shut

R8(config-if)#int ser 1/1

R8(config-if)#ip add 192.168.9.2 255.255.255.0

R8(config-if)#no shut

R8(config)router eigrp 10  ###在R8上配置eigrp协议

R8(config-router)#network 192.168.9.0

R8(config-router)#network 192.168.10.0

 

配置截图:

 

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

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

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

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

i - IS-IS, su - IS-IS summary, 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

 

 

R5未导入默认路由之前路由表:

clip_p_w_picpath002[10]

R5导入默认路由之后路由表:多了一条默认路由,出口指向5.1

clip_p_w_picpath004[10]

R8路由表:

clip_p_w_picpath006

 

 

案例三:ospf末节区域、完全末节区域

案例说明:

如图所示,ospf区域有area0 、area1、area2,rip区域内有两台路由器,要求将rip区域内的路由信息发送到ospf区域中,ospf向rip中发布默认路由。将area2区域配置为末节区域,使area2 区域不能学习rip区域内的路由信息;再将area2配置为完全末节区域,使area2区域路由器不能学习域间路由和rip区域的路由信息。

 

 

案例设备:8台思科3620路由器

案例思路:

本案例要将area2配置为末节区域和完全末节区域。

末节区域:配置后该区域内的路由器可以学到域间路由和域内路由(area0 和area1和area2),还有一条默认路由。但是将学不到非ospf区域路由(rip区域)。需要在area2区域内的每台路由器上都要进行配置,包括该区域的边界路由器R5。关键字为”stub “。

完全末节区域:配置后该区域内的路由器将只有area2内的路由和一条默认路由。要成为完全末节区域,只需在末节区域的基础上在R5路由器上添加关键字no-summary。

案例拓扑:

p_w_picpath

 

 

配置步骤:

R1:

R1>en

R1#config t

R1(config)#int fa 0/0

R1(config-if)#ip add 192.168.1.1 255.255.255.0

R1(config-if)#loopback ####设置为loopback口

R1(config-if)#

R1(config-if)#int ser 1/0

R1(config-if)#ip add 192.168.2.1 255.255.255.0

R1(config-if)#no shut

R1(config-if)#exit

R1(config)#router ospf 10  ###配置ospf ,进程号为10 。区域为area1

R1(config-router)#network 192.168.1.0 0.0.0.255 area 1

R1(config-router)#network 192.168.2.0 0.0.0.255 area 1

 

R2

Router>en

Router#config t

Router(config)#int ser 1/0

Router(config-if)#ip add 192.168.2.2 255.255.255.0

Router(config-if)#no shut

Router(config-if)#int ser 1/1

Router(config-if)#ip add 192.168.3.1 2552.55.255.0

Router(config-if)#no shut

Router(config-if)#exit

Router(config)#router ospf 10   ###开启ospf进程10

Router(config-router)#network 192.168.2.0 0.0.0.255 area 1

Router(config-router)#network 192.168.3.0 0.0.0.255 area 1

Router(config-router)#exit

R2#show ip route

O E2 192.168.8.0/24 [110/20] via 192.168.3.2, 00:17:02, Serial1/1

O E2 192.168.9.0/24 [110/20] via 192.168.3.2, 00:11:51, Serial1/1

O E2 192.168.10.0/24 [110/20] via 192.168.3.2, 00:11:51, Serial1/1

O IA 192.168.4.0/24 [110/128] via 192.168.3.2, 00:23:03, Serial1/1

O IA 192.168.5.0/24 [110/192] via 192.168.3.2, 00:22:53, Serial1/1

O IA 192.168.6.0/24 [110/256] via 192.168.3.2, 00:22:53, Serial1/1

O IA 192.168.7.0/24 [110/257] via 192.168.3.2, 00:19:18, Serial1/1

O 192.168.1.0/24 [110/65] via 192.168.2.1, 00:23:08, Serial1/0

C 192.168.2.0/24 is directly connected, Serial1/0

C 192.168.3.0/24 is directly connected, Serial1/1

R3

Router>en

Router#config t

Router(config)#int s 1/1

Router(config-if)#ip add 192.168.3.2 255.255.255.0

Router(config-if)#no shut

Router(config)#int ser 1/0

Router(config-if)#ip add 192.168.4.1 255.255.255.0

Router(config-if)#no shut

Router(config-if)#exit

Router(config)#router ospf 10 ###R3为区域边界路由器,两个端口在两个区域内

Router(config-router)#network 192.168.3.0 0.0.0.255 area 1

Router(config-router)#network 192.168.4.0 0.0.0.255 area 0

Router(config-router)#ex

Router(config)#

Router>en

R4

Router>en

Router#config t

Router(config)#int ser 1/0

Router(config-if)#ip add 192.168.4.2 255.255.255.0

Router(config-if)#no shut

Router(config-if)#int ser 1/1

Router(config-if)#ip add 192.168.5.1 255.255.255.0

Router(config-if)#no shut

Router(config-if)#exit

Router(config)#router ospf 10###骨干区域

Router(config-router)#network 192.168.4.0 0.0.0.255 area 0

Router(config-router)#network 192.168.5.0 0.0.0.255 area 0

R5

Router>en

Router#config t

Router(config)#int ser 1/1

Router(config-if)#ip add 192.168.5.2 255.255.255.0

Router(config-if)#no shut

Router(config-if)#int ser 1/0

Router(config-if)#ip add 192.168.6.1 255.255.255.0

Router(config-if)#no shut

Router(config-if)#int fa 0/0

Router(config-if)#ip add 192.168.8.1 255.255.255.0

Router(config-if)#no shut

Router(config)#router ospf 10 ###有两个区域0和2

Router(config-router)#network 192.168.5.0 0.0.0.255 area 0

Router(config-router)#network 192.168.6.0 0.0.0.255 area 2

Router(config)#router rip ###配置rip版本2

Router(config-router)#network 192.168.8.0

Router(config-router)#ver 2

Router(config-router)#ex

Router(config)#router ospf 10

Router(config-router)#redistribute rip subnets##将rip发布到ospf中,cost默认为20

Router(config-router)#end

Router(config)#router rip

Router(config-router)#default-information originate ####向rip区域中发布默认路由

 

Router(config)#router ospf 10

Router(config-router)#area 2 stub ####在末节区域内的所有路由器上配置stub

 

Router(config-router)#area 2 stub no-summary###配置完全末节区域,在区域的边界路由器上配置

Router(config-router)#

R6

Router>en

Router#config t

Enter configuration commands, one per line. End with CNTL/Z.

Router(config)#

Router(config)#

Router(config)#int s 1/0

Router(config-if)#ip add 192.168.6.2 255.255.255.0

Router(config-if)#no shut

Router(config)#int fa 0/0

Router(config-if)#ip add 192.168.7.1 255.255.255.0

Router(config-if)#no shut

Router(config-if)#loop

Router(config)#router ospf 10  ###开启 ospf10进程

Router(config-router)#network 192.168.6.0 0.0.0.255 area 2

Router(config-router)#network 192.168.7.0 0.0.0.255 area 2

 

 

Router(config-router)#area 2 stub  #####设置末节区域

R7

Router>en

Router#config t

Router(config)#int fa 0/0

Router(config-if)#ip add 192.168.8.2 255.255.255.0

Router(config-if)#no shut

Router(config-if)#int s 1/0

Router(config-if)#ip add 192.168.9.1 255.255.255.0

Router(config-if)#no shut

Router(config)#router rip  ###配置ripv2

Router(config-router)#ver 2

Router(config-router)#network 192.168.8.0

Router(config-router)#network 192.168.9.0

Router(config-router)#ex

R8

Router>en

Router#config t

Router(config)#int ser 1/0

Router(config-if)#ip add 192.168.9.2 255.255.255.0

Router(config-if)#no shut

Router(config-if)#

Router(config-if)#int fa 0/0

Router(config-if)#ip add 192.168.10.1 255.255.255.0

Router(config-if)#loop

Router(config)#router rip

Router(config-router)#ver 2

Router(config-router)#network 192.168.10.0

Router(config-router)#network 192.168.9.0

R1上路由表:

clip_p_w_picpath002[12]

R5上向rip中重分发默认路由default-information originate后,rip区域的路由表

clip_p_w_picpath004[13]

在路由器R5、R6 上配置末节区域后,R6的路由表:

clip_p_w_picpath006[6]

在路由器R5上配置完全末节区域后,R6的路由表:

clip_p_w_picpath008[6]