4.3、链路状态路由协议-OSPF

4.3、链路状态路由协议-OSPF

  • 前言
    • 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议
    • RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已经逐渐被OSPF取代
    • 路由协议
      • 内部网关路由协议
        • OSPF
        • RIP
        • ISIS
        • 静态路由协议
      • 外部路由协议
        • BGP
  • 开放式最短路径优先(OSPF)
    • 4.3、链路状态路由协议-OSPF
    • 无环路
      • 基于链路状态的路由协议,从设计上就保证了无环路
    • 收敛快
      • OSPF能够快速检测并通告自身拓扑变化
    • 扩展性好
      • 现在网络上路由器数量越来越多,可以将每个自治系统划分成多个区域,限制每个区域的范围
      • 使得OSPF特别适合于大中型网络,和企业网这种特殊的多场景
    • 支持认证
      • OSPF本身提供认证功能,可以设置报文必须经过认证才能进行交换
  • OSPF原理介绍
    • 4.3、链路状态路由协议-OSPF
    • OSPF要求每一台运行OSPF的路由器都要了解整个网络的链路状态信息,这样才能计算出自身到达目的地的最优路径
      • 1、首先,每一台运行OSPF的路由器都向周围通告自己的链路状态信息
      • 2、当每一条路由器的链路状态信息通告LSA的泛洪汇聚成一个LSDB的数据库
        • 相当于把每一部分都进行了解,把该区域所有的信息汇聚出来,最终汇聚成这个区域的地图
      • 拥有一张平面的地图后,想要确定两点之间的最短路径就比较容易了
        • 只需要经过算法进行计算即可
      • 3、LSDB通过SPF的算法算出来它的最短路径树
      • 4、然后通过路由计算汇聚成一个路由表项,将最短路径树得出的到达目的网络最优路由加入到OSPF的路由表中
    • 想要传输数据时,通过检测路由表确定最短路径即可
  • OSPF报文
    • 4.3、链路状态路由协议-OSPF
    • OSPF报文封装在IP报文中,协议号为89
    • OSPF报文类型有5种:
      • Hello报文
        • 最常用的报文
        • 用于发现、维护邻居关系
      • DD(Database Description)报文
        • 两台路由器进行LSDB数据库同步的时候,用DD报文来描述自己的LSDB
          • 描述的信息属于摘要的信息
      • LSR(Link State Request)报文
        • 当两台路由器交换过DD报文以后,知道对端的路由器有哪些LSA是缺少的
          • 两个路由器交互过以后,有一端缺少一些内容
        • 即可通过LSR报文进行请求
      • LSU(Link State Update)报文
        • 向对端路由器发送所需要的LSA
      • LSACK(Link State Acknowledgment)报文
        • 对接收到的LSU报文进行确认
  • 邻居状态机
    • 4.3、链路状态路由协议-OSPF
    • OSPF设备之间分为邻居和邻接关系
      • 邻居
        • Eg
          • 本房间和隔壁房间
      • 邻接
        • Eg
          • 不只知道对方是邻居,而且彼此非常熟悉,建立了一个建交关系
    • 状态变迁
      • 一开始先进入邻居状态
      • 邻居状态
        • Down
          • 邻居的初始状态
        • Init
          • 此时路由器从邻居收到Hello报文,只是自己并不在收到的Hello报文邻居列表当中
        • 2-Way
          • 双方通信已经建立,收到Hello报文的邻居列表也有我的Route ID状态
          • 2-Way状态即邻居状态
      • 接下来进入邻接状态,开始同步数据库
      • 邻接状态
        • ExStart
          • 形成邻接关系的第一个步骤,开始发送DD报文
            • 发送之前要确认主从关系,来看使用是谁,发送是谁的***
          • 确定是谁的***后,开始发送DD报文,描述本地LSDB内容
        • Exchange
          • 如果在此情况下两者之间的信息不同步,有一部分的内容对方缺少,这时就需要通过LSR报文进行请求,状态就会变成Loading状态
          • 请求对方回应,通过LSU报文来进行回应,并且彼此之间进行确认后,状态就从Loading状态变为FULL
      • 这时两个路由器之间的LSDB数据库进行了同步
  • Router ID、邻居和邻接
    • 4.3、链路状态路由协议-OSPF
    • Router ID
      • OSPF路由器身份的标识
      • 32位的值
        • 类似于IP地址格式,但是并不是IP地址
    • 邻居
      • 通过OSPF接口向外发送Hello报文,用于发现邻居
      • 当对方的参数一致,协商成功以后就会形成邻居关系
        • 状态达到2-Way
    • 邻接
      • 形成邻居关系以后,双方并不一定能成为邻接关系,需要根据网络类型来定
      • 只有当双方成功交换DD报文,同步了LSDB以后,才真正意义上形成邻接关系
        • 状态达到FULL状态
  • 邻居发现
    • 4.3、链路状态路由协议-OSPF
    • 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
    • 如果路由器发现接收的Hello报文邻居列表中有自己的Router ID,则认为和邻居建立了双向链接,表示邻居关系已经建立
      • 如果要验证Hello报文是否合法,要注意以下几点
        • 网络类型
          • 子网掩码的字段在接收的Hello报文中
            • 如果是广播型、点到多点、NBMA类型,网络掩码必须和接收端口掩码一致
            • 如果是点到点类型或者虚链路,网络掩码则不检查
        • Hello Interval字段
          • Hello报文的Hello Interval字段必须和接收端口是一致的
        • Router Dead Interval
          • 死亡时间要和接收端口是一致的
        • Options
          • 可选项中E-bit必须和相关区域配置一致
      • 只有满足这四个条件才能说明Hello报文是合法的
  • 数据库同步
    • 4.3、链路状态路由协议-OSPF

 

  • 4.3、链路状态路由协议-OSPF
  • 数据库同步是连接关系确立以后进行的
    • 连接状态开始变成ExStart,RTA和RTB分别去发送第一个DD报文,都宣告自己为主路由器
      • RTA和RTB分别发送一个DD报文后,通过Router ID对比选择自己为主路由器
        • Router ID越大越优先
          • RTB为主路由器
          • RTA为非主路由器
      • RTA向主路由器回复一个DD报文,来确认它是主路由器,使用的***是Y***
      • 接下来开始发送DD报文,状态从Exstart变成Exchange
        • DD报文主要包含LSDB当中摘要的信息,使用的***是RTB的***
      • 如果RTB和RTA之间的数据库是同步的,状态会之间转为FULL
      • 如果两者状态是不同步的
        • EG
          • RTB数据库中有RTA缺少的,RTA则会发送一个LSR报文进行请求获得缺少的信息,状态转位Loading
          • RTB通过LSU报文回复它详细缺少的内容
          • 最终RTA会回复一个确认收到的报文,状态由Loading状态转位Full状态
      • 最后建立了连接关系,数据库完成同步
  • 路由器使用DD报文来进行主从路由器的选举和数据库摘要信息的交互
    • DD报文包含LSA的头部信息,用来描述LSDB的摘要信息
  • LSR用于向对方请求所需的LSA
  • LSU用于向对方发送其所需要的LSA
  • LSACK用于向对方发送收到LSA的确认
  • OSPF支持的网络类型
    • 4.3、链路状态路由协议-OSPF
    • 广播类型
      • 缺省情况下,OSPF认为以太网络的网络类型是广播类型
    • 点到点类型
      • PPP、HDLC的网络类型是点到点类型
    • 4.3、链路状态路由协议-OSPF
    • 非广播多路访问(NBMA)
      • 缺省情况下,OSPF认为帧中继、ATM的网络类型是NBMA
    • 点到多点
  • DR&BDR
    • 4.3、链路状态路由协议-OSPF
    • 每一个含有至少两个路由器的广播型网络和NBMA网络,都有一个DR和BDR
      • DR可以减少广播型网络中的邻接关系的数量
        • Eg
          • 图中一共有6个邻接关系
      • DR
        • 如果指定一个DR,其他路由器都由DR去建立邻接关系,DR就可成为该广播网络的中心点
      • BDR
        • DR的备份
        • DR和BDR也是邻接关系
      • 其他路由器只于DR和BDR建立邻接关系,DR和BDR也是邻接关系,所以只有5个邻接关系,从6减少到5
  • DR&BDR选举
    • 4.3、链路状态路由协议-OSPF
    • DR
      • DR是基于端口的DR优先级的值进行选举的
        • 优先级的取值范围是0~255,值越高越优先
          • 如果接口优先级为0,表示该接口不会参与DR和BDR选举
        • 如果优先级相同,则比较Router ID,值越大,越优先
    • BDR
      • 为了给DR做备份,广播网络中还会选举一个BDR
    • 选举机制
      • 选举机制过程中,选举是抢占形式
        • 如果DR消失了,BDR变为DR,并且重新选举一个BDR
        • 如果原先DR消失后再次出现,则不能再次成为DR
    • 数据链路层
      • 越小越优先
    • 网络层协议
      • 越大越优先
  • OSPF区域
    • 4.3、链路状态路由协议-OSPF
    • OSPF区域
      • 多区域
        • 如果设置多区域,一定要有区域0,因为区域0是骨干区域。
          • 其他区域如果想通信,必须与骨干区域相连,通过骨干区域来传递报文,然后进行通信
      • 单区域
        • 如果设置单区域,则设置该区域为骨干区域,为区域0
    • 每个区域都维护一个独立的LSDB
    • Area 0
      • Area 0是骨干区域,其他区域都必须与此区域相连
    • ABR
      • 处于两个区域交界处的设备
        • Eg
          • 既属于区域1,也属于区域0
      • ABR同时拥有两个LSDB,因为它既属于区域1,又属于区域2,只不过彼此区域之间的LSDB是互相独立的
    • ASBR
      • 一边属于区域内的,另外一边是处于区域外的路由器
  • OSPF开销
    • 4.3、链路状态路由协议-OSPF
    • OSPF基于接口带宽计算开销
    • OSPF的开销公式为带宽参考值/带宽
      • 带宽参考值默认为100M
        • 我们现在接口带宽已经变得很大了,有很多大于100M,所以计算开销时,带宽参考值已经不足以去进行精确的计算
        • 要想改变OSPF开销,有两种方法
          • 改变带宽参考值
            • 使带宽参考值变大
            • 可以通过bandwidth-reference命令来设置带宽参考值
          • 直接改变开销
            • 配置命令:Ospf cost 20
  • OSPF配置
    • 4.3、链路状态路由协议-OSPF
    • OSPF配置
      • 1、配置设备Router ID
        • Router ID可以自行配置
        • 没有配置Router ID,则会自行选取环回口的地址来设置
          • 如果有设置了多个环回口,则选择最大的环回口进行设置
          • 如果没有环回口地址,则选择接口地址来进行设置
      • 2、划分区域
      • 3、宣告地址
        • 网段
        • 反掩码
          • 和掩码状态相反
            • 将1变为0,将0变为1
  • 配置验证
    • 4.3、链路状态路由协议-OSPF
  • OSPF认证
    • 4.3、链路状态路由协议-OSPF
    • 华为ARG3系列路由器运行OSPF时,支持两种认证方式
      • 区域认证
      • 接口认证
        • 接口认证优先级高于区域认证
        • 配置命令
          • Ospf authentication-mode 认证模式 用户名 密码
    • 配置OSPF认证时,一定要两端都启用认证功能
      • 如果两端都不匹配,那么邻居关系无法建立成功,因为彼此之间数据是不通过认证的
  • 配置验证
    • 4.3、链路状态路由协议-OSPF
  • 总结
    • OSPF Hello报文中Router Dead Interval字段的作用是什么?
      • Hello报文中的死亡间隔时间是Hello间隔的四倍,在广播型网络中缺省是40s
      • 如果在此时间没有收到邻居发来的Hello报文,则认为邻居失效
    • 在广播网络中,DR和BDR用来接收链路状态更新报文的目的是什么?
      • 链路状态更新报文
        • 接收组播地址
          • 224.0.0.6
        • 发送组播地址
          • 224.0.0.5