OSPF(Open Shortest Pass First)俗称开放最短路径优先协议,是众多内部网管协议中最常用的,同时他也是一个链路状态协议。OSPF的组播地址为:224.0.0.5 224.0.0.6,它是无类路由协议,支持VLSM可变长子网掩码,所以他同时支持IPV4及IPV6。OSPF的度量值一般是与链路带宽成反比的,所以带宽越大开销值就越小,同时也就一位置链路越优(接口开销=参考带宽/逻辑带宽)。
  
  接下来我们谈一下OSPF的运行原理。OSPF组播的方式是通过OSPF的接口发送Hello包,若有OSPF邻居,则建立OSPF邻居关系、形成邻居表,通过互相发送LSA(相互通告路由)形成LSDB。最后通过SPF算法,得到cost最小的路径放入路由表。在运行过程中,必须配置好骨干区域0,同时其他区域需连接到骨干区域。这样做的好处是缩减路由表,本地拓扑变化值影响一个区域,尤其是某些LSA之子本地泛红,不泛洪到其他区域。
  
  OSPF区域划分基于接口,可分为骨干区域(区域0)及非骨干区域(非0区域)。骨干区域必须连接所有的非骨干区域,而且骨干区域不可分割,有且只有一个,一般情况下,骨干区域内没有终端用户。非骨干区域一般根据实际情况而划分,必须连接到骨干区域(不规则区域也需通过tunnel或virtual-link连接到骨干区域)。一般情况下,非骨干区域主要连接终端用户和资源。
  
  OSPF路由器身份可分为5类:Designated Router,即指定路由器,OSPF协议启动后开始选举而来,简称DR;备份指定路由器(Back-up Designated Router,简称BDR),同样是由OSPF启动后选举而来;其他路由器(DRothers),非DR非BDR的路由器;区域边界路由器(Area Border Routers,即ABR),连接不同OSPF区域;自治系统边界路由器(Autonomous System Boundary Router,简称ASBR),位于OSPF和非OSPF网络之间;骨干路由器,至少有一个借口连接到骨干区域(区域0)。
  
  若发现了有OSPF邻居,则建立OSPF邻居关系,邻居有两个状态邻居Neighbors及邻接Adjacency。两者间的关系是邻居不一定是邻接,邻接一定是邻居,只有交互了LSA的OSPF邻居才成为OSPF的邻接,之交互Hello包的支撑位邻居,在点对点网络中,所有邻居都能成为邻接;MA(广播多路访问网络,比如以太网)网络类型中,DR,BDR,DRothers三者关系为:DR、BDR与所有的邻居形成邻接,DRothers之间只是邻居而不交换LSA。在建立邻居关系时,Hello与Dead Time时间不一致(改Hello的话Dead自动*4,单改Dead的话Hello不变)、区域ID必须一致、认证(password一致)、Stub标识一致(与特殊区域有关,之后介绍)、MTU-携带在DBD报文中,两端口必须一致、掩码,如12.1.1.1/30——12.1.1.2/24 这种情况是可以ping通的,但邻居关系起不来(OSPF对环回口,无论掩码多少位,都按32位处理,所以建议环回口直接/32,或者在环回口下还原真实掩码)、ACL(是否放行OSPF)这些原因会影响OSPF的邻居建立。
  
  OSPF是一种一旦拓扑发生变化便会触发更新的机制,也有周期性更新(30分钟一次)机制,或当收到一条LSA之后,首先查看是否在LSDB中,若没有则假如LSDB,回复LSACK。继续泛洪出去,并且通过SPF算法计算最佳路径并加入路由表。若存在,则比较谁的更“新”(看序号),序号大者新,若本地不如收到的信更新本地LSDB并泛洪,且通过SPF算法计算最佳路径并加入路由表,若比收到的新,则将本地的泛洪出去。
  
  OSPF数据包又可分为几种类型,Hello--10秒发送一次,死亡时间40s,4倍关系,可以修改;DBD--Database Description,仅仅是一个对本地数据库的概念性叙述,供路由器核对数据库是否同步;LSR--Link-State Request,请求链路状态,在数据库同步过程中使用,请求其他角色发送自己失去的LSA最新版本;LSU--Link-State Update,链路状态更新,LSU包括几种类型的LSA,LSU负责泛洪LSA,和相应LSR,LSA只会发送给之前以LSR请求的LSA的直连邻居,进行泛洪的时候,邻居路由负责把收到的LSA信息重新封装在新的LSU中;LSACK--链路状态确认,路由器必须对每个收到的LSA进行LSACK确认,但可以用一个LSACK确认多个LSA。
  
  DR、BDR选举时,比较router-id,router-id,由工程师指定,这台设备最大的环回口ip,没有环回口的话,物理接口ip地址最大的可获得选举规则。首先,最高优先级值的路由器被选为DR(默认优先级相同:1),次高优先级的为BDR;其次,若优先级相同,则比较router-id,拥有最高router-id的成为DR,次高的成为BDR;第三,优先级被设置为0的不参与选举;第四,OSPF系统启动后,若40s内没有新设备接入就会开始选举,所以为保证DR与BDR的选举不发生意外,建议优先配置想成为DR与BDR的设备;第五,DR与BDR不可以抢占;第六,当DR小时之后,BDR直升DR,重新选BDR;第七,所有DR,BDR,DRothers说的都是接口,而不是设备;最后,不同网段间选DR,BDR,而不是以OSPF区域为单位。
  
  OSPF还具有不同的状态,Down State,Init State(发送了Hello包却还没收到的情况下),Two-way State(收到了一个Hello包且在对方回复的Hello包中包括自己的router-id),Exstart State(First DBD确认主从关系,router-id大的为主,先发包),Exchange State(交互DBD 相互学习),Loading State(LSR与LSU的交互过程),Full State(所有交互已经完成)。上文中DBD又是什么呢?只是一个目录的性质,并且第一个DBD只是用来协商之后的DBD由谁先发送。
  
在此,我们对下面的拓扑图中的内容进行基本配置演示:
OSPF介绍及基础配置_第1张图片

首先,对R1进行配置:

  
1 R2>en
2 R2#conf t
3 R2(config)#int lo 0
4 R2(config-if)#ip add 2.2.2.2 255.255.255.255
5 R2(config-if)#no sh
6 R2(config-if)#exi
7 R2(config)#int f0/0
8 R2(config-if)#ip add 100.1.1.2 255.255.255.0
9 R2(config-if)#no sh
10 R2(config-if)#exi
11
12 R2(config)#router os 100
13 R2(config-router)#route
14 R2(config-router)#router-id 2.2.2.2
15 R2(config-router)#net 2.2.2.2 0.0.0.0 a 0
16 R2(config-router)#net 100.1.1.0 0.0.0.255 a 0
17 R2(config-router)#ex
  
对R2进行配置:
  
1 R2>en
2 R2#conf t
3 R2(config)#int lo 0
4 R2(config-if)#ip add 2.2.2.2 255.255.255.255
5 R2(config-if)#no sh
6 R2(config-if)#exi
7 R2(config)#int f0/0
8 R2(config-if)#ip add 100.1.1.2 255.255.255.0
9 R2(config-if)#no sh
10 R2(config-if)#exi
11
12 R2(config)#router os 100
13 R2(config-router)#route
14 R2(config-router)#router-id 2.2.2.2
15 R2(config-router)#net 2.2.2.2 0.0.0.0 a 0
16 R2(config-router)#net 100.1.1.0 0.0.0.255 a 0
17 R2(config-router)#ex
  
对R3进行配置:
  
1 R3>en
2 R3#conf t
3 R3(config)#int lo 0
4 R3(config-if)#ip add 3.3.3.3 255.255.255.255
5 R3(config-if)#no sh
6 R3(config-if)#exi
7 R3(config)#int f0/0
8 R3(config-if)#ip add 100.1.1.3 255.255.255.0
9 R3(config-if)#no sh
10 R3(config-if)#exi
11
12 R3(config)#router os 100
13 R3(config-router)#router-id 3.3.3.3
14 R3(config-router)#net 3.3.3.3 0.0.0.0 a 0
15 R3(config-router)#net 100.1.1.0 0.0.0.255 a 0
16 R3(config-router)#exi
  
对R4进行配置:
  
1 R4>en
2 R4#conf t
3 R4(config)#int lo 0
4 R4(config-if)#ip add 4.4.4.4 255.255.255.255
5 R4(config-if)#no sh
6 R4(config-if)#exi
7 R4(config)#int f0/0
8 R4(config-if)#ip add 100.1.1.4 255.255.255.0
9 R4(config-if)#no sh
10 R4(config-if)#exi
11 R4(config)#int f0/1
12 R4(config-if)#ip add 45.1.1.4 255.255.255.0
13 R4(config-if)#no sh
14 R4(config-if)#exi
15
16 R4(config)#router os 100
17 R4(config-router)#router-id 4.4.4.4
18 R4(config-router)#net 4.4.4.4 0.0.0.0 a 0
19 R4(config-router)#net 100.1.1.0 0.0.0.255 a 0
20 R4(config-router)#net 45.1.1.0 0.0.0.255 a 1
21 R4(config-router)#exi
  
对R5进行配置:
  
1
2 R5>en
3 R5#conf t
4 R5(config)#int lo 0
5 R5(config-if)#ip add 5.5.5.5 255.255.255.255
6 R5(config-if)#no sh
7 R5(config-if)#exi
8 R5(config)#int f0/1
9 R5(config-if)#ip add 45.1.1.5 255.255.255.0
10 R5(config-if)#no sh
11 R5(config-if)#exi
12
13 R5(config)#router os 100
14 R5(config-router)#router-id 5.5.5.5
15 R5(config-router)#net 5.5.5.5 0.0.0.0 a 1
16 R5(config-router)#net 45.1.1.0 0.0.0.255 a 1
17 R5(config-router)#exi
  
以上就是全部基本配置,接下来我们来查看一下基本信息
查看邻居信息:
  
1 R4#show ip ospf neighbor
2
3 Neighbor ID Pri State  Dead Time Address  Interface
4 1.1.1.1   1 FULL/DR  00:00:38 100.1.1.1  FastEthernet0/0
5 2.2.2.2  1 FULL/BDR  00:00:34 100.1.1.2  FastEthernet0/0
6 3.3.3.3  1 2WAY/DROTHER  00:00:33  100.1.1.3  FastEthernet0/0
7 5.5.5.5  1 FULL/DR  00:00:33 45.1.1.5  FastEthernet0/1

可以看见R4这台路由器一共有四个邻居,这里临界状态,full就是代表邻接,我们可以看见区域0中R1是DR,R2是BDR,R3和R4都是DRothers,而区域1中R5是DR。那么我们可以推测,R4是区域1的BDR,我们在R5上查看:

1 R5#show ip ospf neighbor
2
3 Neighbor ID Pri State  Dead Time Address  Interface
4 4.4.4.4  1 FULL/BDR  00:00:36 45.1.1.4  FastEthernet0/1

推测不假,下面查看一下开启OSPF的接口信息:

1 R1#show ip ospf interface
2 FastEthernet0/0 is up, line protocol is up
3  Internet Address 100.1.1.1/24, Area 0
4  Process ID 100, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 10
5  Transmit Delay is 1 sec, State DR, Priority 1
6  Designated Router (ID) 1.1.1.1, Interface address 100.1.1.1
7  Backup Designated router (ID) 2.2.2.2, Interface address 100.1.1.2
8  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
9  oob-resync timeout 40
10   Hello due in 00:00:00
11  Supports Link-local Signaling (LLS)
12  Cisco NSF helper support enabled
13  IETF NSF helper support enabled
14  Index 2/2, flood queue length 0
15  Next 0x0(0)/0x0(0)
16  Last flood scan length is 1, maximum is 1
17  Last flood scan time is 4 msec, maximum is 4 msec
18  Neighbor Count is 3, Adjacent neighbor count is 3
19  Adjacent with neighbor 2.2.2.2 (Backup Designated Router)
20  Adjacent with neighbor 3.3.3.3
21  Adjacent with neighbor 4.4.4.4
22  Suppress hello for 0 neighbor(s)
23 Loopback0 is up, line protocol is up
24  Internet Address 1.1.1.1/32, Area 0
25  Process ID 100, Router ID 1.1.1.1, Network Type LOOPBACK, Cost: 1
26  Loopback interface is treated as a stub Host

可以看见,开启了OSPF的接口的详细信息,比如Router-id,区域id,进程id,以及接口是如何加入进入OSPF的(network)
查看OSPF的路由:

1 R5#show ip route ospf
2   1.0.0.0/32 is subnetted, 1 subnets
3 O IA   1.1.1.1 [110/21] via 45.1.1.4, 00:26:31, FastEthernet0/1
4   2.0.0.0/32 is subnetted, 1 subnets
5 O IA   2.2.2.2 [110/21] via 45.1.1.4, 00:26:31, FastEthernet0/1
6   100.0.0.0/24 is subnetted, 1 subnets
7 O IA   100.1.1.0 [110/20] via 45.1.1.4, 00:26:31, FastEthernet0/1
8   3.0.0.0/32 is subnetted, 1 subnets
9 O IA   3.3.3.3 [110/21] via 45.1.1.4, 00:26:31, FastEthernet0/1
10   4.0.0.0/32 is subnetted, 1 subnets
11 O IA   4.4.4.4 [110/11] via 45.1.1.4, 00:26:31, FastEthernet0/1

在R5中查看OSPF的路由,发现全部都是O IA标记,这里O 标识来自OSPF,而IA代表是OSPF其他区域传来的路由(关于标记在后面讲解LSA中还会提到),我们再在R1上查看一下OSPF的路由:

1 R1#show ip route os
2   2.0.0.0/32 is subnetted, 1 subnets
3 O   2.2.2.2 [110/11] via 100.1.1.2, 00:29:28, FastEthernet0/0
4   3.0.0.0/32 is subnetted, 1 subnets
5 O   3.3.3.3 [110/11] via 100.1.1.3, 00:29:28, FastEthernet0/0
6   4.0.0.0/32 is subnetted, 1 subnets
7 O   4.4.4.4 [110/11] via 100.1.1.4, 00:29:28, FastEthernet0/0
8   5.0.0.0/32 is subnetted, 1 subnets
9 O IA   5.5.5.5 [110/21] via 100.1.1.4, 00:28:17, FastEthernet0/0
10   45.0.0.0/24 is subnetted, 1 subnets
11 O IA   45.1.1.0 [110/20] via 100.1.1.4, 00:29:28, FastEthernet0/0

可见,区域1的被标识为O IA,而区域0的则只是O。
以上就是基本的OSPF系统的配置。