4.3、链路状态路由协议-OSPF
- 前言
- 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议
- RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已经逐渐被OSPF取代
- 路由协议
- 内部网关路由协议
- OSPF
- RIP
- ISIS
- 静态路由协议
- 外部路由协议
- BGP
- 内部网关路由协议
- 开放式最短路径优先(OSPF)
- 无环路
- 基于链路状态的路由协议,从设计上就保证了无环路
- 收敛快
- OSPF能够快速检测并通告自身拓扑变化
- 扩展性好
- 现在网络上路由器数量越来越多,可以将每个自治系统划分成多个区域,限制每个区域的范围
- 使得OSPF特别适合于大中型网络,和企业网这种特殊的多场景
- 支持认证
- OSPF本身提供认证功能,可以设置报文必须经过认证才能进行交换
- 无环路
- OSPF原理介绍
- OSPF要求每一台运行OSPF的路由器都要了解整个网络的链路状态信息,这样才能计算出自身到达目的地的最优路径
- 1、首先,每一台运行OSPF的路由器都向周围通告自己的链路状态信息
- 2、当每一条路由器的链路状态信息通告LSA的泛洪汇聚成一个LSDB的数据库
- 相当于把每一部分都进行了解,把该区域所有的信息汇聚出来,最终汇聚成这个区域的地图
- 拥有一张平面的地图后,想要确定两点之间的最短路径就比较容易了
- 只需要经过算法进行计算即可
- 3、LSDB通过SPF的算法算出来它的最短路径树
- 4、然后通过路由计算汇聚成一个路由表项,将最短路径树得出的到达目的网络最优路由加入到OSPF的路由表中
- 想要传输数据时,通过检测路由表确定最短路径即可
- OSPF要求每一台运行OSPF的路由器都要了解整个网络的链路状态信息,这样才能计算出自身到达目的地的最优路径
- OSPF报文
- OSPF报文封装在IP报文中,协议号为89
- OSPF报文类型有5种:
- Hello报文
- 最常用的报文
- 用于发现、维护邻居关系
- DD(Database Description)报文
- 两台路由器进行LSDB数据库同步的时候,用DD报文来描述自己的LSDB
- 描述的信息属于摘要的信息
- 两台路由器进行LSDB数据库同步的时候,用DD报文来描述自己的LSDB
- LSR(Link State Request)报文
- 当两台路由器交换过DD报文以后,知道对端的路由器有哪些LSA是缺少的
- 两个路由器交互过以后,有一端缺少一些内容
- 即可通过LSR报文进行请求
- 当两台路由器交换过DD报文以后,知道对端的路由器有哪些LSA是缺少的
- LSU(Link State Update)报文
- 向对端路由器发送所需要的LSA
- LSACK(Link State Acknowledgment)报文
- 对接收到的LSU报文进行确认
- Hello报文
- 邻居状态机
- OSPF设备之间分为邻居和邻接关系
- 邻居
- Eg
- 本房间和隔壁房间
- Eg
- 邻接
- Eg
- 不只知道对方是邻居,而且彼此非常熟悉,建立了一个建交关系
- Eg
- 邻居
- 状态变迁
- 一开始先进入邻居状态
- 邻居状态
- Down
- 邻居的初始状态
- Init
- 此时路由器从邻居收到Hello报文,只是自己并不在收到的Hello报文邻居列表当中
- 2-Way
- 双方通信已经建立,收到Hello报文的邻居列表也有我的Route ID状态
- 2-Way状态即邻居状态
- Down
- 接下来进入邻接状态,开始同步数据库
- 邻接状态
- ExStart
- 形成邻接关系的第一个步骤,开始发送DD报文
- 发送之前要确认主从关系,来看使用是谁,发送是谁的序列号
- 确定是谁的序列号后,开始发送DD报文,描述本地LSDB内容
- 形成邻接关系的第一个步骤,开始发送DD报文
- Exchange
- 如果在此情况下两者之间的信息不同步,有一部分的内容对方缺少,这时就需要通过LSR报文进行请求,状态就会变成Loading状态
- 请求对方回应,通过LSU报文来进行回应,并且彼此之间进行确认后,状态就从Loading状态变为FULL
- ExStart
- 这时两个路由器之间的LSDB数据库进行了同步
- OSPF设备之间分为邻居和邻接关系
- Router ID、邻居和邻接
- Router ID
- OSPF路由器身份的标识
- 32位的值
- 类似于IP地址格式,但是并不是IP地址
- 邻居
- 通过OSPF接口向外发送Hello报文,用于发现邻居
- 当对方的参数一致,协商成功以后就会形成邻居关系
- 状态达到2-Way
- 邻接
- 形成邻居关系以后,双方并不一定能成为邻接关系,需要根据网络类型来定
- 只有当双方成功交换DD报文,同步了LSDB以后,才真正意义上形成邻接关系
- 状态达到FULL状态
- Router ID
- 邻居发现
- Hello报文用来发现和维持OSPF邻居关系
- Hello报文参数
- Network Mask
- 网络掩码
- Hello Interval
- Hello报文的时间间隔
- 单位秒(s)
- Options
- 可选项
- OSPF路由器支持可选的功能
- Router Priority
- 路由的优先级
- 用于选举DR和BDR
- Router Dead Interval
- 路由器失效/死亡的时间
- 通常为四倍Hello Interval
- Designated Router
- 指定路由器
- 选举DR后,DR路由器的Router ID
- Backup Designated Router
- BDR路由器的Router ID
- Neighbor
- 邻居Router ID
- Network Mask
- 如果路由器发现接收的Hello报文邻居列表中有自己的Router ID,则认为和邻居建立了双向链接,表示邻居关系已经建立
- 如果要验证Hello报文是否合法,要注意以下几点
- 网络类型
- 子网掩码的字段在接收的Hello报文中
- 如果是广播型、点到多点、NBMA类型,网络掩码必须和接收端口掩码一致
- 如果是点到点类型或者虚链路,网络掩码则不检查
- 子网掩码的字段在接收的Hello报文中
- Hello Interval字段
- Hello报文的Hello Interval字段必须和接收端口是一致的
- Router Dead Interval
- 死亡时间要和接收端口是一致的
- Options
- 可选项中E-bit必须和相关区域配置一致
- 网络类型
- 只有满足这四个条件才能说明Hello报文是合法的
- 如果要验证Hello报文是否合法,要注意以下几点
- 数据库同步
- 数据库同步是连接关系确立以后进行的
- 连接状态开始变成ExStart,RTA和RTB分别去发送第一个DD报文,都宣告自己为主路由器
- RTA和RTB分别发送一个DD报文后,通过Router ID对比选择自己为主路由器
- Router ID越大越优先
- RTB为主路由器
- RTA为非主路由器
- Router ID越大越优先
- RTA向主路由器回复一个DD报文,来确认它是主路由器,使用的序列号是Y序列号
- 接下来开始发送DD报文,状态从Exstart变成Exchange
- DD报文主要包含LSDB当中摘要的信息,使用的序列号是RTB的序列号
- 如果RTB和RTA之间的数据库是同步的,状态会之间转为FULL
- 如果两者状态是不同步的
- EG
- RTB数据库中有RTA缺少的,RTA则会发送一个LSR报文进行请求获得缺少的信息,状态转位Loading
- RTB通过LSU报文回复它详细缺少的内容
- 最终RTA会回复一个确认收到的报文,状态由Loading状态转位Full状态
- EG
- 最后建立了连接关系,数据库完成同步
- RTA和RTB分别发送一个DD报文后,通过Router ID对比选择自己为主路由器
- 连接状态开始变成ExStart,RTA和RTB分别去发送第一个DD报文,都宣告自己为主路由器
- 路由器使用DD报文来进行主从路由器的选举和数据库摘要信息的交互
- DD报文包含LSA的头部信息,用来描述LSDB的摘要信息
- LSR用于向对方请求所需的LSA
- LSU用于向对方发送其所需要的LSA
- LSACK用于向对方发送收到LSA的确认
- OSPF支持的网络类型
- 广播类型
- 缺省情况下,OSPF认为以太网络的网络类型是广播类型
- 点到点类型
- PPP、HDLC的网络类型是点到点类型
- 非广播多路访问(NBMA)
- 缺省情况下,OSPF认为帧中继、ATM的网络类型是NBMA
- 点到多点
- 广播类型
- DR&BDR
- 每一个含有至少两个路由器的广播型网络和NBMA网络,都有一个DR和BDR
- DR可以减少广播型网络中的邻接关系的数量
- Eg
- 图中一共有6个邻接关系
- Eg
- DR
- 如果指定一个DR,其他路由器都由DR去建立邻接关系,DR就可成为该广播网络的中心点
- BDR
- DR的备份
- DR和BDR也是邻接关系
- 其他路由器只于DR和BDR建立邻接关系,DR和BDR也是邻接关系,所以只有5个邻接关系,从6减少到5
- DR可以减少广播型网络中的邻接关系的数量
- 每一个含有至少两个路由器的广播型网络和NBMA网络,都有一个DR和BDR
- DR&BDR选举
- DR
- DR是基于端口的DR优先级的值进行选举的
- 优先级的取值范围是0~255,值越高越优先
- 如果接口优先级为0,表示该接口不会参与DR和BDR选举
- 如果优先级相同,则比较Router ID,值越大,越优先
- 优先级的取值范围是0~255,值越高越优先
- DR是基于端口的DR优先级的值进行选举的
- BDR
- 为了给DR做备份,广播网络中还会选举一个BDR
- 选举机制
- 选举机制过程中,选举是抢占形式
- 如果DR消失了,BDR变为DR,并且重新选举一个BDR
- 如果原先DR消失后再次出现,则不能再次成为DR
- 选举机制过程中,选举是抢占形式
- 数据链路层
- 越小越优先
- 网络层协议
- 越大越优先
- DR
- OSPF区域
- OSPF区域
- 多区域
- 如果设置多区域,一定要有区域0,因为区域0是骨干区域。
- 其他区域如果想通信,必须与骨干区域相连,通过骨干区域来传递报文,然后进行通信
- 如果设置多区域,一定要有区域0,因为区域0是骨干区域。
- 单区域
- 如果设置单区域,则设置该区域为骨干区域,为区域0
- 多区域
- 每个区域都维护一个独立的LSDB
- Area 0
- Area 0是骨干区域,其他区域都必须与此区域相连
- ABR
- 处于两个区域交界处的设备
- Eg
- 既属于区域1,也属于区域0
- Eg
- ABR同时拥有两个LSDB,因为它既属于区域1,又属于区域2,只不过彼此区域之间的LSDB是互相独立的
- 处于两个区域交界处的设备
- ASBR
- 一边属于区域内的,另外一边是处于区域外的路由器
- OSPF区域
- OSPF开销
- OSPF基于接口带宽计算开销
- OSPF的开销公式为带宽参考值/带宽
- 带宽参考值默认为100M
- 我们现在接口带宽已经变得很大了,有很多大于100M,所以计算开销时,带宽参考值已经不足以去进行精确的计算
- 要想改变OSPF开销,有两种方法
- 改变带宽参考值
- 使带宽参考值变大
- 可以通过bandwidth-reference命令来设置带宽参考值
- 直接改变开销
- 配置命令:Ospf cost 20
- 改变带宽参考值
- 带宽参考值默认为100M
- OSPF配置
- OSPF配置
- 1、配置设备Router ID
- Router ID可以自行配置
- 没有配置Router ID,则会自行选取环回口的地址来设置
- 如果有设置了多个环回口,则选择最大的环回口进行设置
- 如果没有环回口地址,则选择接口地址来进行设置
- 2、划分区域
- 3、宣告地址
- 网段
- 反掩码
- 和掩码状态相反
- 将1变为0,将0变为1
- 和掩码状态相反
- 1、配置设备Router ID
- OSPF配置
- 配置验证
- OSPF认证
- 华为ARG3系列路由器运行OSPF时,支持两种认证方式
- 区域认证
- 接口认证
- 接口认证优先级高于区域认证
- 配置命令
- Ospf authentication-mode 认证模式 用户名 密码
- 配置OSPF认证时,一定要两端都启用认证功能
- 如果两端都不匹配,那么邻居关系无法建立成功,因为彼此之间数据是不通过认证的
- 华为ARG3系列路由器运行OSPF时,支持两种认证方式
- 配置验证
- 总结
- OSPF Hello报文中Router Dead Interval字段的作用是什么?
- Hello报文中的死亡间隔时间是Hello间隔的四倍,在广播型网络中缺省是40s
- 如果在此时间没有收到邻居发来的Hello报文,则认为邻居失效
- 在广播网络中,DR和BDR用来接收链路状态更新报文的目的是什么?
- 链路状态更新报文
- 接收组播地址
- 224.0.0.6
- 发送组播地址
- 224.0.0.5
- 接收组播地址
- 链路状态更新报文
- OSPF Hello报文中Router Dead Interval字段的作用是什么?