ospf 概述:
什么是ospf
- 开放式最短路径优先协议,一种最受欢迎的动态路由协议
- 版本:ospfv2(ipv4)和ospfv3(ipv6)
- ospf位于OSI参考模型的第三层,数据封装在ip报头的后面
- 协议号:89
- 场景:适用于中大型网络规模,常见的场景有:政企网(层次化的网络架构)、数据中心内部(用于实现把不同的网段打通)
- 作用:便于大型网络中对路由的管理和维护
ospf 工作原理:
- 建立邻居:邻居表
- 同步数据库:数据库
- 计算路由表:路由表,ospf协议路由表
报文类型:
- Hello报文:用于发现、建立、维护、断开邻居关系
- DD报文:用于描述数据库摘要信息(LSA头部信息)
- LSR报文:请求自己数据库中没有的LSA信息
- LSU报文:根据对方的请求信息,更新LSA给对方
- LSACK报文:收到对方的更新LSA信息后,进行确认
hello报文的字段
- Network Mask-------子网掩码:默认情况下,两个建立ospf邻居的路由器,互联接口的掩码必须相同
- Hello Interval-------hello时间间隔/hello计时器/hello时间:就是发送这个hello报文的路由器,默认情况下,hello时间为10秒,两台路由器想要建立连接,hello时间必须相同
- Option-------特殊标记位:不通的区域类型,标记位也不一样,想要建立连接,标记位也必须相同
- Router Priority-------DR优先级,用于DR选举:如果两台想要建立ospf邻居的路由器,都在互联接口上配置DR为0,那么这俩路由器都不会参与DR选举,邻居就无法建立,邻居状态就会卡在two-way
- Router Dead Interval-------Dead时间/死亡时间:默认情况下,是hello时间的4倍=40秒。dead时间会随着hello时间的变化而变化,但还是hello时间的4倍
- Designated Router:DR:指定路由器
- Backup Designated Router:BDR:备份制定路由器
- Active Neighbor:活跃的邻居,认可的邻居
ospf区域:
- 区域分层:ospf适用于大型网络,采用分层设计,划分为骨干区域和非骨干区域
- 骨干区域:区域号为0,即为骨干区域
- 非骨干区域:区域号不为0
- 非骨干区域必须与骨干区域直接“相连”,实现区域之间的互通
ospf区域的表示
- 通过十进制表示,例如:1、2、3等
- 通过点分十进制表示,例如:0.0.0.0、0.0.0.1、0.0.0.2等
为什么要引入区域
- 原因:只有一个区域的不足,如果只有一个区域,公司内所有路由器都要同步数据库
不足: - 数据报文非常多,所以设备压力大, 带宽占用多
- 由于数据报文多,所以同步数据库非常慢,占用时间多
- 由于数据库非常大, 所以计算路由慢,所以计算出来的路由表也非常大
- 由于路由表非常大,路由器转发数据的时候, 查路由表时会让设备压力大(CPU占用高),查表慢,最终导致,数据转发慢,公司网络性 能差
引入多个区域的优势:
- 只有同一个区域内的路由器才需要同步数据库,不同区域的路由不需要同步数据库
- 所以同步数据库的设备少, 数据报文就少,设备压力也小,也不过多浪费带宽3)由于数据报文少,所以数据库最终就小
- 数据库小,数据库同步的速度就快,计算路由就快5)数据库小,最终路由表也小,转发数据的速度就快,公司的网络质量就好
无法建立邻居的原因?
- 两台设备的router-id 不能相同,如果相同无法建立邻居
- 两台设备互联接口的区域号必须相同,如果不同,无法建立邻居
- 两台设备的互联的接口,需要能够ping 通(三层互通),如果三层不通,无法建立邻居关系
- 两台路由器的接口的IP地址的子网掩码必须一致,才可以建立邻居关系(p2p除外)
- 两台路由器接口的Hello 时间必须一致,才能建立邻居关系
- 两台路由器接口的Dead时间必须一致,才能建立邻居关系
- 两台路由器的优先级不能全为0 (全为0可以建立邻居,无法建立邻接)
- 认证类型必须相同(才能建立邻居关系)
- 认证密码必须相同(才能建立邻居关系)
- 特殊标记位必须相同(才能建立邻居关系)即:特殊标记位:E位和N位要相同
ospf防环计划
- 区域防环:非骨干区域一定要跟骨干区域相连
- 域间防环:ABR只会将3类LSA转发到骨干区域
- LSA3类防环:ABR如果从非0区域接收到1个3类LSA,是不允许发送到0区域的
- 自带防环机制:SPF算法 使用Dijkstra算法计算出到达每个目标网络的最短路径树,这个最短路径树基于成本(cost)来确定最佳路径,
自然避免了环路的产生
ospf路由角色
- 骨干路由器:路由器只要有一个接口在骨干区
- 区域内路由器:路由器的所有接口都在同一个区域
- ABR(区域边界路由器)同时连接着骨干区域和非骨干区域的路由器
- ASBR(自治系统边界路由器)具有产生外部路由能力的路由器
ospf 7种状态机
- Down :发送hello报文
- Init:接受到邻居发来的hello报文,但是该hello报文中没有自己的router-id
(为什么卡在init状态:单点故障) - Two-way:接收到hello报文中,有自己的router-id
(为什么卡在two-way状态:DR优先级为0,不参与DR选举) - Exstart:交互第一个DD报文,确认主从关系,保证传输可靠
- Exchange:交互数据库描述信息
(为什么卡在exstart、exchange状态:MTU最大传输单元,一般是1500字节,值不一致) - loading:数据库同步
- Full:完全邻接状态
- 还有一种非广播状态:import(不常见)
ospf 网络类型
- 广播类型(Broadcast):数据链路层协议为以太网时,ospf默认的网络类型为广播
- 非广播类型(NBME):当链路层协议是fr(帧中继)时,ospf运行在这个网络环境中,默认使用NBME网络类型(不常见)
- 点到点(p2p):数据链路层运行的协议为PPP或HDLC时,默认为p2p
- 点到多点(p2mp):多个点到点(不常见)
DR与BDR
为什么要有DR/BDR
- 共享网络中,邻接关系数量多,重复发送协议报文(DD、LSR、LSU、LSACK),占用网络资源,数据库同步慢
DR的作用
- 减少邻接关系,降低设备负担
- 加快数据库同步
DR的选举原则
- 比较接口优先级,越大约优, 默认优先级为1,如果优先级相同
- 则比较Router-id,越大越优
- 哪个接口先配置OSPF,哪个接口会成为DR
DR的特点
- 不能抢占
- 每个网段中DR只有一个,BDR可以没有,DR必须有一个,如果没有DR,邻居将会一直卡在Two-way状态,无法建立邻接,无法full
- 当DR优先级为0时,不参加DR选举,直接变成DR-other
路由器的接口角色
- DR:指定路由器
- BDR:备份指定路由器
- DR-Other
注意:DR 是接口的概念,不是路由器的概念,我们可以说这个接口是不是DR或者BDR,不能说这个路由器是不是DR路由器或者BDR路由器。
链路状态数据库(LSDB)
- 作用:存储各种类型的LSA
- LSA概念:链路状态通告信息
- LSA作用:计算路由的原材料,相当于土豆(LSA),用土豆来制作土豆丝(路由),好比在OSPF中就用LSA来计算路由
LSA分类:
- 1类LSA:Router-LSA
- 2类LSA:Network-LSA
- 3类LSA:Network-summary-LSA
- 4类LSA: ASBR-summary-LSA
- 5类LSA:AS-external-LSA 7类LSA:NSSA LSA
ospf 三种表
邻居表
数据库
路由表
ospf LSA解析
一类LSA
- 类型:Router-LSA
- 名字:一类LSA的名字取自:生成这条LSA的路由器的router-id
- 通告路由器:生成这条LSA的路由器的router-id
区域内每一台路由器都会生成一条描述自己的一类LSA - 特点:每一个运行ospf的路由器都会在自己所属的区域生成一条用来描述自己拓扑信息和网段信息的一类LSA
- 传播范围:仅仅在区域内传播
- 作用:用来计算域内路由
一类LSA是路由用来自我介绍的
介绍两类信息:拓扑信息+网段信息
拓扑信息:我是谁,我的邻居是谁,我用哪个接口连接着我的邻居
网段信息:我的接口ip地址段,我的接口掩码,我的cost值
二类LSA
- 类型:Network-LSA
- 名字:二类LSA的名字取自:DR接口的ip地址
- 通告路由器:DR接口所在路由器的router-id
- 传播范围:仅仅在区域内传播
- 作用:辅助一类LSA,计算域内路由
完善DR-IP地址段的掩码信息:
完善DR-IP地址段的拓扑信息
三类LSA
- 类型:Network-summary-LSA (sum-net)
- 名字:三类LSA的名字取自:区域之间网段的名字
- 通告路由器:本区域ABR的router-id
- 传播范围:仅仅在区域内传播,不跨区域传播
- 特点:三类LSA在传播过程中,每经过一个ABR设备,三类LSA的通告路由器就会发生变化,变成所经过的那台ABR设备的router-id
- 作用:计算域间路由
区域内的ABR设备将由一类和二类LSA计算出来的域内路由,变成三类LSA放进相邻的区域
目的:实现区域和区域之间的互联互通
四类LSA
- 类型:ASBR-summary-LSA
- 名字:四类LSA的名字取自:ASBR的router-id
- 通告路由器:本区域ABR的router-id
- 传播范围:仅仅在区域内传播
- 特点:四类LSA在传播过程中,每经过一个ABR设备,LSA的通告路由器就会发生变化,变成所经过的那台ABR设备的router-id
最初的那条4类LSA是由和ASBR在同一个区域的ABR生成的后续的4类的LSA是由本区域的ABR生成的 - 作用:四类LSA是用来通告ASBR的,辅助5类LSA计算外部路由
四类LSA在不同的区域传递ASBR的router-id
带你去找ASBR,目的就是为了配合5类LSA,计算外部路由
五类LSA
- 类型::AS-external-LSA
- 名字::五类LSA的名字取自:引入外部路由的网段的名字
- 通告路由器:ASBR的router-id
- 传递范围:整个0SPF网络
- 作用:用于通告外部路由(用于计算外部路由)
- 特点:ASBR生产5类的LSA
五类的LSA可以传输到OSPF网络中的任何地方,在传输的过程中,LSA没有发生任何变化
五类LSA不属于任何一个区域
七类LSA(引入的外部路由生成的7类LSA)
- 类型:NSSA-LSA
- 名字:引入的外部网段的名字
- 通告路由器:ASBR的router-id
- 作用:通告外部路由–计算外部路由
- 传递范围:仅仅在NSSA内部传播
- 特点::
NSSA的ABR设备会把这条七类的LSA改成五类的LSA,
整个0SPF网络泛洪-让其他区域的设备能够学习到这条五类LSA
从而计算出网段的路由,实现多公司之间的互联互通
特殊区域
stub区域:末梢区域
作用:
- 保护一个区域不受来自外部链路不稳定的影响
- 缩减数据库规模(让数据库里的LSA变少)–设备压力小
缩减路由表规模(让路由表里的路由条目变少)–设备压力小
降低设备负载压力
如何实现:
- 不学习4类和5类LSA
- 只学习1类,2类,3类LSA
出现新问题:
- 不学习4类和5类SA,就无法计算出ospf外部路由
- 没有外部路由,如何和A公司的PC3互联互通呢?
解决方案:
- stub区域的ABR会自动生成1条默认的3类LSA
- 这条默认的3类LSA,会计算出来一条默认的路由
- 通过这条默认的路由,我们就可以和外部网络通信
配置方法:
- stub区域的所有设备都要配置stub
stub区域特点:
- stub 不要5类LSA,,所以stub也绝对不能引入外部路由
- 骨干区域的路由器,绝对不能做成stub
totally stub 区域: 完全的末梢
作用:
- 保护一个区域不受来自外部链路不稳定的影响
保护一个区域不受来自区域间链路不稳定的影响 - 缩减数据库规模(让数据库里的LSA变少)–设备压力小
缩减路由表规模(让路由表里的路由条目变少)–设备压力小
降低设备负载压力
如何实现:
- 不学习3类,4类和5类L5A
- 只学习1类、2类LSA
出现新问题:
- 不学习4类和5类LSA,就无法算出ospf外部路由
- 没有外部路由,如何跟其他公司互联互通呢?
- 不学习3类LSA,无法计算出ospf域间路由,没有域间路由,如何和其他区域的网络通信呢
解决方案:
- totally stub区域的ABR会自动生成1条默认的3类LSA
- 这条默认的3类LSA,会计算出来一条默认的路由
- 通过这条默认路由,我们就可以和外部网络通信
- 通过这条默认的路由,我们还可以和其他区域的网络通信
配置方法:
- totally stub区域的所有设备都要配置stub
- 而且totally stub 区域的ABR设备,要配置stub区域
- 并且告诉ABR设备,不要3类的LSA
totally stub区域特点:
- totally stub 不要5类LSA,所以totally stub也绝对不能引入外部路由
- 骨干区域的路由器,绝对不能做成totally stub
nssa区域:
作用:
- 保护一个区域不受来自外部链路不稳定的影响
- 缩减数据库规模(让数据库里的LSA变少)–设备压力小
缩减路由表规模(让路由表里的路由条目变少)–设备压力小
降低设备负载压力 - 还可以引入外部路由
如何实现:
- 不学习4类和5类L5A
- 只学习1类、2类、3类和7类LSA
出现新问题:
- 不学习4类和5类LSA,就无法计算出ospf外部路由
- 没有外部路由,如何和外部公司的PC互联互通呢?
解决方案:
- NSSA区域的ABR会自动生成1条默认的7类LSA
- 这条默认的7类LSA,会计算出来一条OSPF外部-默认的路由
- 通过这条OSPF外部默认的路由,我们就可以和外部网络通信
配置方法:
- NSSA区域的所有设备都要配置NSSA
NSSA区 域特点:
- NSSA不要5类LSA,但是也可以引入外部路由,使用7类LSA引入
- 骨干区域,绝对不能做成NSSA
totally nssa区域:
作用:
- 保护一个区域不受来自外部链路不稳定的影响
保护一个区域不受区域间链路不稳定的影响 - 缩减数据库规模(让数据库里的LSA变少)–设备压力小
缩减路由表规模(让路由表里的路由条目变少)–设备压力小
降低设备负载压力 - 还可以引入外部路由
如何实现:
- 不学习3类,4类和5类LSA
- 只学习1类,2类和7类LSA
出现新问题:
- 不学习4类和5类LSA,就无法计算出ospf外部路由
- 没有外部路由,如何和A公司的PC3互联互通呢?
- 不学习3类LSA,无法计算域间路由
- 没有域间路由,如何与其他区域的网络互通呢?
解决方案:
- NSSA区域的ABR会自动生成2条默认的LSA
- 一条是默认的3类LSA:会计算出来一条ospf内部的默认路由
协议是:ospf,优先级是10 - 一条是默认的7类LSA:会计算出来一条ospf外部的默认路由
协议是:ONSSA 优先级是150 - 有两条默认的LSA,我们使用3类的默认LSA,计算ospf 默认路由。(为什么?因为3类LSA计算ospf内部路由,优先级10,7类LSA计算的ospf外部路由,优先级150,优先级越小越好,所以我们只用3类的默认LSA来计算ospf路由路由,计算出来的这条默认的OSPF内部路由与外部网络通信,与区域间网络通信)
配置方法:
- totally NSSA区域的所有设备都要配置NSSA
- totally NSSA区域的ABR设备,要配置 nssa no-summary:不要3类的LSA
totally NSSA区域特点:
- totally NSSA 不要5类LSA,但是也可以引入外部路由,使用7类LSA引入
- 骨干区域绝对不能做成totally NSSA区域
总结:
特殊区域的作用:
- 保护一个区域不受来自外部链路的影响
- 缩减 LSDB 和路由表的规模,减少路由信息数量,降低设备压力