背景
OSPF区域是由不同类型的网络链路组成的,邻接行为随网络类型而异,而要确保OSPF在某些类型的网络上能正确运行,必须对其进行正确的配置。根据拓扑和需求的变化,OSPF可以手工修接口的网路类型来适应不同的二层链路拓扑。
OSPF定义了如下3种RFC公有网络类型:
- 点到点(Point-to-Point):网络中只有一对路由器相互连接。如,WAN中的HDLC,PPP和帧中继的点到点子接口。
- 广播(Broadcast):多路访问广播网络,如以太网(Ethenet),令牌环网(TokenRing), 光纤分布式数据接口(FDDI)。
- 非广播多路访问(NBMA):连接的路由器超过两台,但是没有广播能力。如帧中继、ATM和X.25等网络都属于NBMA。在NBMA网络中,OSPF可以有5种运行模式。
注意:其实NBMA网络不是没有广播的能力,而是广播针对每一条VC发送,这样就使得一台路由器在不是Full-Mesh的NBMA拓扑中,发送的广播或组播分组可能无法到达其他所有路由器。
RFC在以3种链路类型的基础上扩展出5种网络类型:
- 点到点(Point-to-Point)
- 点到多点(Point-to-Multipoint)
- 虚链路(Virtual Link)
- 广播(Broadcast)
- 非广播多路访问(NBMA)
注意:其中虚链路较为特殊,不针对具体链路。而NBMA链路对应NBMA和点到多点两种网络类型。思科路由器在NBMA网络上实现的链路类型有5个,2 × RFC(非广播和点到多点) + 3 × Cisco(点到点,广播,点到多点非广播),区分较为复杂。
默认情况下OSPF 不能通过NBMA接口自动与邻居建立邻接关系,RFC 2328为OSPF在NBMA拓扑中的运行定义了两种模式:非广播和点到多点,分别对应的接口模式为:
- ip ospf network non-broadcast
在Non-Broadcast 模式下是模仿OSPF在广播型链路中的运行,通常在Full-Mesh 者Partial-Mesh
使用,如果不是Full-Mesh必须手动选举DR/BDR。路由器接口处于同一IP子网,手动指定邻居,选举DR/BDR且必须与DRother在VC
上直连。
- ip ospf network point-to-multipoint
在 Point-to-Multipoint 模式下是将NBMA视为一系列点到点的集合,通常用于Hub-and-Spoke 者Partial-Mesh,接口处于同一IP子网,使用OSPF组播自动发现邻居,不选举DR/BDR。
Cisco为NBMA多设计了三种模式:为广播,点到多点非广播和点到点,分别对应的接口模式为:
- ip ospf network broadcast
如果说non-broadcast是在模仿广播型链路,那么broadcast就是将NBMA完全当成广播型链路,让WAN接口就像Lan接口。使用OSPF组播Hello来自动发现邻居,而不是像non-broadcast为每个PVC提供一个LSA拷贝。应用这种模式的前提是NMBA拓扑为Full-Mesh,且在FR
Map中使用了关键字broadcast。
- ip ospf network point-to-multipoint non-broadcast
如果在VC上没有启用组播和广播功能,即定义Map时没有使用关键字broadcast,那么就要应用point-to-multipoint non-broadcast相应的取消组播hello功能,代以手动配置邻居,无需选举DR和BDR。
- ip ospf network point-to-pioint
如果链路中涉及多个子网,那么一定要用到Point-to-Point类型,也一定会用到子接口,每个子接口属于不同的子网,接口可以是WAN接口也可以是LAN接口。子接口分为两种模式,点到点和点到多点,其中点到多点子接口和主接口配置方式一致,而点到点子接口则有些不同:
interface Serial0/0 interface Serial0/0.2 multipoint
encapsulation frame-relay ip address 20.1.1.1 255.255.255.0
frame-relay lmi-type ansi ip ospf network point-to-point
interface Serial0/0.1 point-to-point frame-relay map ip 20.1.1.2 105 broadcast
ip address 10.1.1.1 255.255.255.0 frame-relay map ip 20.1.1.3 106 broadcast
frame-relay interface-dlci 101 frame-relay map ip 20.1.1.4 107 broadcast
注意:
- 若子接口使用point-to-point模式,则意味着这个子接口对应的子网里只有一台路由器,即这个IP子网只有两个节点;而使用
multipoint模式时,意味着这个子接口对应多条VC,IP子网内有多于两台的路由器。通过配置就可以理解为什么说点到多点是点到点链路的集合。 - 最初创建子接口的目的在于解决在NBMA上运行距离矢量协议引起的水平分割问题,即从一接口收到的路由信息不会再从这个接口发出去。而这个接口本身
可能连着多个邻居,这样就阻碍了网络中路由信息的传递,子接口是物理接口在逻辑上的划分,能很好的解决水平分割带来的问题。 - 虚链路 可以认为是点到点的一种特殊配置,在虚链路上OSPF数据包是以单播形式发送,并不在意物理链路是什么类型,关键是虚链路两端可以实现互通。
以上5种网络类型形式上的差异在于:
- 是否选举DR
- 是否自动发现邻居
- 更新时间
这5种网络类型应用上的差异在于:
- NBMA拓扑是否是Full-Mesh
- NBMA接口是否在同一IP子网
- Frame-Relay 在定义Map时是否支持广播,即是否加了关键字broadcast。
所以总的来说,OSPF有8种网络类型:点到点,虚链路,点到多点,NBMA有5种(cisco:点到点,广播,点到多点非广播;RFC:非广播,点到多点),在接口下使用如下命令可以知道OSPF支持哪些网络类型:R1(config-if)#ip ospf network ?
broadcast Specify OSPF broadcast multi-access network
non-broadcast Specify OSPF NBMA network
point-to-multipoint Specify OSPF point-to-multipoint network
point-to-point Specify OSPF point-to-point network
从上面输出的内容上看,你是否会问,手动接口下的OSPF网络类型只有4种哪来的5种?其实point-to-multipoint nonbroadcast是隶属于上面的point-to-multipoint网络类型下的,请看下面命令:
R1(config-if)#ip ospf network point-to-multipoint ?
non-broadcast Specify non-broadcast point-to-mpoint network
<cr>
由此可以知道,OSPF接口下的网络类型。总结如下:
网络 类型 |
二层 封装 |
Hell/ Dead |
DR/ BDR |
手动指 定邻居 |
支持32位主机路由 |
支持2个 以上路由 |
动态邻 居发现 |
点对点 |
HDLC,PPP,FR-SUB-P2P,GRE |
10/40 |
No |
No |
No |
No |
Yes |
广播 |
ETH, TokenRing, FDDI |
10/40 |
Yes |
No |
No |
Yes |
Yes |
NBMA |
FR-Primar/SUB-MP,ATM,X.25 |
30/120 |
Yes |
Yes |
No |
Yes |
No |
点到多点 |
无默认 |
30/120 |
No |
No |
No |
Yes |
Yes |
点到多点非广播 |
无默认 |
30/120 |
No |
Yes |
No |
Yes |
No |
Loopback |
Loopback接口 |
NA |
NA |
NA |
Yes |
NA |
NA |
OSPF在NBMA的一些局限和优化方案
上面已经提到过,点到多点,点到多点非广播,是思科私有的两种OSPF网络类型,用于改善NBMA部分互联(Hub-Spoke模式)拓扑下,原有NBMA网络类型的以下缺点:
- 在Hub要手工指定每一个Spoke端的neighbor,也许你会问,是否可以在Spoke端指定Hub为neighbor?答案是可以,但是配置比较分散不能集中配置需要在每个Spoke都指定neighbor。另外,Spoke端设置Priority 0以后,指neighbor打了命令后能生效但是show running看不见,其实命令是存在的,no掉priority后就可以看到。
- 需要在每个Spoke配置ip ospf priority 0,也许你会问,为什么不在Hub端把它的Priority设置成255?可以这么做,但是假如Hub down了很短时间,这时候Spoke就会成为DR,等Hub再恢复时,不抢占。
- 每个Spoke端都需要其他Spoke端的二层映射表项。
Cisco的点到多点网络类型可以优化以上3个问题:
- 在有条件使用“伪广播”一类的方法在NBMA网络上支持广播时,发送组播Hello可以自动发现邻居,无需手工指定neighbor地址。
- 点到多点,等于多个点到点,所以不需要选DR,自然也就不需要设Spoke端的Priority为0来让Spoke不参与DR的选举。
- Spoke学习到其他Spoke的路由,下一跳指向的是Hub(相当于Hub代转),所以Spoke只要拥有Hub的二层映射项即可。如果Spoke还想访问其他Spoke的接口用于测试(直连路由,没有下一跳),仍然会用到其他Spoke接口的二层映射,点到多点网络类型的解决办法是:生成一条接口的IP的32位主机路由,下一跳指向Hub。从而彻底不需要Spoke之间的二层映射表项。
而点到多点非广播类型的优化方案和上面大同小异:
- 用在无条件使用“伪广播”等方法在NBMA上支持广播时,不能自动发现邻居,只能退而求其次手动指定neighbor地址。
- 其他“点对多点”的优点仍然继承。
- show ip ospf interface InterfaceType看到的网络类型仍然是Point-to-Point,但是实际上是不同的(只能通过show running查看)。
Loopback网络类型
环回接口(逻辑接口)的定义决定了它不可能连接主机或者其他网络设备,如果环回接口配置成一个网段,实际上也只有接口配置的一个主机IP被用到。实际工作中通常将环回接口用于管理或者测试。
对于环回接口宣告OSPF时,默认的OSPF网络类型是Loopback,不管接口实际配置的掩码是多少位,都会被OSPF当做32位主机路由生成链路状态信息并计算出路由。如果希望不要被处理成32为主机路由,而是显示为真实掩码长度。可以手动修改环回接口的网络类型,但是只支持修改成point-to-point。
OSPF类型巧记技巧
1. 凡是“Point-to系列”(包括to-point,to-multipoint,to-multipoint nonbroadcast)均不需要选举DR/BDR,在Hub-and-Spoke这种星型拓扑中建议使用“Point-to系列”模式。
2. 凡是“Broadcast系列”(包括broadcast,non-broadcast),不管加不加non,多少都是广播型链路的翻版,需要选举DR/BDR。
3 .凡是“Nonbroadcast系列”(包括non-broadcast,point-to-multipoint nonbroadcast),一个non就是废除广播 & 组播能力,只能手动指定邻居。
4 .在Full-Mesh的拓扑中才可以应用non-broadcast 或broadcast模式,配置较为简单,但是如果发生链路中断,DRother可能会找不到DR,导致路由信息丢失。
5. Hub-Spoke拓扑中如果运行non-broadcast模式,要在hub 位置配置neighbor命令,并且都设置Spoke接口的优先级为0使其不参与DR/BDR选举。如果配置为点到多点模式,命令可大为简化。
6. 如果一个NBMA链路里有多个IP子网,则主接口网络类型一定是point-to-point,并且一定得用子接口,再看IP子网内接口,多于两个就用点到多点子接口,因为点到点子接口只能容纳一个DLCI。
7. 如果在配置FR Map时没加关键字broadcast,则只能使用“non-broadcast系列”,即non-broadcast和point-to-multipoint broadcast两种网络类型。