这篇文档主要是针对OSPF在NBMA网络中运行的五种模式,由于这五种模式一直是比较难理解的部分,文档会结合实验拓扑图以及对实验配置结果的分析对五种模式进行详细阐述。仔细阅读并按照我的操作步骤进行实验配置,绝对会让你醍醐灌顶。最后还是欢迎各位大牛提出宝贵意见。
1. OSPF在网络中运行模式产生的原因
由于在本文中,只介绍NBMA网络中的FR网络,所以以下的NBMA网络将由FR网络代替。
FR网络没有广播功能,而OSPF利用组播传送LSA报文,在FR网络中为了实现广播或者多播功能,路由器复制要广播或者多播的分组,并通过永久虚电路(PVC)发到所有目的地。该过程需要占用大量的CPU和带宽。并且,如果FR网络不是全网互联,例如我们常见的hub-spoken拓扑的FR网络,那么路由发送的信息就不会到达所有的目的路由器,也就无法保证OSPF的正常运行。
为了解决上述问题,RFC定义了OSPF在NBMA网络中的两种运行模式,Cisco在此基础上增加了三种运行模式,共五种运行模式。通过定义这五种运行模式,克服了OSPF在帧中继网络中运行存在的问题。
2. OSPF在帧中继网络运行的五种模式
五种运行模式分别为:
non-broadcast,point-to-multipoint,point-to-multipoint
non-broadcast,P2P,Broadcast。
其中前两种是RFC定义的,Cisco支持以上五种。
要修改OSPF的运行模式,可以使用命令:
在本实验中需要提前掌握的知识点为:
(1)帧中继网络的基本配置
(2)帧中继网络中动态映射和静态配置的区别
(3)帧中继网络中全互连和hub-spoken结构的区别
(4)OSPF的基本配置
3:五种运行模式的区别
模式一:non-broadcast模式
此种模式为OSPF在帧中继网络中默认的运行模式,在此模式下,OSPF模仿在广播网络上的运行模式。如果是一个全互连(Full-Mesh)的帧中继网络,不需要指定邻居;如果是一个非全互连(Partial-Mesh)的帧中继网络,则需要手动指定邻居。当网络中邻居不多时,non-broadcast是在NBMA网络中运行OSPF效率最高的方式。
在本试验中,采用的是hub-spoken结构,属于非全互连,所以需要手动指定邻居
模式二:broadcast模式
当运行OSPF的接口设置为broadcast模式后,此时NBMA网络完全看作是一个广播型链路,类似于以太网。此种选举模式中,需要选举DR和BDR。
请注意:在本模式下,有两条关键命令:
第一条:
frame-relaymap ip ip-address DLCI号 broadcast
关键字broadcast选项表明可以在这条VC上传播broadcast,multicast帧,所以OSPF的组播报文就可以正常传输,保证了路由协议的正常运行。
第二条:
ip ospf priority
由于OSPF的hello报文的TTL值为1,只能传输1跳。在Hub&Spoken模式下,为了解决OSPF运行混乱问题,需要通过手动配置方式,将DR固定在Hub端。解决方式是将处于Hub的路由器的接口的优先级大于0,其余Spoken端的路由器的接口均为0。
模式三:点到多点(Point-to-multipoint)
在此模式中,将所有路由器与路由器之间的连接看作是多个点到点链路的集合。无需手动指定邻居,也无需手动指定DR和BDR。
模式四:点到多点非广播(Point-to-multipoint non-broadcast)
此种模式下,需要手动指定邻居。
模式五:点到点(point to point)
此模式运用于点到点子接口。将路由器之间的互联看作是多条点与点链路的集合。与point-to-multipoint的区别在于,point-to-point将Hub端的接口划分为多个逻辑子接口,点与点子接口之间的连接看作是专用VC。每条VC采用组播224.0.0.5发送协议报文,无需选举DR和BDR。
请注意:point-to-point和point-to-multipoint的虽然都可以看作是多个点到点链路的集合,但是他们的的区别在于:hello间隔和死亡时间间隔不一样。
四:实验拓扑图
五:实验配置及结果分析
首先对四台路由器做基本的配置:
基本的配置如下:
R0(config)#hostname FRS
FRS(config)#frame-relay switching
FRS(config)#int s0/1
FRS(config-if)#clock rate 64000
FRS(config-if)#encapsulation frame-relay
FRS(config-if)#frame-relay lmi-type cisco
FRS(config-if)#frame-relay intf-type dce
FRS(config-if)#frame-relay route 102 int s0/2 201
FRS(config-if)#frame-relay route 103 int s0/3 301
FRS(config-if)#no shutdown
FRS(config-if)#int s0/2
FRS(config-if)#no shu
FRS(config-if)#clock rate 64000
FRS(config-if)#encapsulation frame-relay
FRS(config-if)#frame-relay lmi-type cisco
FRS(config-if)#frame-relay intf-type dce
FRS(config-if)#frame-relay route 201 int s0/1 102
FRS(config)#int s0/3
FRS(config-if)#encapsulation frame-relay
FRS(config-if)#clock rate 64000
FRS(config-if)#frame-relay lmi-type cisco
FRS(config-if)#frame-relay intf-type dce
FRS(config-if)#frame-relay route 301 int s0/1 103
以上为FRS(帧中继交换机)的基本配置,在这里请一定注意,本实验采用的是hub-spoken结构,所以在路由器R2和R3之间,并没有进行接口的映射配置。
FRS(config-if)#do show frame-relay rou////查看接口输入和输出对应的DLCI
第一条命令的含义是:路由器从接口s0/1接口到DLCI=102的数据帧,需要从s0/2接口输出,并且将DLCI替换为201.其余命令的含义类似。
对路由器R1和R2和R3进行基本的配置
R1(config)#int lo 0
R1(config-if)#ip add 1.1.1.1 255.255.255.0
R1(config)#int s0/1
R1(config-if)#no shu
R1(config-if)#no shutdown
R1(config-if)#ip add 192.168.123.1 255.255.255.0
R1(config-if)#encapsulation frame-relay
R1(config-if)#frame-relay lmi-type cisco
R1(config-if)#frame-relay map ip 192.168.123.2 102 broadcast//采用静态映射方式
R1(config-if)#frame-relay map ip 192.168.123.3 103 broadcast
R1(config-if)#frame-relay map ip 192.168.123.1 102////配置自己接口的IP地址的映射
R1(config-if)#no frame-relay inverse-arp//关闭IARP
R1(config)#router ospf 1///OSPF的配置
R1(config-router)#network 1.1.1.0 0.0.0.255 area 0///网段的宣告
R1(config-router)#network 192.168.123.0 0.0.0.255 area 0
同理R2和R3的配置类似,但是由于R1是HUB点,R2和R3是Spoken点,那么配置有存在不一样
R2(config)#int lo 0
R2(config-if)#ip add 2.2.2.2 255.255.255.0
R2(config-if)#no shu
R2(config)#int s0/2
R2(config-if)#no shu
R2(config-if)#ip add 192.168.123.2 255.255.255.0
R2(config-if)#encapsulation frame-relay
R2(config-if)#frame-relay lmi-type cisco
R2(config-if)#frame-relay map ip 192.168.123.1 201 broadcast///关键点201
R2(config-if)#frame-relay map ip 192.168.123.3 201 br////关键点201
R2(config-if)#frame-relay map ip 192.168.123.2 201
R2(config-if)#no frame-relay inverse-arp
R2(config)#router ospf 1
R2(config-router)#network 2.2.2.0 0.0.0.255 area 0
R2(config-router)#network 192.168.123.0 0.0.0.255 area 0
R3的基本配置:
R3(config)#int lo 0
R3(config-if)#ip add 3.3.3.3 255.255.255.0
R3(config-if)#no shu
R3(config-if)#exit
R3(config)#int s0/3
R3(config-if)#no shu
R3(config-if)#no shutdown
R3(config-if)#ip add 192.168.123.3 255.255.255.0
R3(config-if)#encapsulation frame-relay
R3(config-if)#frame-relay lmi-type cisco
R3(config-if)#frame-relay map ip 192.168.123.1 301 b///关键点301
R3(config-if)#frame-relay map ip 192.168.123.2 301 br///关键点301
R3(config-if)#no frame-relay inverse-arp
R3(config)#router ospf 1
R3(config-router)#network 3.3.3.0 0.0.0.255 area 0
R3(config-router)#network 192.168.123.0 0.0.0.255 area 0
以上是基本配置,配置完成之后,
R1#show frame-relay map
由此表明静态映射配置成功
查看路由表生成状态:
R1#show ip route ospf
R1#
发现路由表没有生成。
R1#show ip os neighbor
表明邻居没有生成。
下面针对不同的运行模式找出出现上述问题的原因。
模式一:non-broadcast(缺省模式)
上述实验中,采用的是帧中继网络,默认的OSPF网络类型为NBMA
在NBMA中,不能发送广播或者组播报文,所以路由器的接口之间无法发送LSA,也就无法建立邻居。解决方案是手动指定邻居。
在上述基本配置的基础上,在R1上需要添加的命令为:
R1(config)#router ospf1
R1(config-router)#neighbor 192.168.123.2
R1(config-router)#nei 192.168.123.3
R1(config-router)#int s0/1
R1(config-if)#ip os priority 10
在R2上添加的命令:
R2(config)#int s0/2
R2(config-if)#ip os priority 0
在R3上添加的命令:
R3(config)#int s0/3
R3(config-if)# ip os pri 0
对上述命令的解释:
手动指定邻居(只需要指定一端就可以)之后,邻居可以建立起来。
R1(config-if)#do show ip os nei
邻居关系建立成功,但是请注意:
这里存在修改R1和R2和R3的优先级。
由于位于spoken位置的R2和R3只和位于hub端的R1通信。由于hello包的TTL为1,那么路由器R1不会转发hello包,这样导致R2和R3无法交流hello包。由于R2和R3的路由器id均比R1大,那么他们就会认为自己是DR,而R1只会认为R3是DR,因为R3的路由器id最大。这样就会导致OSPF运行混乱。为了解决这个问题,将R1的优先级改为最大,R2和R3的优先级均修改为0.不参与DR和BDR的选举。请注意:R2和R3不可以参与BDR的选举,原理同上。
查看路由表:
R2#show ip route ospf
R2与R3之间的下一跳均是自己的非直连邻居。也就是他们之间互访的时候,忽略了R1的中转。
模式二:Broadcast
首先将在NBMA模式中指定邻居的命令删除:
R1(config)#router ospf 1
R1(config-router)#no neighbor 192.168.123.2
R1(config-router)#no neighbor 192.168.123.3
修改网络类型:
在R1,R2,R3上均做如下配置:
R1(config-if)#ipospf network br
查看路由表:
R2(config-if)#do show ip rou os
查看R1的邻居表
R1#show ip os nei
由实验可以看出,无需手动指定邻居,在这个过程中有DR的选举。
重点注意:由于在R1,R2,R3的基本配置命令中,存在关键字broadcast,例如:
R2(config-if)#frame-relay map ip192.168.123.1 201 broadcast
这里broadcast选项表明可以在这条VC上传播broadcast,multicast帧,所以OSPF的组播报文就可以正常传输,保证了路由协议的正常运行。
模式三:Point-to-multipoint
在上述配置的基础上,对R1,R2,R3上均如下配置:
R1/R2/R3(config-if)#ip ospf network point-to-multipoint
查看邻居关系
R1(config-if)#do show ip os nei
由此可以看出,在此种网络类型中,无需指定邻居。也不进行DR和BDR的选举。
模式四:point-to-multipoint NBMA
在上述配置的基础上作如下修改:
R1(config-router)#int s0/1
R1(config-if)#ip ospf network point-to-multipoint non-broadcast///修改模式
R1(config-router)#neighbor 192.168.123.2////指定邻居
R1(config-router)#neighbor 192.168.123.3
分别在R2和R3上做如下修改:
R2(config-if)#int s0/2
R2(config-if)#ip ospf network point-to-multipoint non-broadcast
R3(config-if)#int s0/3
R3(config-if)#ip ospf network point-to-multipoint non-broadcast
查看邻居建立关系:
查看路由表:
路由表成功生成。
模式五:point to point
首先是对位于hub端的R1进行配置
R1(config)#int s0/1
R1(config-if)#no ip add 192.168.123.1 255.255.255.0
R1(config-if)# no frame-relay map ip 192.168.123.2 102 bro////
R1(config-if)#no frame-relay map ip 192.168.123.3 103 bro
R1(config-if)#no frame-relay map ip 192.168.123.1 102 bro
////上述三条命令是将原来主接口下面的静态映射删除
////下面命令是设定子接口,并对子接口进行静态映射
R1(config)#int s0/1.2 po
R1(config)#int s0/1.2 point-to-point
R1(config-subif)#frame-relay interface-dlci 102
R1(config-subif)#ip address 192.168.12.1 255.255.255.0
R1(config-subif)#frame-relay interface-dlci 102
R1(config-fr-dlci)#exit
R1(config-subif)#exit
R1(config)#int s0/1.3 point-to-point
R1(config-subif)#ip add 192.168.13.1 255.255.255.0
R1(config-subif)#frame-relay interface-dlci 103
///下面命令是把子接口的网段宣告进OSPF进程
R1(config)#router ospf 1
R1(config-router)#network 192.168.12.0 0.0.0.255 area 0
R1(config-router)#network 192.168.13.0 0.0.0.255 area 0
下面对位于spoken端的R2和R3进行配置
R2(config)#int s0/2
///首先把主接口下原来的静态映射删除
R2(config-if)#no frame-relay map ip 192.168.123.1 201 br
R2(config-if)#no frame-relay map ip 192.168.123.3 201 br
R2(config-if)#no ip add
////修改主接口的网络类型
R2(config-if)#ip ospf network point-to-point
////保证主接口的ip地址与R1上对应的子接口的ip地址在同一个网段
R2(config-if)#ip add 192.168.12.2 255.255.255.0
R2(config-if)#EXIT
R2(config)#router ospf 1
R2(config-router)#network 192.168.12.0 0.0.0.255 area 0
R2(config-router)# no network 192.168.123.2 0.0.0.255 area 0
R3的配置为:
R3(config)#int s0/3
///首先把主接口下原来的静态映射删除
R3(config-if)#no frame-relay map ip 192.168.123.1 301 br
R3(config-if)#no frame-relay map ip 192.168.123.2 301 br
R3(config-if)#no ip add
////修改主接口的网络类型
R3(config-if)#ip ospf network point-to-point
////保证主接口的ip地址与R1上对应的子接口的ip地址在同一个网段
R3(config-if)#ip add 192.168.13.3 255.255.255.0
R3(config-if)#EXIT
R3(config)#router os
R3(config)#router ospf 1
R3(config-router)#network 192.168.13.0 0.0.0.255 area 0
R3(config-router)#no network 192.168.123.0 0.0.0.255 area 0
做完上述配置之后,查看邻居建立:
R1#show ip os neighbor
由此看出,此时邻居并没有建立成功
重点注意:
之所以邻居关系没有建立成功,是由于把R1上的主接口ip地址去掉了,取而代之的是使用R1的子接口,所以在做静态映射到时候,需要对应的子接口的映射。
所以,我们需要做的就是在R2和R3的接口下作与子接口的静态映射
在R2上添加如下命令:
R2(config-if)#ints0/2
R2(config-if)#frame-relay map ip 192.168.12.1 201 broadcast
在R3上添加如下命令:
R3(config)#int s0/3
R3(config-if)#frame-relay map ip 192.168.13.1 301 broadcast
查看邻居关系:
R1#show ip os nei
邻居建立成功,但是不选举DR和BDR。
六:总结
通过对实验的配置分析,得出如下结论: