OSPF基本信息
OSPF(Open Shortest Path First)开放式最短路径优先协议是用于网际协议(IP)网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议(IGP),在单一自治系统(AS)内部工作。适用于IPv4的OSPFv2协议定义于RFC 2328,RFC 5340定义了适用于IPv6的OSPFv3。
性 质:链路状态型路由协议
分 类:无类别链路状态型路由协议(VLSM与CIDR,传递网络掩码)
方 法:多播(更新地址224.0.0.2和224.0.0.6)
更 新:触发更新+30分钟的周期更新
使用范围:IGP
协议封装:基于IP协议封装,协议号为89
协议号:IP包中指定上一层采用什么协议。比如IP封装的上一层时UDP传输,则IP包中采用的协议号一般为6
OSPF开销值:使用参考带宽/链路带宽(当值小于1时等于1,值大于1时省略小数点)来计算开销值,得到每段链路开销值,路由开销值为整条路径开销值之和
默认参考带宽100M;cost值向上取整数;故当接口带宽大于参考带宽时,cost值为1;可能导致选路不佳;可以手工修改默认的参考带宽:
[r1]ospf 1[r1-ospf-1]bandwidth-reference ?INTEGER<1-2147483648> The reference bandwidth (Mbits/s)[r1-ospf-1]bandwidth-reference 1000切记:一旦修改,全网所有设备需一致;ospf协议默认将选择cost值之和最小的路径,为最短路径加表;
OSPF区域设计原则:
- 必须存在且唯一的骨干区域(area 0),单区域可为area 0或不为area 0
- 若存在非骨干区域,非骨干区域必须与骨干区域直接相连
OSPF协议是链路状态型协议,所以本身需要传递的数据量就很大,并且它不同于RIP的传递只需相邻的两个路由器进行数据交互,OSPF的交互是将一个路由器的相关信息数据包传给所有路由器来进行交互,因此划分区域可以减少大部分路由器的负担,只需要边界路由将本区域,与相邻区域的LSDB都储存下来,从而降低了区域内部路由器的LSDB
OSPF支持区域划分的原因:
- 限制LSA的传播范围
- 减少LSA的数量
OSPF 区域的划分:基于接口(链路),即划分区域只能以接口来作为点来画边界并且一条最小路由(相邻路由器与路由器之间的路径)不能划分为两个区域,只能作为一个区域一个整体
区域分类:1、骨干区域(0区域) 2、非骨干区域 (非0区域)
OSPF 区域的标识:
- 十进制数(0到2^32-1)
- 类似于IP地址 A.B.C.D(0.0.0.0到255.255.255.254)
无论是十进制标识还是类似IP地址的标识都是32位二进制
相关名词:
LSA(Link-State Advertisement)链路状态通告:是链接状态协议使用的一个分组,它包括具体的每一条的拓扑或路由信息, LSA被路由器接收用于维护它们的路由选择表。
LSDB(Link State DataBase)链路状态数据库:由各种LSA构成。通过路由器间的路由信息交换,自治系统内部可以达到信息同步,即LSDB(链路状态数据库)描述的网络拓扑同步。
骨干路由器:路由器的所有接口都在骨干区域内
非骨干路由器:路由器之间的所有接口都在非骨干区域内
区域边界路由器(ABR):路由器处于骨干区域和非骨干区域的边界
自治系统边界路由器(ASBR):位于OSPF自主系统和非OSPF网络之间的路由器
OSPF状态机
OSPF共有8种状态机,分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full,这八种状态机又可分成邻居阶段(前四个状态机)和邻接阶段(后四个状态机)
- Down:邻居会话的初始阶段,表示收到来自邻居路由器的Hello数据包 ,一旦收到来自对端的数据包会进入下一个状态机
- Attempt:该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔超时前仍然没有回复Hello报文。此时路由器依然周期向对端发送Hello报文。
- Init:收到Hello报文后状态为Init,但报文中并没有自己的Router-id将会维持在该阶段,当报文中存有本端的RID则进入下一状态机
- 2-way:收到的Hello报文中包含有自己的Router ID,状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态
- Exstart:使用不携带数据库目录信息的DBD进行主从关系的选举,并确定DBD的序列号
- Exchange:主从关系协商完毕后开始使用携带数据库目录信息的DBD包进行目录共享
- Loading:查看完对端的DBD目录后,基于本地未知的LSA,使用LSR向对端查询,对端使用LSU来进行LSA内容共享应答;本端收到LSA后使用LSAck来进行应答,DD报文交换完成即Exchange done
- Full:LSR重传列表为空,邻接关系建立的标志即此时状态为Full
1、点到点网络类型 down -->init -- >(前提为可以建立邻接)exstart -->exchange-->若查看邻接的DBD目录后发现不用进行LSA直接进入full 若查看后需要进行查询、应答先进入loading,在查询应答完后再进入full;
2、MA网络类型 down -->init -- >2way-->(前提为可以建立邻接,通过DR/BDR选举后来判断)exstart -->exchange-->若查看邻接的DBD目录后发现不用进行LSA直接进入full 若查看后需要进行查询、应答先进入loading,在查询应答完后再进入full;
3、当hello time较大时,状态机在down和init之间将出现尝试等待状态;
DBD包:DBD包中携带接口的MTU值,要求两端接口MTU一致,否则将卡在exstart状态机;华为设备默认不携带MTU值
[r1]interface g0/0/1[r1-GigabitEthernet0/0/1]ospf mtu-enable 两端直连接口均需开启
DBD包中的描述位:
I 为1表示本地发出的第一个DBD
M 为0表示本地发出的最后一个DBD
MS 为1表示本地为主,为0表示本地为从
DBD使用序列号来进行隐性确认,从基于主的序列号进行;
DR与BDR选举
DR:指定路由器
BDR:备用指定路由器
选举规则:
- DR、BDR的选举基于接口优先级进行,优先级最高的接口被选举为DR,优先级为0则不参与选举
- 优先级相同时,则比较RID,RID大的为DR(没有RID则以IP最大的环回接口为RID,无环回则以IP最大的物理接口为RID)
[r1]int g0/0/1
[r1-GigabitEthernet0/0/1]ospf dr-priority 0
DR没有抢占性,即在DR未失效前有新的路由器加入时,不管该路由器的优先级是否大于原有DR的优先级,都不会对DR进行替换,但是在重新选举BDR时会加入选举
先选举BDR再选举DR,因为在刚开始时DR和BDR列表都是空的,都放在一个DR other的列表里,然后先对比优先级,优先级大的选为BDR;优先级相同的情况下,Router ID大的选为BDR。然后DR从BDR列表里面去选一个成为DR,BDR再从DR other列表中选一个做BDR
选举DR与BDR原因:
1、在广播网络和NBMA网络中,任意两台路由器之间都要传递路由信息。如果网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。这会导致每次路由变化都会导致多次传递,浪费了带宽资源。因此OSPF定义了DR。通过选举产生DR后,所有其他设备都只将信息发送给DR,由DR将网络链路状态LSA广播出去。而为了防止DR发生故障,重新选举DR时会造成业务中断,除了DR之外,还会选举一个备份指定路由器BDR。这样除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
2、在MA网络中若两两间均建立邻接关系,将可能出现大量的重复更新;DV距离矢量路由协议可以使用接口水平分割来解决,由于OSPF协议邻接需要数据库比对,故不能设计接口水平分割;只能进行DR/BDR选举来解决;所有非DR/BDR之间为邻居关系,不进行数据库同步
点对点网络中,所有邻居关系均建立为邻接关系
MA(多路访问)网络中,将进行DR/BDR选举
修改优先级后,必须重启所有参选设备的OSPF协议
<R1>reset ospf process
OSPF数据包
OSPF中的数据包跨层封装于3层报头,协议号为89
中文名称 | 英文全称,缩写 | 作用 |
问候 | Hello | 10s或30s周期发送,用于发现和维护邻居关系 |
数据库描述 | Database Description, DBD | 用于携带数据库目录 |
链路状态请求 | Link State Request,LSR | 基于本地未知的LSA信息进行查询 |
链路状态更新 | Link State Update,LSU | 用于传递具体的LSA信息,携带一条或多条LSA |
链路状态确认 | Link State ACK,LSAck | 保证可靠性,确认包 |
理解:数据包中有五种报文,Hello报文用来发现和维护邻居关系,防止其中一方突然出现故障导致的问题,DD报文用来查询信息是否有重复的以及发现自己于对方所没有的LSA,LSR报文请求对方发送LSA,LSU报文用来发送LSA,ACK报文表示确认收到对方发送的信息
OSPF工作过程
1、启动配置完成后,邻居间组播收发hello包,获取对端的RID,建立邻居关系,生成邻居表;
2、邻居关系建立后进行条件的匹配,匹配失败将维持邻居关系,仅hello包保活即可;
3、匹配成功者之间建立邻接(毗邻)关系,需要DBD共享数据库目录,LSR/LSU/LSack来获取未知的LSA信息,当收集完网络中所有的LSA后,生成数据库表LSDB
4、当数据库表同步完成后,本地使用SPF算法,将数据库表转换为有向图,再将有向图计算成为最短路径树,然后以本地为起点,计算到达所有未知网段的最短路径,然后将这些路由加载于本地的路由表中;收敛完成。
5、收敛完成后–hello包周期保活–30分钟周期的BDB比对,若不一致将会使用LSR/LSU/LSack重新获取
拓扑结构突变:
- 新增网段:直连新增网段的设备,使用LSU直接向本地所有邻接进行触发更新,对端需要确认
- 断开网段:直连断开网段的设备,使用LSU直接向本地所有邻接进行触发更新,对端需要确认
- 无法沟通:没有周期的hello包;dead time为hello time的4倍--倒计时,正常被每一个新的hello包刷新,归0时断开邻居关系,删除该邻接共享的信息
六种LSA
每一条LSA(链路状态通告)携带具体的拓扑或者路由信息,不同环境下将产生不同类别的LSA
无论哪类LSA,均存在以下基本参数
Type : Router 类型名,此处为1类
Ls id : 1.1.1.1 link-id该条目在目录中的编号(页码号)
Adv rtr : 1.1.1.1 通告者 -- 该条LSA的更新源设备的RID
Ls age : 1666 老化时间,周期1800s刷新,触发马上刷新;最大老化3609s
Len : 48 数据包长度
seq# : 80000015 序列号 更新后变化
chksum : 0x6f95 校验码号 更新后变化
类别 | 类型名 | 传播范围 | 通告者 | 携带信息 |
1 | Router | 单区域 | 该区域的每台路由器 | 本地直连拓扑 |
2 | Network | 单区域 | 单网段内的DR | 单个MA网络内的拓扑 |
3 | Summary | 整个OSPF域 | ABR | 域间路由 |
4 | Asbr | 除ASBR所在区域外 | ARB | ASBR位置信息 |
5 | Ase | 整个OSPF域 | ASBR | 域外路由 |
7 | Nssa | 单个NSSA区域内 | ASBR | 域外路由 |
类别 | 类型名 | link-ID | 通告者 |
1 | Router | 通告者RID | 该区域的每台路由器 |
2 | Network | DR在该网段接口的ip地址 | 单网段内的DR |
3 | Summary | 域间路由的目标网络号 | ABR 在经过下一台ABR,修改为新的ABR |
4 | Asbr | ASBR的RID | ABR 在经过下一台ABR,修改为新的ABR |
5 | Ase | 域外路由的目标网络号 | ASBR |
7 | Nssa | 域外路由的目标网络号 | ASBR |
注意:只有MA/NBMA网络才会产生2类LSA
5和7类的LSA路由会存在一个类型1、类型2 的区别:
类型2(默认)仅显示种子(起始)度量
类型1显示整段路径的总度量
类型2的路由,虽然仅显示起始度量,但实际选路时依然基于总度量选择
重发布缺省时,修改为类型1[r9-ospf-2]default-route-advertise type 1
类型1优于类型2
总结:无论类型1还是类型2,在选路均基于实际本地到达ASBR的距离来选路;因为重发布将清除原有协议的度量,故ospf默认的选路规则将可能选中非最佳路径;通过修改重发布过程中修改度量类型为1,实现快速人工干预
三张表
ospf内有三张十分重要的表,分别为邻居表、LSDB表和OSPF路由表
邻居表:显示了ospf路由器之间的邻居基本状态,也可以查看对端设备的Router ID和接口地址等等
<R1>display ospf peer 查看邻居表
<R1>display ospf peer brief 查看邻居简表
LSDB表:存放LSA的数据库
<R1>display ospf lsdb
查看具体的一条LSA信息
<R1>display ospf lsdb network 12.1.1.1 类别名 link-id
OSPF路由表:OSPF路由表和路由器路由表是不一样的表项,OSPF路由表中路径有可能不只是一条,ospf路由表内会运行一种算法,算出一条通往目的设备的最优路径放在路由器路由表内
<R1>display ospf routing
OSPF的接口网络类型
ospf协议在不同网络类型的接口上,有着不同的工作方式
查看OSPF协议在接口具体的工作方式名称
[r1]display ospf interface g0/0/1
接口类型 | OSPF工作方式 |
LoopBack | 华为显示p2p,实为环回专用工作方式 无hello包 以32位主机路由传递 |
点到点类型(HDLC/PPP/GRE)p2p | hello time10s 不选DR,邻居直接建立为邻接 |
BMA(以太网) Broadcast | hello time10s 选DR/BDR 非DR/BDR间仅建立邻居关系 |
NBMA(MGRE) | 默认和普通GRE一样接口工作方式为p2p,该工作方式在华为设备上仅和最先收到的hello包建立邻居关系; |
故在MGRE环境需要手工修改接口工作方式
[r1-Tunnel0/0/0]ospf network-type ?broadcast Specify OSPF broadcast networknbma Specify OSPF NBMA networkp2mp Specify OSPF point-to-multipoint networkp2p Specify OSPF point-to-point network
注:p2p 和broadcast 两种工作方式的hello time均为10s,故可以建立邻居关系,但在DR选举上不同,故无法正常交流LSA;
切记:邻居间ospf接口工作方式必须一致,才能正常建邻和正常收敛;
若将MGRE下所有接口的工作方式修改为broadcast,需要关注拓扑结构:
- 全连网状结构,可以正常工作,正常选举DR/BDR
- 非全连 ---管理员手工合理安排DR位置
- 星型结构-- 仅中心站点为DR,无BDR
基础配置
宣告配置全部完成后,邻居间周期组播收发hello包,建立邻居关系并生成邻居表
基础配置
[r1]ospf 1 router-id 1.1.1.1 启动时可以定义进程号和RID,进程号仅具有本地意义,默认为1宣告:1)区域划分 2)激活接口OSPF协议 3、共享接口信息
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]network 12.1.1.1 0.0.0.0
[r1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
邻居间hello包中必须完全一致的参数,否则无法建立邻居关系
必须完全一致的参数:Hello time、dead time、区域编号、认证字段、末梢区域标记、(在华为设备中邻居间hello包还将携带建邻的接口ip地址子网掩码,也必须和邻居一致)
扩展配置
1、手工认证
【1】接口认证:直连的邻居间,设定认证口令,进行身份核实,同时对双方交互的数据进行加密保护
[r9-GigabitEthernet0/0/1]ospf authentication-mode md5 1 cipher 123456 邻居间认证模式、编号、密码必须完全一致
【2】区域认证:实际在该设备上所有属于同一区域的接口进行了接口认证配置(批量操作命令)
[r1]ospf 1[r1-ospf-1]area 1[r1-ospf-1-area-0.0.0.1]authentication-mode md5 1 cipher 123456
【3】虚链路认证
[r1-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 md5 1 cipher 123456
2、加快收敛
OSPF的hello time 默认为10或30s,dead time为hello time 的4倍,邻居间hello、dead time必须完全一致,否则无法建立邻居关系(修改本端的hello time,本端的dead time自动4倍关系匹配;不易修改的过小)
[r2-GigabitEthernet0/0/0]ospf timer hello 10
3、沉默接口
仅接收不发送路由协议信息
配置于被宣告的连接用户终端接口,不能配置于连接邻居的骨干接口,否则无法建立邻居关系
[r5]ospf 1[r5-ospf-1]silent-interface GigabitEthernet 0/0/2
4、缺省路由
【1】自动产生缺省(3类、5类、7类)
3类缺省-- 特殊区域产生 末梢 完全末梢 完全NSSA 这三种特殊区域在配置完成后,连接骨干区域的ABR将向该区域发布3类缺省
5类缺省为手工配置产生;
7类缺省--特殊区域产生 NSSA、完全NSSA均产生;但完全NSSA也产生3类缺省,3类优于7类;
【2】手工配置产生 ---- 5类缺省
[r9]ospf 2 [r9-ospf-2]default-route-advertise 将本地路由表中无论何种来源产生的缺省路由,重发布到本地的OSPF进程2中让其他与本地进程2在一个ospf域中的路由器,产生5类缺省,指向R9
注:以上命令若本地路由表中没有缺省,将无效
[r9]ospf 1[r9-ospf-1]default-route-advertise always 该指令为本地强制向邻接发送5类缺省路由,无论本地路由表是否存在缺省
OSPF的缺省注意事项:由于OSPF的特殊区域可以自动产生缺省路由指向骨干0区域;故ISP在网络中的位置将决定,网络是否会因为缺省路由产生环路;若ISP连接骨干区域,那么所有的非骨干可以正常定义为各种特殊区域;若ISP处于某个非骨干,或非骨干连接的其他协议,那么对应的该非骨干区域不能配置为任何特殊区域,必须手工进行优化管理;
5、汇总
区域内不可进行汇总,但是区域间的ARP进行路由共享时可进行汇总配置
[R2]ospf 1[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]abr-summary 1.1.0.0 255.255.252.0
OSPF的不规则区域与解决方案
- 远离骨干非骨干区域
- 不连续骨干区域
解决方案:
1、tunnel ---点到点GRE
在合法与非ABR间建立隧道,然后将其宣告于OSPF协议中;
缺点:
- 周期和触发信息对中间穿越区域造成资源占用
- 选路不佳
2、OSPF虚链路
由合法ABR,给同一区域的非法ARB进行授权,之后非法ABR能够进行区域间路由共享
[r2]ospf 1[r2-ospf-1]area 1 两台ABR均存在的区域[r2-ospf-1-area-0.0.0.1]vlink-peer 4.4.4.4 对端ABR的RID;两台ABR均需配置
优点:没有新的数据链路出现,故选路正常;
缺点:两台ABR之间的周期信息,依然对中间区域造成影响,增加延时
cisco思科--- 取消两台ABR间所有的周期信息,仅存在触发更新-- 不可靠
华为 --- 保留所有的周期信息,对中间区域资源占用严重
3、多进程双向重发布(推荐)
多进程:一台路由器上允许的多个ospf进程,每个进程运行独立的接口(一个接口只能宣告于一个进程中)
多进程双向重发布可以将非法ABR上的不同接口宣告于不同的OSPF进程中造成独立的协议,再使用重发布进行,将该非法ABR转换为ASBR,进行协议间路由条目共享
优点:不存在选路不佳问题,不存在周期资源占用,和不可靠问题;存在独立的邻居、数据库且数据库间不做共享,仅将所有数据库计算所得的路由加载于同一路由表中
双向重发布[r4]ospf 1[r4-ospf-1]import-route ospf 2[r4-ospf-1]q[r4]ospf 2[r4-ospf-2]import-route ospf 1
优化配置
优化OSPF的LSA 减少LSA的更新量
1、手工汇总:减少骨干区域的LSA
【1】域间路由汇总
只能在区域间传递3类LSA时,进行手工的路由汇总
在ABR上配置
[r1]ospf 1[r1-ospf-1]area 2 本地通过该区域的1/2LSA拓扑计算所得路由才能汇总[r1-ospf-1-area-0.0.0.2]abr-summary 5.5.4.0 255.255.254.0
【2】 域外路由汇总
当ASBR将其他协议产生的路由条目重发布进入OSPF域时,可以进行汇总配置[r4]ospf 1[r4-ospf-1]asbr-summary 99.1.0.0 255.255.252.0
2、特殊区域:减少非骨干区域的LSA
【1】不是骨干区域、不存在虚链路、不存在ASBR的情况下
1」末梢区域:该区域拒绝,外部进入的4/5的LSA;由该区域连接骨干的ABR,向内部产生一条3类的缺省路由
[r5]ospf 1[r5-ospf-1]area 2 该区域内所有路由器均需配置[r5-ospf-1-area-0.0.0.2]stub
2」完全末梢区域:在末梢区域的基础上,仅一步拒绝3类LSA的进入;仅保留一条3类缺省的进入先将该区域配置为末梢区域
然后仅在ABR上配置完全末梢即可[r1]ospf 1[r1-ospf-1]area 2[r1-ospf-1-area-0.0.0.2]stub no-summary
【2】不是骨干区域、不存在虚链路、存在ASBR的情况下
1」NSSA:非完全末梢区域;该区域拒绝4/5的LSA;本地ASBR产生的域外路由,使用7类在本NSSA区域传递,通过ABR进入骨干区域,被转换成5类;由该区域连接骨干的ABR向内部发送一条7类缺省;
其存在的价值,是为了让该区域拒绝其他区域的,ASBR产生的4/5类LSA进入
[r4]ospf 1[r4-ospf-1]area 1[r4-ospf-1-area-0.0.0.1]nssa
2」完全NSSA:在普通NSSA的基础上,进一步拒绝3的类LSA进入该区域;由该区域连接骨干的ABR向内部发布一条3类缺省
先将区域配置为NSSA,然后仅在连接骨干的ABR上,定义完全即可
[r3]ospf 1[r3-ospf-1]area 1[r3-ospf-1-area-0.0.0.1]nssa no-summary