背景

OSPF区域是由不同类型的网络链路组成的,邻接行为随网络类型而异,而要确保OSPF在某些类型的网络上能正确运行,必须对其进行正确的配置。根据拓扑和需求的变化,OSPF可以手工修接口的网路类型来适应不同的二层链路拓扑。

OSPF定义了如下3种RFC公有网络类型:

  1. 点到点(Point-to-Point):网络中只有一对路由器相互连接。如,WAN中的HDLC,PPP和帧中继的点到点子接口。

  2. 广播(Broadcast):多路访问广播网络,如以太网(Ethenet),令牌环网(TokenRing), 光纤分布式数据接口(FDDI)。

  3. 非广播多路访问(NBMA):连接的路由器超过两台,但是没有广播能力。如帧中继、ATM和X.25等网络都属于NBMA。在NBMA网络中,OSPF可以有5种运行模式。

注意:其实NBMA网络不是没有广播的能力,而是广播针对每一条VC发送,这样就使得一台路由器在不是Full-Mesh的NBMA拓扑中,发送的广播或组播分组可能无法到达其他所有路由器。


RFC在以3种链路类型的基础上扩展出5种网络类型:

  1. 点到点(Point-to-Point)

  2. 点到多点(Point-to-Multipoint)

  3. 虚链路(Virtual Link)

  4. 广播(Broadcast)

  5. 非广播多路访问(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
 

由此可以知道,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的一些局限和优化方案

点到多点和点到多点非广播可以改善NBMA部分互联(Hub-Spoke模式)拓扑下,原有NBMA网络类型的以下缺点:

  1. 在Hub要手工指定每一个Spoke端的neighbor,也许你会问,是否可以在Spoke端指定Hub为neighbor?答案是可以,但是配置比较分散不能集中配置需要在每个Spoke都指定neighbor。另外,Spoke端设置Priority 0以后,指neighbor打了命令后能生效但是show running看不见,其实命令是存在的,no掉priority后就可以看到。

  2. 需要在每个Spoke配置ip ospf priority 0,也许你会问,为什么不在Hub端把它的Priority设置成255?可以这么做,但是假如Hub down了很短时间,这时候Spoke就会成为DR,等Hub再恢复时,不抢占。

  3. 每个Spoke端都需要其他Spoke端的二层映射表项。

RFC的点到多点网络类型可以优化以上3个问题:

  1. 在有条件使用“伪广播”一类的方法在NBMA网络上支持广播时,发送组播Hello可以自动发现邻居,无需手工指定neighbor地址。

  2. 点到多点,等于多个点到点,所以不需要选DR,自然也就不需要设Spoke端的Priority为0来让Spoke不参与DR的选举。

  3. Spoke学习到其他Spoke的路由,下一跳指向的是Hub(相当于Hub代转),所以Spoke只要拥有Hub的二层映射项即可。如果Spoke还想访问其他Spoke的接口用于测试(直连路由,没有下一跳),仍然会用到其他Spoke接口的二层映射,点到多点网络类型的解决办法是:生成一条接口的IP的32位主机路由,下一跳指向Hub。从而彻底不需要Spoke之间的二层映射表项。

而Cisco的点到多点非广播类型的优化方案和上面大同小异:

  1. 用在无条件使用“伪广播”等方法在NBMA上支持广播时,不能自动发现邻居,只能退而求其次手动指定neighbor地址。

  2. 其他“点对多点”的优点仍然继承。

  3. 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两种网络类型。