1.概述
OSPF: Open Shortest Path First,开放最短路径优先
- 大中型网络上使用最为广泛的IGP协议
- 链路状态路由协议
- 无类
- 使用组播 (224.0.0.5和224.0.0.6)
- 收敛较快
- 以开销 (Cost) 作为度量值
- 采用的SPF算法可以有效的避免环路触发式更新 (以较低的频率(每30分钟)发送定期更新,被称为链路状态泛洪)区域的设计使得OSPF能够支持更大规模的网络通过LSA的形式发布路由
- 采用OSPF的路由器彼此交换并保存整个网络的链路信息,从而掌握全网的拓扑结构,独立计算路由
- 不支持自动汇总,支持手动汇总
2.OSPF核心工作流程:
1)发现并建立邻居
2)传播 LSA (区别于距离矢量的路由表更新)
a. Link State Advertisement,链路状态宣告 (路况信息)
b.链路: 路由器接口
c. 状态: 描述接口信息 (地址、掩码、开销、网络类型、邻居关系等)
3)将LSA泛洪到区域中的所有OSPF路由器,而不仅是直连的路由器
4)收集LSA创建LSDB (链路状态数据库)
5)使用SPF算法计算到每个目标网络的最短距离,并将其置于路由表中
3.区域划分
- 为了适应大型的网络,OSPF在AS内划分多个区域
- 区域是以接口为单位来划分的,故若一台路由器的不同接口属于不同的区域,则这台路由器会有多个对应的LSDB
- 每个OSPF路由器只维护所在区域的完整链路状态信息
区域ID(Area ID)可以表示成一个十进制的数字,如:1,也可以表示成一个IP,如: 0.0.0.1。 Area ID最大为2^32.
单区域的问题:
- 收到的LSA通告太多了,OSPF路由器的负担很大
- 内部动荡会引起全网路由器的完全SPF计算
- 资源消耗过多,LSDB庞大,设备性能下降,影响数据转发
- 每台路由器都需要维护的路由表越来越大,单区域内路由无法汇总
划分区域的优点:
- 减少了LSA洪泛的范围,有效地把拓扑变化控制在区域内,达到网络优化的目的
- 在区域边界可以做路由汇总,减小了路由表,从而节省路由器的CPU、内存
- 充分利用OSPF特殊区域的特性,进一步减少LSA泛洪,从而优化路由
- 多区域提高了网络的扩展性,有利于组建大规模的网络
为避免域间路由环路,OSPF规定了骨干区域和非骨干区域,一般来说非骨干区域至少要有一台路由器的一个接口与骨干区域相连。如果只有一个区域,区域号可以是非零。
骨干区域:快速、高效地传输IP分组的OSPF区域。骨干区域将其他类型的OSPF连接起来,通常没有终端用户;也叫OSPF区域0,是网络核心,其他区域都与它直接相连。
非骨干区域:连接用户和资源的OSPF区域。默认情况下,常规区域不允许另一个区域使用其连接将数据流传输到其他区域。来自其他区域的所有数据流都必须经过骨干区域0.
建议每个区域包含的路由器数量不应超过50台;每个路由器所属的区域数最多不要超过3个。
4.OSPF的3张表
1)邻居表:记录所有与本路由器相连的邻居关系
2)链路状态数据路(LSDB):记录所有链路状态信息
3)路由表:记录最佳路由
5.OSPF 的Router ID
运行OSPF协议前,必须选取一个Router ID,Router ID用来唯一标识一台OSPF路由器,Router ID可以手动配置,也可以自动生成
Router ID选取顺序:1.手动配置(推荐);2活动回环接口上选取IP地址最高的;3.活动物理接口上选取IP地址最高的。(华为中: 若以上三点都不满足,则router-id 为0.0.0.0)
Router ID选举具有非抢占性,除非重启OSPF进程。
6.OSPF的数据包结构和类型
封装于IP协议之上,IP协议号89。
- 1. Version:版本字段,占1个字节,指出所采用的OSPF协议版本号,目前最高版本为OSPF v4,即值为4(对应二进制就是0100)。
- 2. Message Type:报文类型字段,标识对应的5种报文类型。
- 3. Packet Length:包长度字段,占2个字节。它是指整个报文(包括OSPF报头部分和后面各报文内容部分)的字节长度。
- 4. Router ID:路由器ID字段,占4个字节,指定发送报文的源路由器ID。
- 5. Area ID:区域ID字段,占4个字节,指定发送报文的路由器所对应的OSPF区域号。
- 6. Checksum:校验和字段,占2个字节,是对整个报文(包括OSPF报头和各报文具体内容,但不包括下面的Authentication字段)的校验和,用于对端路由器校验报文的完整性和正确性。
- 7. Auth Type:认证类型字段,占2个字节,指定所采用的认证类型,0为不认证,1为进行简单认证,2采用MD5方式认证。
- 8. Authentication:认证字段,占8个字节,具体值根据不同认证类型而定:认证类型为不认证时,此字段没有数据,认证类型为简单认证时,此字段为认证密码,认证类型为MD5认证时,此字段为MD5摘要消息。
7.OSPF的5种数据包类型
Hello 10s 40s 30s 120S :发现邻居并在它们之间建立、维持邻居关系;使用组播地址(224.0.0.5),DB和BDR使用224.0.0.6,发送Hello包的默认间隔是10秒。
DBD( Database Description,数据库描述):检查路由器的数据库之间是否同步;包含路由摘要信息(描述LSDB中LSA头部信息),使用单播的方式,通过序列号递增进行隐式确认。
LSR( Link-State Request,链路状态请求):向另一台路由器请求特定的链路状态记录;向邻居路由器请求特定路由的完整的链路状态信息,使用单播地址。
LSU( Link-State Update,链路状态更新):发送请求的链路状态记录;回应LSR该条路由的完整信息。在OSPF中,只有LSU需要显示确认。LSU包含一条或多条LSA。
LSAck(Link-State Acknowledgment,链路状态确认):对LSU中的LSA做显示确认。
8.OSPF形成邻接的7个状态
如果邻接路由器一边是Exstart,另一边是Exchange,那么可以断定是MTU不匹配。
当两个以太网内运行OSPF的路由器优先级都为0时,无法选出DR/BDR,邻居状态将永远处于2 way状态。
Attempt是只存在于NBMA网络(帧中继)的状态,介于Down和Init之间(发送了HELLO到收不到对方的回复则一直滞留在此状态)。在NBMA网络中邻居是手动指定的,按Hello Interval的间隔向邻居发送Hello包。
9.OSPF邻居、邻接建立。5种数据包、7个状态的关系
1)OSPF第一阶段是使用Hello包建立双向通信的过程,成为邻居关系。
2)OSPF第二阶段是通过交换LSA达到LSDB同步,建立邻接关系
泛洪新LSA:当有链路状态变化时,新的LSA就会被泛洪。
10.OSPF邻居建立条件
- RID唯一
- Hello/Dead时间间隔一致
- 区域ID一致
- 认证(如果启用了认证) 一致
- 链路MTU大小一致 (默认不开启检查,思科默认开启)子网掩码一致
- 网络地址一致(以太网环境)
- 未梢区域设置一致 (Option)
Hello报文解释
11.OSPF网络类型
缺省情况下,OSPF认为以太网的网络类型是广播类型,PPP、HDLC的网络类型是点到点类型。
缺省情况下,OSPF认为帧中继、 ATM的网络类型是NBMA。
OSPF的网络类型是基于接口的。两个以太网接口直连也属于广播,不是点到点。
网络类型相关配置命令:ospf network-type broadcast/nbma/p2mp/p2p
回环口/32主机路由现象:OSPF认为回环口只有一个地址,因为在传递时自动变成/32主机路由信息,可以通过在接口下执行修改网络类型为Broadcast来进行还原。
12.DR和BDR
只要是多路访问BMA和NBMA网络种,为了减少邻接关系的数量,从而减少数据包交换次数,最终节省带宽,降低对路由器处理能力的压力,选举DR和BDR。
若路由器全部建立邻接关系,那邻接关系的数量会是n*(n-1)/2,选举DR和BDR后,邻接关系的数量会是2(n-2)+1
DRothers感知到拓扑变更,向组播地址224.0.0.6发送LSU;
- DR、BDR监听224.0.0.6这一组播地址;
- DR向组播地址224.0.0.5发送更新以便通知其他路由器;
- 所有的OSPF路由器监听组播地址224.0.0.5就能收到SR泛洪的LSU。
DR与BDR选举规则:
- DR/BDR的选举是基于接口的
- DR和BDR是由同一网段中所有的路由器根据路由器优先级、Router ID通过Hello报文选举出来的,只有优先级大于0的路由器才具有选取资格,优先级为0不参与选举。
- 进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器。
- 当处于同一网段的多台路由器同时宣布自己是DR时,接口优先级最高者胜出;如果优先级相等(默认为1),Router-ID最高者胜出。DR优先级为0表实不参与选举。
- DR具有非抢占性,也就是说如果该MA网络中,已经选举完成、并且选举出了一个DR,那么后续即使有新的、更高优先级的设备加入,也不会影响DR的选举,除非DR挂掉。
- BDR使用等待定时器来判断DR是否出现了故障。
ospf dr-priority 100 配置接口优先级,华为默认为1.
13.OSPF度量值:Cost,开销
- 在每一个运行OSPF的接口上都维护着一个接口Cost
- Cost = 108/BW (bps) = 100Mbps/BW = 接口带宽参考值/接口带宽
- 到一个目标网络的度量值 =从源到目标所有出站接口的Cost值累加 (数据方向) / 从源到本路由器沿途所有入站接口的Cost值累加 (路由方向)
- 华为默认环回口的开销为0
- 可通过命令在接口下修改cost,也可以修改带宽参考值(所有路由器都需要修改,确保选路一致)
14.OSPF配置
display lsdb self-originate 查看路由器自己产生的LSA
OSPF LSDB的过载保护,以防止路由器没有正确配置时,导致的大量前缀被重分发和生成大量的LSA,耗尽本地的CPU和内存资源。
对于不支持组播的网络,可通过手动配置实现邻居的发现和维护。 即通过单播方式建立邻居关系。 命令:peer x.x.x.x
15.OSPF发布缺省路由:default-route-advertise
16.OSPF认证:如果同时配置,接口认证优先生效
接口认证:ospf authentication-mode md5 1 cipher wakin
区域认证:authentication-mode md5 1 cipher wakin
17.虚连接: Virtual Link
为了避免区域间的环路,OSPF规定不允许直接在两个非骨干区域之间发布路由信息,只允许在一个区域内部或者在骨干区域和非骨干区域之间发布路由信息。
因此,每个ABR都必须连接到骨千区域。即要求所有非骨干区域必须和骨干区域相连,同时骨干区域也必须连续。
但由于网络设计、升级、合并、改造等因素,从而造成不规范区域架构,最终导致路由学习不完整,解决方法就是使用虚链路。
然而,虚连接的存在增加了网络的复杂程度,使故障的排除更加困难。因此,在网络规划中应该尽量避免使用虚连接。
虚连接仅是作为修复无法避免的网络拓扑问题的一种临时手段。
虚链路可以看作是一个标明网络的某个部分是否需要重新规划设计的标志
配置命令:vlink-peer x.x.x.x 配置虚连接,使用对端的Router ID dispaly ospf vlink 查看虚连接。
虚连接的另外一个应用是提供冗余的备份链路,当骨于区域因链路故障将被分割时,通过虚连接仍然可以保证骨干区域在逻辑上的连通性。
18.LSA
类型
LSA更新规则:
LSDB 中的每个 LSA 都有一个序列号
- 4 个字节的数字
- 以0x80000001开始;以0X7FFFFFFF 结束
OSPF每30 分钟泛洪次 LSA
- 每一次,序列号增加1。即Age增长到1800s时,Sequence加1
- 具有更高( 更新)序列号的 LSA 是最近的 LSA
最后,序列号会返回到 0x80000001
- 现有 LSA 的生存时间提前到达最大生时间(一个小时 ),并且已刷新
- LS Age单位是秒,随时间而增长,越小代表该LSA越新。
- 一条LSA在向外泛洪之前,LS Age的值需要增加InfTransDelay (该值可以在端口上设置,缺省为1秒,表示在链路上传输的延迟)。
- 如果一条LSA的LS Age达到了LSRefreshTime (30分钟),重新生成该LSA。
- 如果一条LSA的LS Age达到了MaxAge (1小时),这条LSA就要被删除。
- 如果路由器希望从网络中删除一条自己此前生成的LSA,则重新生成该条LSA的一个实例,将LS Age设置为Max Age即可。
- 如果路由器收到一条LS Age设置为Max Age的LSA,则从LSDB中删除此LSA (如果LSDB中存在此LSA)。
19.引入外部路由
把不属于OSPF进程的路由进行注入,从而通过OSPF进行宣告。
E1优于E2
20.Forwarding-Address
如果引入到OSPF中的外部路由的下一跳在一个OSPF路由域内,则在描述该外部路由的AS-External-LSA中,Forwarding Address应当被设置为ASBR路由表中该路由的下一跳。
21.汇总
将路由表中的多条明细路由汇总为一条路由,从而减少路由表的规模,提高性能或扩展性。OSPF的汇总只能在ABR或ASBR配置。
22.特殊区域
优化区域内的LSA泛洪,减少LSA数量,从而减少路由器上LSDB的规模和对内存的需求。