OSPF(Open Shortest Path First,开放式最短路径优先)

1 基本概念

OSPF是内部网关协议IGP的一种,属于链路状态路由协议。

LSA:链路状态通告,运行OSPF的路由器会交互LSA,而不是路由,通过LSA可以进行拓扑和路由的计算。

LSDB:链路状态数据库,运行OSPF的路由器会将LSA存储在LSDB中。同一个OSPF区域的路由器拥有相同的LSDB。

SPF:最短路径优先,LSDB同步后,区域内的每台路由器都会依据LSDB通过SPF算法计算出以自己为根的一棵最优的无环的“树”。

Router ID:路由器标识符,用于标识一台路由器,同一个区域的中的路由器Router ID不能产生冲突(冲突会影响邻居关系的建立)。华为设备有全局Router ID的概念,全局Router ID默认为路由器第一个配置的IP地址。如果开启OSPF时没有配置Router ID,全局Router ID会自动生效。之后可以更改,不过需要重启OSPF进程才能生效。实际项目中,一般使用Loopback接口的IP地址作为Router ID。

度量值:OSPF使用Cost(开销)作为度量值,每个运行OSPF的路由器其接口都会有一个Cost,默认为Cost=100Mbit/接口带宽(若计算结果小于1则为1,为大于1的小数则取其整数位,不会进行四舍五入)。其中100Mbit为参考带宽,可以修改,一般修改参考带宽值整个区域统一更改,也可以在接口下单独改Cost的值。一条OSPF路由的开销为源地址到目的地址沿途所有运行OSPF路由器接口出方向的总和。

2 OSPF域与区域

使用相同策略的连续的运行OSPF的网络设备所构成的网络成为OSPF域。

OSPF区域:

OSPF区域有两个级别,骨干区域和非骨干区域。由区域ID标识,骨干区域为区域0,有且只有一个。非骨干区域可以有多个,非骨干区域必须与骨干区域直接相连(若现网中无法直接相连可用虚链路解决)。区域划分即把不同接口划分到不同的区域,同一个区域拥有相同的一棵“树”。

OSPF路由器类型:

1.IR(区域内路由器):所有接口都在一个区域的路由器。

2.ABR(区域边界路由器):接口在不同的区域,且至少有一个接口在区域0。配置了V-link的路由器会直接变成ABR。

3.BR(骨干路由器):区域0中的路由器,包括ABR和区域0中的IR。

4.ASBR(自治系统边界路由器):连接不同路由域的路由器。只要在OSPF协议视图下执行了import-route命令,意思是路由引入,路由器就会成为ASBR。

IGP协议中,同一台路由器的同一路由协议的不同进程是不同的自治系统,不同的路由协议是不同的自治系统。

3 OSPF报文类型

OSPF包头:

3.1 Hello

OSPF建立邻居关系的报文,运行OSPF的路由器会周期性发送Hello包,用于发现和维护邻居。在P2P、Broadcast链路上每10秒发一次,在NBMA、P2MP链路上每隔30秒发一次。失效时间都是周期时间的四倍。可以在接口视图下使用ospf  timer hello [时间参数]命令修改hello报文的时间。修改Hello时间,dead时间会自动修改成Hello时间的四倍。单独修改Dead时间不会影响Hello时间。

OSPF Hello包发送的特点:

在P2P、P2MP、Broadcast链路上自动发送组播Hello报文,目的地址为224.0.0.5

在NBMA链路上单播发送Hello报文,手动指定邻居。

Hello包的格式:

Hello报文中可以影响邻居关系建立的因素如下:

  1. Router ID 不能冲突
  2. Area ID要一致
  3. Auth Type要一致
  4. Auth Data要一致
  5. Hello Interval要一致
  6. Dead Interval要一致
  7. Opthion中E bit与N bit要一致

以上因素是任何情况下都需要满足的条件,否则邻居关系不能建立。

可以使用Display OSPF error int g0/0/0命令查看邻居在接口上建立失败的原因。用户视图下使用reset ospf counters命令可以清除错误记录。

3.2 Database Description

简称DD或DBD,描述本地LSDB的摘要信息,用于两台设备进行数据库同步。LSDB同步后邻接路由器LSDB中的LSA与本地一样,且新旧程度也一样。

DD报文会进行主从选举,谁先到Two-Way谁先发起主从选举,主从选举时不携带LSA摘要信息,Router ID大的为主。协商完主从后进行报文交互,从路由器使用会使用主的序列号发送报文,主路由器收到后加一对从进行确认并发送给从,从收到后使用加一后的主路由器序列号,以此类推。

Database Description包的格式:

*主从选举时DD报文中IP MTU值对邻居状态机的影响:

主从选举时DD报文会协商接口IP MTU的参数,要求DD报文的携带的MTU值一致,才能完成主从选举。

默认情况下,华为设备DD报文携带的IP MTU值为0,且默认不对DD报文的IP MTU值做一致性检测

接口视图下启用ospf mtu-enable命令后:

该接口发送dd报文携带接口IP MTU值

该接口对接收的DD报文做IP MTU值的检测,只有IP MTU值小于本接口的IP MTU才处理这个DD报文

3.3 Link State Request

用于向其他路由器请求自己需要的LSA,理论上设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。但现网抓包结果可能有差别。

LSR报文格式:

包括LSA的类型、链路状态ID、LSA的标识符。

3.4 Link State Update

用于向对方发送其所需要的LSA。

LSU报文格式:

3.5 Link State ACK

用来对收到的LSA进行确认。会将LSU中收到的LSA在发给对方,做显式确认。

LS ACK报文格式:

Broadcost型链路上OSPF LSU LSACK报文交互形式:

DR与BDR同时监听224.0.0.5和224.0.0.6这两个组播地址,DRother只监听224.0.0.5这个组播地址,但是DRother通过224.0.0.6向DR/BDR发送LUS和LS ACK。

  1. DRother产生的LSU通过组播地址224.0.0.6发给DR和BDR。
  2. BDR产生的LSU通过组播地址224.0.0.5发送给DRother和DR,DR通过224.0.0.5发送LS ACK确认,DRother通过224.0.0.6发送LS ACK确认。
  3. DR产生和从DRother获取到的LSU通过组播地址224.0.0.5发给BDR和其他DRother,BDR通过224.0.0.5发送LS ACK确认,DRother通过224.0.0.6发送LS ACK确认。

4 OSPF工作原理

以此图所示,在两台路由器上配置OSPF。

两台路由器OSPF初始状态都为Down,运行OSPF后,双方开始发Hello包,以R1为例,R1向R2发送Hello包,包中的活动邻居为NULL,R2收到后通过报文里的内容就可以认定这条链路上连着R1,此时R2的状态会变为Init,表示R2单向发现R1,之后R2就会以R1的Router ID作为活动邻居字段的值向R1回包,R1收到后发现活动邻居是自己的Router ID,此时R1的状态就会变成Two-way,之后以相同的方式向R2再回一个包,活动邻居是R2的Router ID,R2收到后,发现活动邻居是自己的Router ID,状态变为Two-way,至此,双方都达到Two-way状态,邻居关系建立成功。

之后开始交互DD报文,在正式交互DD报文之前会进行主从的选举(Router ID大的为主),选举时会协商接口IP MUT参数,要求参数一致才能完成主从选举(默认情况下,华为设备接口MUT参数为0,且不做一致性检测)。由进入EX-start的路由器率先发包(谁先到Two-way谁就是EX-start),报文中的I、M、MS比特有很大作用,具体可以看DD报文格式图。R1先到达Two-way状态,于是R1发送第一个DD报文并默认自己是Master,I=1、M=1,MS=1,R2收到后发现自己的Router ID大于R1于是回一个包,表示自己才是Master路由器,R2此时状态变为EX-change。R1收到后发现邻居Router ID比自己大,于是R1变成Slave路由器。状态变成EX-change,主从选举完成。在主从选举中,双方不携带任何LSA摘要信息。

确定完主从后,双方正常交互LSA,主路由器R2率先发包,并随机生成一个序列号,R1收到后使用主路由器产生的这个序列号进行回报,R2收到后,如果仍需交互DD报文,R2会采用序列号加一的隐式确认机制继续发包,R1继续使用R2更新后的序列号回包,直到DD报文交互完成。双方状态变为Loading。

DD报文交互完成后,双方都向对方发送LSR报文,获取自己所需要的LSA,对方收到自己的LSR后会回复LSU,自己收到对方发来的LSU后会向对方发送LS ACK进行确认,表示我以收到该LSA,直到LSDB完成同步,双方邻居状态达到Full,邻接关系建立成功。

5 OSPF网络类型

OSPF有四种网络类型,分别是Broadcast、NBMA、P2P、P2MP。目前使用最多的是P2P和Broadcast

OSPF判断网络类型默认是根据链路层协议来进行适配,是链路的网络类型而不是整个网络的网络类型。

但也可以在接口视图下使用此命令ospf network-type [对应网络类型]修改网络类型,修改后就按该网络类型工作,和链路层就没关系了。

OSPF报文发送形式:

  1. Broadcost:广播型网络,当链路层协议是以太网链路和FDDI(帧中继)链路时默认是广播型。该类型以组播发送Hello、LSU、LS ack报文,以单播发送DD、LSR报文。其中组播地址224.0.0.5是为OSPF路由器预留的组播地址,224.0.0.6的组播地址是给DR预留的。
  2. NBMA:非广播型多路访问,当链路层协议是ATM、X.25、FR协议时默认是NBMA,以单播形式发送OSPF协议报文,且单播需要明确目的IP,故需手动配置邻居。
  3. P2P:点到点,当链路层协议是PPP,HDLC协议时默认是P2P,以组播224.0.0.5这个地址发送所有协议报文,点到点上没有DR、BDR的概念,所以一般都将广播型网络优化为P2P。
  4. P2MP:点到多点,没有一种链路层协议会被默认为P2MP类型,必需由其他类型手动修改为P2MP。常见做法是将非全连通的NBMA网络该为P2MP。该类型以组播224.0.0.5发送Hello报文,以单播发送DD、LSR、LSU、LS ack报文。

不同网络类型对邻居关系的建立有不同的条件:

  1. Broadcost和NBMA要求连接两台路由器的接口在同一个网段且掩码相同才能建立邻居。因为需要保证路由下一跳是直连且可达的。
  2. P2MP要求连接两台路由器接口的IP地址在同一个网段,默认要求掩码相同,但可以在接口视图下使用ospf p2mp-mask-ignore命令忽略掩码检测,链路上两台路由器都需要使用此命令才有作用。
  3. 纯P2P链路连接两台路由器接口的IP地址无需在同一个网段,掩码也无需相同就能建立邻居,路由也能计算,也能通。但如果是以太网修改成P2P网络类型的链路,邻居和路由都能正常计算,但无法实现单播通信,原因是ARP解析出现问题,下一跳路由器不回复ARP请求报文。

*不同网络类型之间的邻居建立和路由获取情况:

6 DR与BDR

在MA(多路访问网络)上,包括Broadcost和NMBA型网络,其OSPF区域下的所有路由器之间都要交互LSA,这就区域内存在大量LSA泛洪,浪费设备资源,且每两台路由器之间都要建立邻接关系,也增加了设备负担。于是在Broadcost和NBMA网络类型中,提出了DR与BDR。

在MA中,DR为指定路由器,BDR为备用指定路由器,其他的都是DRother。Full邻接关系只会存在与DR与BDR、DR与DRother、BDR与DRother之间。其他的DRother之间都停留在Two-way的邻居关系状态。

每条广播型和NBMA链路上都会选举一个DR,也会选举一个BDR。DR必选,有且只有一个,BDR非必选,如果有,有且只有一个。P2P和P2MP网络上无需选举。

DR、BDR都是链路上的角色,不是指的路由器本身。

DRBDR的选举

    1. 比较接口的DR优先级,取值范围0-255, 默认为1,大的成为DR,次级成为BDR,其余为Drother,如果DR优先级相同则比较Router ID,越大越优。
    2. DR没有抢夺性,即DR一旦被选举之后即使有更大优先级的路由器接口,也不会替换,除非DR失效;
    3. DR失效,BDR成为新的DR,然后重新选一个BDR;
    4. BDR失效,重新选举BDR;
    5. DR、BDR都失效,重新选举DR、BDR;
    6. DR优先级如果被配置为0,意味着不参与DR、BDR的选举,立刻成为DRother。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值