您的位置:首页 > 其它

OSPF(一)OSPF协议简介

2020-03-14 18:17 507 查看

文章目录

  • OSPF
  • OSPF简单工作原理
  • 邻居状态机
  • Router ID、邻居与邻接
  • Router ID
  • 邻居与邻接
  • 数据库同步
  • 建立完全邻接关系
  • LSA
  • OSPF支持的网络类型
  • OSPF单区域简单配置
  • OSPF专题简介

    OSPF协议的内容较多,所以我将做一个专题来讲解。本文是OSPF协议专题的第一篇文章,主要是总体的简单的介绍OSPF协议,然后在后面的文章当中,再去逐个深入介绍OSPF协议中的比较重要的概念

    前言

    上一篇文章常见路由协议中我主要列出了一些常见的协议以及分类。还简单的讲解了静态路由,那么我们知道静态路由的配置需要管理员手动来配置,相当于管理员用笔一笔一划的在绘制一张地图。但是在面对比较大型的网络拓扑时,静态路由就显得比较捉襟见肘。此时动态路由便显现了他的优势。

    动态路由对比静态路由的优劣势

    优势

    1. 无需管理员手工维护,减轻了管理员的工作负担。
    2. 在路由器上运行路由协议,使路由器可以自动根据网络拓朴结构的变化调整路由条目;
    3. 网适用于络规模大、拓扑复杂的网络

    劣势

    1. 占用了网络带宽
    2. 占用计算资源

    OSPF

    在上一篇文章中:RIP协议,我也极为简洁的介绍了一下RIP协议,不详细介绍的原因是RIP协议目前已经逐步被淘汰,取它而代之的正是OSPF协议。

    开放式最短路径优先协议----OSPF(Open Shortest Path First)

    RIP带来的问题:

    RIP特性 带来的问题
    逐跳收敛 收敛慢,故障恢复时间长
    传闻路由更新机制 缺少对全局网络拓扑的了解
    最多有效跳数为15 环形组网中,使远端路由不可达
    以“跳数”为度量 存在选择次优路径的风险

    解决方案:

    RIP的问题 优化或解决的方式(OSPF特性)
    收敛慢,故障恢复时间长 “收到更新->计算路由->发送更新” 改为“收到更新->发送更新->计算路由”
    缺少对全局网络拓扑的了解 路由器基于拓扑信息,独立计算路由
    最多有效跳数为15 不限定跳数
    存在选择次优路径的风险 将链路带宽作为选路参考值

    OSPF是一种基于链路状态的路由协议(LS)(根据链路状态做参考),它从设计上就保证了无路由环路。OSPF支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路。OSPF还利用区域间的连接规则保证了区域之间无路由环路。
    OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化。
    OSPF可以解决网络扩容带来的问题。当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适用于大中型网络。OSPF可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过认证才能进行交换。

    优点:

    无环路 1.用SPF算法 2.自己计算得知(每个OSPF路由器都知道整个区域的拓扑情况)(RIP是传闻式更新)
    收敛快 1.使用SPF算法 2.OSPF收到链路状态信息,立即发送给其他人,再统一处理(RIP收到路由信息以后,自己处理完,周期到了发送给其他人)(举例:5桶水份给5个人煮开。RIP:A拿到5桶水,煮开自己的那桶,再把其他的水交给B…. OSPF:把水先分给每个人,再一起煮开。)
    扩展性好 OSPF支持多种路由协议一起协同工作,区分内部路由和外部路由(划分不同的区域)(RIP统一,不知道谁是外部内部)
    支持认证(安全性好) 两种认证:区域认证、接口认证(举例:一块区域,三个路由器做了区域认证,一个路由器没有做认证,则该路由器被其他路由器排除在外。它的路由一概不理。)(接口认证优先级大于区域认证:举例:两个路由器没有开启区域认证,但是开启了接口认证,那么他们也可以通信)

    OSPF报文

    OSPF报文封装在IP报文头部,协议号为89。

    字段 作用
    Version 对于当前所使用的OSPFv2,该字段的值为2。v3的版本支持IPv6
    Type OSPF报文类型。有HELLO、DD等
    Packet length 表示整个OSPF报文的长度,单位是字节。
    Router ID 表示生成此报文的路由器的Router ID。
    Area ID 表示此报文需要被通告到的区域。
    Checksum 校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
    Auth Type 为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
    Authentication 认证所需的信息。该字段的内容随AuType的值不同而不同。

    更新方式

    单播:单播更新为特殊情况,要手工配置
    组播:默认更新方式

    报文类型

    OSPF报文类型有5种,每种报文都使用相同的OSPF报文头部。分别是:

    Type 报文名称 报文功能
    1 Hello 发现和维护邻居关系
    2 Database Description 交互链路状态数据库摘要
    3 Link State Request 请求特定的链路状态信息
    4 Link State Update 发送详细的链路状态信息
    5 Link State Ack(LSAck 发送确认报文(注意与LSA做区别)

    注意:DD、LSU、LSR、LSACK。只有LSU携带LSA的详细信息,其他都只是头部信息。

    OSPF简单工作原理

    1. 邻居建立

      路由器之间发现并建立邻居关系。
    2. 同步链路状态数据库

      每台路由器产生并向邻居泛洪链路状态信息,同时收集来自其他路由器链路状态信息,完成LSDB(Link State Database)的同步。
    3. 计算最优路由

      每台路由器基于LSDB通过SPF算法,计算得到一棵以自己为根的				SPT(Shortest Path Tree),再以SPT为基础计算去往各目的网络的最优路由,并形成路由表。

    邻居状态机

    状态 作用
    down 开启了OSPF但是没有收到任何的OSPF报文,只会发送Hello报文(周期性10s)
    Attempt 此状态只在NBMA网络上存在**(NBMA后面会提一下)**,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为(30s)HelloInterval。如果RouterDeadInterval(死亡)间隔(120s)内未收到邻居的Hello报文,则转为Down状态(相当于死亡,转为死亡状态,初始状态就是死亡状态(没有使用就是死亡)) (简单理解:手工配置了邻居,去找这个邻居,但是邻居还没有恢复你报文) 这种状态很难遇到,作为了解即可。
    Init 接受到了邻居发送的HELLO报文,但是报文中的邻居信息没有存在我。 (最开始A喊:有人吗。B听到了知道A的存在,但是A不知道B的存在。)
    2-Way 邻居状态的最高状态 接受到了邻居的HELLO报文,同时邻居的HELLO报文中存在我。 在DROther(代表了既不是DR、也不是ODR)之间最高只能是2-Way状态 (DR:指定路由器,负责收集分发LSA信息。虚拟出来的路由器,依附在实体路由器的接口上) (BDR:备份路由器,作为DR的备份,虚拟)(DR与ODR都是IP的时候讲的)
    ExStart 形成邻接状态的第一步 开始交互DD报文,选举主从关系(就是选举DR,BDR) 报文不携带LSA头部
    Exchange 主从关系选举完成 还是一样交互DD报文,此时DD报文携带LSA信息。交互完后根据情况进入Loading状态或Full状态。 (此时已经交换目录,然后要不要交换书籍看自己)
    Loading 发现自己的LSDB不存在对方的部分LSA信息,所以发送LSR报文进行请求,接收到LSR的路由器,将回复LSU报文,当发出LSAck报文后进入Full状态
    Full 邻接状态 作为OSPF路由器之间关系的最高状态,代表了LSDB已经同步。

    总结:八种状态,除了Attempt有点特殊,我们作为了解。其他的我们来看一下。首先路由器开启了OSPF之后,最开始处于down状态,然后到2-Way状态这段过程种,路由器都处于邻居的关系中,这个阶段只发送Hello报文。之后三个状态,路由器都处于形成邻接状态的路上。然后到最后Full状态的时候,完成邻接状态。(具体邻居、邻接关系后面还会详细讲到)

    Router ID、邻居与邻接

    Router ID

    概念:OSPF路由器在本AS(自治系统)内的唯一标识(不能重复,重复则一直报错,不能建立邻居关系)。

    组成:32个比特,写法与IP地址相同(点分十进制),但是Router ID可以是路由器没有的ID

    配置:可手动配置;若不手动配置则自动配置。(通常建议手动配置,以防因为地址改变发生的id改变)

    自动配置规则:

    1. Router id会自动获取你配置的第一个IP地址
    2. 如果设备存在多个逻辑接口地址,则路由器使用逻辑接口中最大的IP地址作为Router ID;
    3. 如果没有配置逻辑接口,则路由器使用物理接口的最大IP地址作为Router ID
    4. 在为一台运行OSPF的路由器配置新的Router ID后,可以在路由器上通过重置OSPF进程来更新Router ID

    在实际情况中,Router ID的变化采取稳定大于一些的原则:在设置好了Router ID之后,再去修改,不生效。

    邻居与邻接

    邻居(Neighbor)

    概念:

    相连的路由器,互相知道对方的存在

    状态2-Way的时候建立成邻居关系

    邻接(Adjacency)

    概念:

    相连的路由器,LSDB进行了同步

    只有当双方成功交换DD报文,并同步LSDB后,才形成真正意义上的邻接关系。

    邻居关系和邻接关系演变

    邻居发现


    OSPF的邻居发现过程是基于Hello报文来实现的,我们说首先刚开启OSPF的时候,路由器处于down的状态啊,然后路由器通过Hello报文来发现邻居。

    Hello报文
    组成 作用
    Network Mask 网络掩码 发送Hello报文的接口的网络掩码。 网络掩码不一致会影响建立邻居
    Hello Interval 发送Hello报文的时间间隔,单位为秒。间隔默认为10s,NBMA网络为30s ( 广播型网络上缺省值为10s,非广播型网络如上为30s。) 接收的Hello Interval必须和接受端口的配置一致,不然接受到的Hello报文不合法。
    Options 选项 标识发送此报文的OSPF路由器所支持的可选功能。 具体的可选功能已超出这里的讨论范围。
    Router Priority 接口优先级 发送Hello报文的接口的Router Priority,用于选举DR和BDR。 默认是1,最大值是255
    Router Dead Interval 失效时间 如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效; 单位为秒,通常为四倍Hello Interval。普通40s 、特殊(NBMA)120s 所接收的Hello报文中Router Dead Interval字段必须和接收端口的配置一致。
    Designated Router 指定路由器 发送Hello报文的路由器所选举出的DR的IP地址。 如果设置为0.0.0.0,表示未选举DR路由器。
    Backup Designated Router 备份路由器 发送Hello报文的路由器所选举出的BDR的IP地址。 如果设置为0.0.0.0,表示未选举BDR。
    Neighbor 邻居 邻居的Router ID列表,表示本路由器已经从这些邻居收到了合法的Hello报文。 如果路由器发现所接受的报文邻居列表里面有自己的router i那么就认为已经建立了邻居关系。(路由器到2-way状态)
    • 如果路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。(可重提)

    验证一个接收到的Hello报文是否合法包括:

    • 如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段;
    • 所接收的Hello报文中Hello Interval字段必须和接收端口的配置一致;
    • 所接收的Hello报文中Router Dead Interval字段必须和接收端口的配置一致;
    • 所接收的Hello报文中Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置一致。

    数据库同步

    路由器在建立完成邻居关系之后,路由器下一个状态就到ExStart。这时候便开始进行数据库同步。

    路由器使用DD报文来进行主从路由器的选举和数据库摘要信息的交互。(DD报文的作用:选举主从关系、DD报文包含LSA的头部信息,用来描述LSDB的摘要信(告诉别人我有什么))

    数据库同步详细步骤

    • 邻居状态变为ExStart以后,RTA向RTB发送第一个DD报文,在这个报文中,DD序列号被设置为X(假设),RTA宣告自己为主路由器。

    • RTB也向RTA发送第一个DD报文,在这个报文中,DD序列号被设置为Y(假设)。RTB也宣告自己为主路由器。由于RTB的Router ID比RTA的大,所以RTB应当为真正的主路由器。

    • 主从关系选举完成

      选举条件:

      1. 接口优先级(接口优先级一样则看Router ID)
      2. Router ID:越大越优先
  • (开始信息的交互)

  • RTA发送一个新的DD报文 (从),在这个新的报文中包含LSDB的摘要信息,序列号设置为RTB在步骤2里使用的序列号,因此RTB将邻居状态改变为Exchange。

  • 邻居状态变为Exchange以后,RTB发送一个新的DD报文 (主) ,该报文中包含LSDB的描述信息,DD序列号设为Y+1(上次使用的序列号加1)。

  • 即使RTA不需要新的DD报文描述自己的LSDB,但是作为从路由器,RTA需要对主路由器RTB发送的每一个DD报文进行确认。所以,RTA向RTB发送一个内容为空的DD报文,序列号为Y+1。

  • 发送完最后一个DD报文之后,RTA将邻居状态改变为Loading;RTB收到最后一个DD报文之后,改变状态为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。

  • 建立完全邻接关系


    步骤

    • 假设RTB的LSDB是最新最全的,不需要向RTA请求更新,那么RTB直接进入Full状态。

    • RTA邻居状态变为Loading之后,RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的,而且在本地LSDB中没有的链路状态信息。

    • RTB收到LSR报文之后,向RTA发送LSU报文,在LSU报文中,包含了那些被请求的链路状态的详细信息。RTA收到LSU报文之后,将邻居状态从Loading改变成Full。

    • RTA向RTB发送LSAck报文,用于对已接收LSA的确认。

      若此时RTA一直不发送LSAck报文,则RTB会一直向RTA发送LSU报文
  • 此时,RTA和RTB之间的邻居状态变成Full,表示达到完全邻接状态。

  • 以上就是OSPF一个完整的发现、建立邻居和邻接关系的工作工程。

    LSA

    LSA(Link State Advertisement)是路由器之间链路状态信息的载体。LSA是LSDB的最小组成单位,也就是说LSDB由一条条LSA构成的。

    所有的LSA都有相同的头部,关键字段的含义如下:

    字段 作用
    LS age 此字段表示LSA已经生存的时间,单位是秒。相当于年龄
    LS type 此字段标识了LSA的格式和功能。常用的LSA类型有五种。1、2、3、5、7(后面文章会详细具体讲到)
    Link State ID 此字段是该LSA所描述的那部分链路的标识,例如Router ID等。(Type不同,描述的信息不同)
    Advertising Router 此字段是产生此LSA的路由器的Router ID。
    LS sequence number 此字段用于检测旧的和重复的LSA。

    OSPF支持的网络类型


    网络类型 解释 举例
    广播型网络 支持两台以上路由器,并且具有广播能力的网络 多个用户共享同一通信信道。在网络中只有一个通信信道,由这个网络中所有的主机所共享的 一个含有三台路由器的以太网就是一个广播型网络的例子
    点到点网络(P2P) 两台路由器直接相连的网络(用光纤和双绞线的是广播网络) 串行链路(s口) 一个运行PPP的64K串行线路就是一个点到点网络的例子
    NBMA网络 非广播-多路访问网络(Non-Broadcast Multiple Access) NBMA用来描述如X.25和帧中继这类本身并不具有支持广播和多播能力的多路访问网络
    点到多点网络 (P2MP) (Point To Multi-Points) 将整个网络看成是一组点到点网络 对于不能组成全连接的网络应当使用点到多点方式,例如只使用PVC的不完全连接的帧中继网络。
    • 缺省情况下,OSPF认为以太网的网络类型是广播类型,PPP、HDLC的网络类型是点到点类型。
    • 缺省情况下,OSPF认为帧中继、 ATM的网络类型是NBMA。
    • OSPF可以在不支持广播的多路访问网络上运行,此类网络包括在hub-spoke拓扑上运行的帧中继(FR)和异步传输模式(ATM)网络,这些网络的通信依赖于虚电路。OSPF定义了两种支持多路访问的网络类型:非广播多路访问网络(NBMA)和点到多点网络(Point To Multi-Points)。
    • NBMA:在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置。NBMA方式要求网络中的路由器组成全连接。
    • P2MP:将整个网络看成是一组点到点网络。对于不能组成全连接的网络应当使用点到多点方式,例如只使用PVC的不完全连接的帧中继网络。

    扩展

    • MA网络是指multiple access多路访问网络。(MA=NBMA+广播式网络),多路访问是指在一条链路上有多个访问点,区别于点到点(P2P)或点到多点(P2MP)的网络。

    OSPF单区域简单配置


    配置内容:

    [RTA]ospf [process id] [router-id 1.1.1.1]   //使能OSPF,在该命令中可以配置进程ID,若不配置则进程ID缺省为1;配置Router ID,若不配置则使用全局Router ID,中括号中可写可不写。
    [RTA-ospf-1]area 0 //进入骨干区域 ,(0为0.0.0.0,0为简写。Area 1为0.0.0.1与ip写法一样)
    [RTA-ospf-1-area-0.0.0.0]network [相邻网段] [反子网掩码] //宣告网络,并开启接口OSPF功能。

    验证:

    display ospf peer
    用于查看邻居相关的属性,包括区域、邻居的状态、邻接协商的主从状态以及DR和BDR情况。

    [RTA]display ospf peer
    
    ​     OSPF Process 1 with Router ID 1.1.1.1 //ospf进程号1,Router ID为1
    
    ​         Neighbors                   //邻居
    
    Area 0.0.0.0 interface 192.168.1.2(GigabitEthernet0/0/0)'s     //在Area 0的区域这个接口下邻居有谁
    
    neighbors                                          //邻居有谁
    
    Router ID: 2.2.2.2     Address: 192.168.1.1              //有一个Router ID2的路由器,IP地址是192.168.1.1
    
    State: Full Mode:Nbr is Slave Priority: 1             //邻接状态:full、模式:邻居是从(主从关系),优先级:1
    
    ​        邻居是主:MASTER
    
    DR: 192.168.1.2 BDR: 192.168.1.1 MTU: 0     // DR(从IP地址看是自己)、BDR(从IP地址看是Router 2的路由器)
    
    ​       与上面主从关系对标
    
    Dead timer due in 40 sec                  //死亡时间40s
    
    Retrans timer interval: 5                   //倒计时,会一直变
    
    Neighbor is up for 00:00:31                //邻居起来多久了,计时。
    
    Authentication Sequence: [ 0 ]              //认证号,没有认证是0
    • 点赞
    • 收藏
    • 分享
    • 文章举报
    TKE_Skye 发布了15 篇原创文章 · 获赞 22 · 访问量 2986 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: