Open Shortest Path First(OSPF)开放式最短路径优先,属于链路状态协议,是内部网关协议IGP的一
种。运作于自治系统内部,用于在单一自治系统(autonomous system,AS)内决策路由,使用著名的迪克
斯加算法(Dijkstra)来计算出最短的路径(Shortest Path)。OSPF分为OSPFv2和OSPFv3两个版本,其
中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络。OSPFv2是由RFC 2328定义的,OSPFv3是由RFC 5340定
义的。OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这
里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协
议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,
该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表
的。作为一种链路状态的路由协议,OSPF将链路状态组播数据LSA(Link State Advertisement)传送给
在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或
全部的路由表传递给与其相邻的路由器。
OSPF Area
OSPF设计的初衷就是给大型网络使用的,用来解决庞大网络中的管理难题。OSPF使用分层技术将大型的OSPF
网络分割成多个区域(Area)进行管理。Area有两种表达方式,可以是一个16Bit的数字(0~65535)或者
类似IP的方式进行表达,例如:192.168.1.1。使用比较普遍的是第一种方式。Area 0或0.0.0.0是一个特
殊的Area,叫做骨干区域(Backbone Area),所有其它的Area必需骨干区域相连,这是OSPF的基本规则。
学习OSPF的第一步就是必须要掌握OSPF的区域,我们通过下图来详细了解一下OSPF网络的结构。
● Internal Router
Router上所有Interface都属于同一个Area,上图中R3与R5就属于Internal Router。
● Backbone Router
至少一个Interface连接到Backbone Area(Area 0),所以R2、R3、和R4都是Backbone Router。
● Area Border Router(ABR)
连接两个Area或以上的Router叫做ABR,R2和R4都是ABR
● Autonomous System Border Routers(ASBR)
Interface连接到其它AS的Router就是ASBR,在上图的网络中,R6为OSPF与RIP的连接点,即两个AS的连
接点,所以R6就是ASBR,ASBR会做Route Redistribute的工作。
OSPF的基本设定
1、首先我们来看一下OSPF的基本设定方法,如下图中我们通过三台Router连接两个OSPF Area,Area 10
和Area 0。首先配置好各接口的IP地址,设置完IP后,执行以下命令在每个Router上配置OSPF。
router ospf 1
network 192.168.1.0 0.0.0.255 area 10
network 192.168.2.0 0.0.0.255 area 0
2、设置成功后,会看到如下图中的信息,代表Router之间成功成为Neighbor,并由LOADING状态变为FULL
状态。
3、Router之间成为Neighbor中间会经过很多种状态,以下为各种状态的解释。
4、以下是OSPF整个转换过程的信息,可以通过以下命令查看。
debug ip ospf adj
clear ip ospf process
5、要查看neighbor的状态和关系,可以使用如下命令,下表中为各项参数的含义以及成为Neighbor的限制
条件。
show ip ospf neighbor
6、OSPF支持明文密码和MD5加密密码,需要在两个需要使用密码的Router上同时设置。要设置明文密码,先
在两个Router上设置OSPF authentication和key。然后在接口上设定使用密码。
router ospf 1
area 10 authentication
int s1/0
ip ospf authentication
ip ospf authentication-key testkey
7、要设置使用MD5密码,先在两个Router上设置OSPF message-digest,然后在接口上设定使用密码。
router ospf 1
area 10 authentication message-digest
int s1/0
ip ospf message-digest-key 10 md5 testkey
Designated Router
在DR与BDR的选举中,Priority较高的Router会成为一个网段的DR,Priority第二高的Router就会成为BDR
,如果Priority相同,则Router ID较高者成为DR。下面我们通过下图中的网络拓扑来验证一下DR与BDR的
选举。
1、4个Router通过SW1进行互联,首先按照前面介绍过的基本方法设置好4台Router的接口IP地址和OSPF配
置。并确认4台Router已经成为Neighbor。
2、在R1、R2、R3、R4上查看Neighbor Table,每个Router的Priority默认都是1,然后再查看interface
自己的Priority也全部相同,所以最后Router ID最大的192.168.1.1成为DR,第二大的192.168.1.2成为
BDR。
show ip ospf neighbor
show ip ospf int e0/0
3、通过修改Priority来改变DR,下面我们将R4的OSPF Priority修改为100。
int e0/0
ip ospf priority 100
4、修改完成后,需要重启OSPF才会生效,这时我们来重启R1的OSPF,来看看R4会不会变为DR。
clear ip ospf process
5、R1的OSPF重启完成后,在R4上查看,发现DR并没有变成R4,而是变成了R2。这是因为R2为BDR,当DR失
效后,BDR会立即进行顶替,所以,现在我们再将R2也进行一次OSPF重启,R4才会正式升级为DR。
6、重启R2的OSPF,然后再次查看R4,现在R4已经升级为DR了。
自动/手动Neighbor
OSPF利用Multicast来自动发现Neighbor,如果网络不支持Broadcase,也就等于不支持Multicast,这样
就无法自动发现Neighbor了。通常在以太网中都可以支持Broadcast,但是有些网络是不支持Broadcast的
,比如在Frame Relay网络下就无法自动发现Neighbor了,需要手动进行添加。所以凡是Non-Broadcast的
网络,是不会自动发现Neighbor的,需要手动输入Neighbor。如下图是一个Frame Relay网络,三台Rout
er透过Frame Relay网络进行连接。我们来看一下在Frame Relay网络中如何手动添加Neighbor。
1、首先我们通过一台Switch来配置Frame Relay,具体配置参照下图,这里先不多介绍Frame Relay,我们
会在其它文章中做详细介绍。
2、在三台Router上配置Frame Relay以及在三台Router配置OSPF。全都配置完成后,你会发现三台Router
之间并没有自动形成Neighbor。这是因为在Frame Relay网络不支持Multicast。
3、此时我们在三台Router上手动添加neighbor,添加完成后,再次查看,neighbor关系就形成了。
router ospf 1
neighbor 192.168.1.2
neighbor 192.168.1.3
show ip ospf neighbor
Link-state Advertisement(LSA)
OSPF属于链路状态协议,Router会将自己每个Interface所连接的网络告诉其它Router,这样就会计算出自
己的Route Table。LSA中包括几个重要的信息,LSA由谁发送的,LSA中包含连接的网络信处、要去到的网
络的Cost。每个Router收集了这些Link-state信息后就能计算出去往不同网络要走的路径和Cost。LSA有不
同的类型,我们以下图中的拓扑为例,来看看LSA的每一种类型。OSPF的配置部分也可以参照下图。
1、首先配置接口的IP地址和基本的OSPF配置。
2、R1到R6为OSPF网络,R6到R7为RIP网络,所以R6比较特殊,R6需要通过redistribute将RIP汇入到OSPF
网络中。同样,也要把OSPF redistribute到RIP中。所以这里R6的角色为ASBR。
3、每个Router都配置Loopback 0做为Router ID。
4、配置完成后,首先要确认网络正常。特别是OSPF与RIP之间可以正常通信,说明route redistribute可
以正常工作。然后我们就来看一下LSA的不同类型。
5、Router LSA(Type 1)
Router LSA是在同一个Area里面所有Router传送过来的链路状态。通过以下命令查看Type 1 LSA,以R1为
例,可以看到R1收到两条Type 1 LSA,第一条Advertising为1.1.1.1,也就是R1自己,第二条Advertisi
ng是2.2.2.2,也就是R2,R2告诉了R1的信息包括:R2是ABR、R2连着192.168.1.2、R2到192.168.1.2的
Cost是64。
show ip ospf 1 database router
6、Network LSA(Type 2)
Network LSA是由每个网段的DR发送给网络中其它Router,告诉它们DR所连接的网络。通过以下命令查看
Type 2 LSA。以R1为例,因为R2是DR,所以R1收到R2传来的Type 2 LSA,在Type 2中,可以看到R2连接
着自己和1.1.1.1。
show ip ospf neighbor
show ip ospf 1 database network
7、Network Summary LSA(Type 3)
Network Summary LSA由ABR产生,用来通知Area内的所有Router从它那里可以到达哪些网络以及Cost。通
过以下命令查看Type 3 LSA。以R1为例,由于R2是ABR,所以R1收到6条来自R2(2.2.2.2)的Type 3 LSA。
所以如下图,我们可以看到R2告诉R1从它那里可以去往的6个网络以及去往每个网络的Cost是多少。
show ip ospf 1 database summary
8、ASBR Summary LSA(Type 4)
ASBR Summary LSA也是由ABR产生,告知Area中的其它Router从它那里可以到达哪些ASBR以及Cost。通过
以下命令查看Type 4 LSA。以R1为例,R1收到一条ASBR Summary,通过这条LSA,R2告诉R1从它那里可以
到达一个叫6.6.6.6的ASBR,Cost是256。
show ip ospf 1 database asbr-summary
9、External LSA(Type 5)
External LSA由ASBR产生,告诉所有Area里的所有Router从它那里可以到达哪些External Network,通
过以下命令查看Type 5 LSA。以R1为例,R1收到R6(6.6.6.6)发布的Type 5 LSA,R6告诉R1从它那里可
以到达192.168.6.0这个External网络,Metric Type是2,Cost是20。
show ip ospf 1 database external
10、通过以上这些链路状态信息,OSPF的Router就会计算出自己的Routing Table。如下图我们以R3为例,
看一下R3的Routing Table。O表示此条路由是通过OSPF计算出来的,IA表示这条路由为跨区路由,需经过
ABR。E2或E1表示这条路由为External Route,需要经过ASBR。数字110代表AD(Administrative Dist
ance),110后面的数字代表该Router的OSPF Metric。
Stub Area
OSPF Stub区域是一个末梢区域,当一个OSPF区域处于整个自治系统边界时,而又不含其他路由协议,这时
就可以配置OSPF Stub区域。我们还是以前面的网络拓扑为例,先来看一下R1的Route Table和OSPF data
base。可以看到R1收到了Type 1到Type 5的LSA,然后产生出Route Table。从R1的角度来看,无论去往
哪一个网络,下一跳(Next Hop)都是192.168.1.2,那么为什么还要记住这么多条路由呢,是不是只记住
Next Hop是192.168.1.2就可以了,Stub Area就是为了此而生。当配置OSPF Stub区域后,Stub区域中的
路由器会增加一条至ABR的默认路由条目,当在ABR上配置了完全末梢区域后,末梢区域的其他路由器的路由
条目除了直连的路由条目外,只有一条到达ABR的路由条目默认路由,不会学习其他区域的路由条目,到其他
区域的数据包通过ABR转发。这样减少了末梢区域其他路由器的路由条目和路由传递的数量,提高路由器的性
能。
1、从拓扑上来看,R1处于OSPF自治系统的末端,并且没有连接其它路由协议,所以现在我们在R1和R2上配
置Stub Area。只需要在OSPF中增加一条指令即可。
area 10 stub
2、配置完成后,我们在R1上查看Route Table,可以看到原来的External Route(E2)已经不见了并且被
一条0*IA的Default Route所取代。
3、查看OSPF Database,Stub Area已经禁止Type 4和Type 5的LSA进入该区域,并且ABR会发出一条0.0.
0.0的Default Route(Type 3)。
4、通过上面的命令已经将External network简化,下面在R1和R2上执行以下命令,形成Totally Stubby
Area。然后再次从R1上查看OSPF Database和Route Table。可以看到除了0.0.0.0之外的所有Type 3
LSA也被禁止了,R1的Route Table进一步简化。由此可见Stub Area和Totally Stubby Area能有效减少
LSA的传递,减少对网络带宽的占用,同时也简化了Route Table。
NSSA(Not So Stubby Area)
在实际的组网中,往往需要引入外部路由,因此就要求Stub区域需要存在ASBR路由器,为此就有了NSSA概
念。NSSA是指包含有ASBR路由器的Stub区域,能学习本区域连接的外部路由,能学习域间路由,但是不能
学习其它区域的外部路由。NSSA区域内的ASBR产生Type 7 LSA,仅在NSSA区域传播,NSSA的ABR将NSSA内
部产生的Type 7 LSA转化为Type 5 LSA再发布出去,同时更改LSA的发布者为ABR自已。我们还是以下图拓
扑为例,来看一下NSSA的工作原理。
1、首先查看R5的Route Table和OSPF Database。可以看到R5的Route Table还没有进行简化,但是我们
不能使用Stub Area或Totally Stubby Area来直接简化,因灰这个区域还连着External Network Area
(RIP)。这时要进行简化,就可以用NSSA来进行简化。
2、在区域中的所有Router上执行以下命令配置NSSA。
router ospf 1
area 20 nssa
3、配置完成后,在R5上查看OSPF Database,可以看到Type 4和Type 5 LSA已经消失不见,同时增加了一
个Type 7的LSA。
4、由于Type 4和Type 5被NSSA禁用,因此ASBR就会用Type 7来传送External Netowrk的信息,Type 7
的LSA的内容与Type 5类似,当Type 7 LSA从R6到达NSSA的另一边R4时,再次转化为Type 5 LSA传送到其
它区域。
5、查看R5的Route Table,虽然Route条目数量还没有改变,但是之前的E2变成了N2。从LSA的角度来看,
NSSA删减了Type 4与Type 5 LSA,增加了Type 7 LSA。
6、同样,我们现在可以再增加一条指令,像前面介绍的Totally Stubby Area一样,增加一条指令:no-su
mmary,变成Totally Not So Stubby Area。
7、现在再次查看R5的OSPF Database和Route Table。NSSA的简化工作就完成了。
8、现在我们一共介绍了6种类型的LSA,下表是对这6种LSA的总结。
Metric和Cost
OSPF依据Cost来计算Metric,由Source到Destination的整条路径的Cost总和就是Metric。默认Cost等
于100Mbit/Interface BW,这个100Mbit叫做Reference BW,也就是参考带宽。下面我们通过下图中的
拓扑来看一下Cost如何计算。我们来计算一下R1到达3.3.3.3的Cost是多少。
1、R1到R2要经过e0/0,e0/0的BW为10000 Kbit,也就是10Mbit,Cost=100M/10M=10
2、R1再经过R2的s1/0,s1/0的BW为1544 Kbit,也就是1.544M,Cost=100M/1.544M=64
3、到达R3后,再经过Loopback 0接口到达3.3.3.3,L0的BW为8000000 Kbit,也就是8000M,Cost=100
/8000=1。注:Cost最小值为1。
4、最后,我们就可能算出,从R1到达3.3.3.3的Cost=10+64+1=75。
5、同样,从R3到达R1的1.1.1.1的Cost也应该是75。
6、有多种方法可以修改Cost,包括修改ip ospf cost,修改interface bandwidth,或者修改reference
BW。下面我们来演示一下通过修改ip ospf cost来改路径的Cost。修改后可以看到R1到达3.3.3.3的Cost
由原来的75变成了115。注意这只是修改了单向的Cost,从R3到1.1.1.1的Cost并不受影响。也就是R3到1.1
.1.1的Cost值不会变,还是75。
int e0/0
ip ospf cost 50
7、通过修改Interface BW来改变Cost,可以看到我们在R3上将s1/0的BW改为10000后,R3到达R1的1.1.1
.1的Cost由原来的75变为21。
8、通过修改Reference bandwidth来修改Cost,可以看到我们在R3上将OSPF 1的reference BW改为
10000后,R3到达R1的1.1.1.1的Cost由原来的21变为6487。
OSPF的路径选择
与其它路由协议一样,OSPF并不会把所有路径都放进Route Table,只会选择当中一条或多条路径做为路由
路径。OSPF按照以下的顺序来进行路径的选择:
1、先按照Route Type来选择:Intra-area(O)> Inter-area(O IA)> Type 1 External
(O E1/N1)> Type 2 External(O E2/N2)
2、如果Route Type相同,比较Metric,Metric小的胜出。
3、如果Metric也相同,选择n条path一起加入到Route Table中,进行负载均衡。(n=maximum paths)
我们以下图中的拓扑为例,来看一下OSPF的路径选择,首先按照配置配置好所有的Router,这个拓扑的目的
是为R1提供4条能够到达6.6.6.6并且Metric相同的路由:
1、R1经过R2的E2 External Route(O E2)
2、R1经过R3的E1 External Route(O E1)
3、R1经过R4的Inter-area Route(O IA)
4、R1经过R5的Inter-area Route(O)
1、全部配置完成后,我们在R1上将e0/1-3这三个interface全部shutdown。现在R1到达6.6.6.6就只有R2
(192.168.2.2)这一个Next Hop了,类型为E2。
2、现在我们将R1的e0/1打开,由于R3(192.168.3.3)这条路由是E1,OSPF判断E1比E2好,所以会选择用
E1代替E2,所以现在R3成为Next Hop。
3、现在我们将R1的e0/2打开,由于R4(192.168.4.4)这条路由是O IA Route,OSPF判断它比E1好,所以
会选择用它来代替E1,所以现在R4成为Next Hop。
4、最后,我们将R1的e0/3打开,由于R5(192.168.5.5)这条路由是Intra-area Route,OSPF知道Intra
-area Route才是最好的,所以会选择用它来做Next Hop,所以现在当R1的e0/0-3全部打开以后,最终R5就
成为了到达6.6.6.6的Next Hop。
5、查看R1的Route Table,虽然有4条路径可以到达6.6.6.6,但现在R1只经过R5到达6.6.6.6网络。
Virtual Link
Virtual Link的概念非常简单,就是把两个实体上分离的Area连接起来,这样做主要有两个目的,第一是
可以帮助没有直接与Backbone Area(Area 0)相连的Area建立一条Virtual Link连接起来。第二就是通
过Virtual Link把不同的Backbone Area(Area 0)连接起来。
1、我们先来看第一种情况,前面我们讲过,所有Area都必须与Backbone Area(Area 0)相连接,以下图
为例,Area20并没有实体连接到Area 0,这种情况下,即便把所有OSPF都设定完毕,R1与R2都不会收到Ar
ea 20的Route。在R1和R2上查看路由,可以看到并没有192.168.3.0的路由信息。
2、这时,我们要通过Area 10将Area 20接驳到Area 0。在R2与R3上配置一条Virtual Link,使用如下命
令进行设置。这里将Area 10配置为transit area,transit area就是Virtual Link要经过的Area。
R2:
router ospf 1
area 10 virtual-link 3.3.3.3
R3:
router ospf 1
area 10 virtual-link 2.2.2.2
3、配置完成后,再查看R1与R2的路由,这时R1与R2就可以收到Area 20的路由信息了。
4、下面我们再来看一下接驳两个Backbone Area(Area 0)的情况,由于整个OSPF网络中只能存在一个
Backbone Area(Area 0),如果有两个或多个Area 0的话,就必须用 Virtual Link将它们连接起来。
如下图,两个Area 0没有连接到一起,所以是相互看不到对方的。
5、下面我们在R2和R3之间建立Virtual Link。方法与前面的相同,这里不再重复。
6、Virtual Link配置完成后,两个Area 0就可以互相看到对方了,注意虽然中间经过了Area 10,但这条
Area 0到Area 0的Link还会被视为Intra-area Route。
Summarization
最后我们来简单说一下Summarization,Summarization可以将相连的网络组合起来,减少路由条目的数
量。我们以下图为例,通过R2将172.16.1.1/32和172.16.2.2/32这两个网络进行汇总。
1、首先看一下R3的Route Table,没做汇总之前,分别收到172.16.1.1和172.16.2.2两条路由,
2、在R2上配置Area Range进行汇总。
router ospf 1
area 0 range 172.16.0.0 255.255.0.0
3、汇总完成后,再从R3上查看Route Table,可以看到两条路由汇总成了一条172.16.0.0/16