美文网首页
OSPF-开放最短路径优先协议-ipv4

OSPF-开放最短路径优先协议-ipv4

作者: 今夜秋风和 | 来源:发表于2023-06-13 21:33 被阅读0次

    ospf 产生背景及定义

    由于rip 协议存在存在着收敛慢、路由环路、可扩展性差,跳数受限等问题。IETF组织开发了ospf(Open Shortest Path First,开放最短路径优先),ospf 是一个基于链路状态的内部网关协议(Interior Gateway Protoco),分为两个版本,针对ipv4 协议使用的是ospf v2,针对ipv6 协议的使用的是ospf v3,以下是关于ospf v2 的一个介绍。

    ospf 协议中涉及概念

    AS(Autonomous System)

    自治系统(AS)是指一组由同一组织管理的网络,这些网络在逻辑上被视为单个单元,并被分配唯一的ID,在一个自治系统内部,运行同一种协议;

    LSA

    • ospf 在形成邻接关系之间的邻居路由器之间发送链路状态通告(Link State Advertisement),包含了路由器当前邻居路由信息,直连接口信息,不同区域信息;

    LSA 头部

    LSA 头部 使用在DD 数据库描述包和LSU链路状态确认数据包中;

    12.jpg

    字段

    • 老化时间(Link-State Age): 是指自从发出 LSA后所经历的时间(单位:s);路由器生成 LSA 时,这个值为 0 ,随着 LSA 在网络中传输,老化时间逐渐累加。当 路由器 LSDB 中已经有了该条LSA 后,LSA 的老化时间也在递增,当到达 MaxAge(最大老化时间)时,这个 LSA 不在用于路由计算;
    • 类型(Type): LSA类型;
    • 链路状态 ID(Link-State ID): 每种LSA 类型对应不同的描述;
    • 通告路由器(Advertising Router):发出这条 LSA 的路由器的 Router-ID;
    • 序列号(Link-State Sequence Number): LSA序列号,判断LSA的新老;
    • 长度(Length):LSA 的总字节长度;

    LSA 类型

    Router-LSA(Type1)

     - 在本区域中,向DR通告自己的直连接口的状态和Cost 值,在所属的区域内进行扩散,注意的是,Router-LSA 将主机路由作为末梢网络进行通告;
    
    13.jpg
    • 链路状态 ID(Link-State ID): 始发路由器的路由器ID;
    • V 位( Virtual Link Endpoint Bit):如果值为 1 ,表示路由器是 Virtual Link 的端点。
    • E 位(External Bit):如果值为 1 ,表示路由器是 ASBR ;
    • B 位(Border Bit):如果值为 1 ,表示路由器是两个区域的边界路由器。一个路由器连接两个或两个以上的区域,生成的 Type-1 LSA 的 B 位值为 1;
    • 链路数量(Links Number):表示 Type-1 LSA 的 Link 数量;Link 是描述直连接口的,每条 Link 都包含 链路类型 、 链路 ID 、链路数量 、度量值 这些关键信息;
    • 链路类型(Link Type):表示 Link 的类型,OSPF 中有多种网络类型:P2P 、P2MP 、Broadcast 、NBMA ,可以根据接口的协议来判断接口的网络类型。链路类型不同,对应的链路 ID 、链路数据也不同;
    14.jpg
    • 链路ID(Link ID):标识链路连接的对象;
    15.jpg
    • 链路数据(Link Data):不同的链路类型对应的链路数据内容不同;
    16.jpg
    • 度量值(Metric):Cost 值;
    17.jpg

    通过在AR8 0/0/0 接口抓包,通告的LS update 报文如下:

    18.jpg

    Network-LSA(Type2)

    • 在多路访问的网络中,虽然Dother 已经将Type1 类型报文发给DR,但是这些Dother路由器之间并不会建立邻居关系,根本不知道去往对方怎么走,所以还需要DR(Designated Router)将自己本身的全量数据库链路信息发布出来;
    • 在该网络中,DR 会生成 Type-2 LSA ,在区域内泛洪 Type-2 LSA ,会列出 多址网络中所有路由器的 Router-ID ,包括 DR 本身,和这个网络的掩码,并且在所属的区域内传播;


      19.jpg
    • 链路状态 ID(Link-State ID): DR路由器的接口ip 地址;
    • 相连路由器(Attached Router): 所有与DR 形成邻接关系的路由器的路由器ID, 包括DR路由器本身的路由器id;
      在上述网络拓扑中,AR10是DR,在AR10的0/0/0 接口处抓包:


      20.jpg

    Network-summary-LSA(Type3)

    • 现在,经过Type-1 和Type-2 两种LSA,一个区域的Dother 路由器已经完全知道本区域完整的网络拓扑信息,但是如何到达其他区域呢,这就需要Type3 LSA,用来解决区域间路由传递问题,需要由ABR产生,把区域外部的路由通告进来,包括默认路由;


      23.jpg
    • 链路状态 ID(Link-State ID): 通告的网络或子网的ip 地址;
    • 网络掩码(Network Mask):通告的网络掩码或子网地址;

    如图,红色的为area1区域,蓝色的为area 0 区域;

    21.jpg

    AR8 作为ABR,将自己的到达AR9,AR10 的网络以及自己的网络全部通告给area1 区域;
    通过在AR8 的0/0/1 接口上抓包:

    22.jpg

    ASBR-summary-LSA(Type4)

    • 通过Type1,Type2 这两种类型报文,解决了区域内路由的传递问题,通过Type3 类型报文,解决了不同区域之间路由通信问题;这些区域都属于运行同一种ospf 协议的自治系统,那其他自治系统运行的不同协议路由(比如:rip),应该需要怎么引入才能访问外部的自治系统呢?
    • 这就需要Type5类型报文, 由ASBR产生,它可以描述到达外部系统的路由,然后可以在所有ospf区域内泛洪,这样,所有区域路由器都有了外部路由信息,跟ASBR 在一个区域的路由器知道ASBR位置,能确定如何到达外部系统,但是跟ASBR不在一个区域的路由器,并不知道如何到达ASBR,所以,其他区域还得需要知道ASBR位置,由Type4 类型报文产生,由ABR描述到ASBR的路由,通告给除ASBR所在区域的单个区域,这样其他区域就知道了ASBR 位置;
    • Type 4类型报文跟Type3一样,区别:
      1.链路状态 ID( Link-State ID ): 通告的ASBR路由器的路由器id;
      2.网络掩码(Network Mask):没实际意义,设置为0.0.0.0;
    • 如图所示,AR12 是ASBR,它会生成Type5的报文描述外部路由,然后在所有区域泛洪,AR10 跟AR12 直连,属于同一个区域的ABR,它会描述到达ASBR的路由,然后泛洪到Area0,AR8 收到这条路由后,将Type4报文传递给AR11,至此,跟ASBR不在同一区域的其他区域路由器都知道了ASBR位置,就可以访问其他AS ;
    31.jpg

    AS-external-LSA(Type5)

    • 由ASBR产生,描述到AS外部的路由,通告到所有的非末梢区域;


      25.jpg
    • 链路状态 ID(Link-State ID):外部路由的目的网络地址;
    • 网络掩码(Netmask):外部路由的目的网络掩码;
    • E 位 :用来表示外部路由使用的度量值类型,OSPF 有两种外部路由度量值类型,分别是 Metric-Type-1 和 Metric-Type-2 。如果值为 0 ,表示外部路由使用的度量值类型是 Metric-Type-1 ;如果值为 1 ,表示外部路由使用的度量值类型是 Metric-Type-2;
      度量值(Metric):表示外部路由的 Cost ;
    • 转发地址(Forwarding Address ,FA ):到达所通告的目的地数据包应该被转发到的地址;当 FA 为 0.0.0.0 时,那么到达这个外部网段的流量会发送到引入外部路由的 ASBR ;
    • 外部路由标记(External Route Tag):外部路由才能携带的标记,路由策略使用;

    NSSA LSA(Type7)

    • Type-7 LSA 就是非完全末梢区域外部 LSA( Not-So-Stubby Area External LSA ),NSSA 禁止 Area0 的 Type-5 LSA 进入,让区域内泛洪的 LSA 减少了一点,也减小了 NSSA 中路由器内存占用,NSSA 允许自己区域内的路由器引入少量外部路由,这些外部路由引入后,使用 Type-7 LSA 描述,而且 Type-7 LSA 只能在这个 NSSA 内泛洪,不允许进入 Area0 。NSSA 的 ABR 会将 NSSA 内泛洪的 Type-7 LSA 转换成 Type-5 LSA ,让这些外部路由能够在 OSPF 域内传播;
    • 如下图:AR10-AR12 之间为NSSA区域,AR12 产生Type7 的报文,描述外部路由信息:
      1.链路状态id:10.0.0.0
      2.网络掩码:255.0.0.0
      3.通告路由器:10.0.5.5
      4.转发地址:10.0.0.5
    • AR10 会将NSSA LSA 转化为Type 5 报文,在Area0内泛洪,Type5 报文如下:
      1.链路状态id:10.0.0.0
      2.网络掩码:255.0.0.0
      3.通告路由器:10.0.1.1
      4.转发地址:10.0.0.5


      31.jpg
      26.jpg

    网络类型

    点到点网络

    • 单独连接一对路由器,有效邻居可以形成邻接关系;

    广播型网络

    • 可以连接多个设备,例如:以太网;

    非广播多路访问网络

    • 可以连接多个设备,但是没有广播数据包能力;

    点到多点网络

    • 一群点到点链路聚合,不需要选举DR ,BDR ,以单播形式发送包;

    虚链路

    • 没有编号的点到点网络配置,以单播形式发送包;

    区域

    区域产生背景及意义

    • ospf使用多个数据库和复杂算法,耗费路由器更多的内存和CPU, 当网络增大时,容易到达路由器性能极限, 另一方面,LSA 泛洪扩散大量数据链路带来负担;
    • 利用区域来缩小这些不利的影响,区域是一组逻辑上的ospf 路由器和链路,可以有效的把一个ospf 域分割成多个子域 ; 一个区域内部路由器不需要关心外部的网络拓扑;

    区域类型

    • 骨干区域( Backbone Area )
      骨干区域是连接所有其他ospf区域的中央区域,骨干区域通常用Area 0表示,区域间路由必须通过Area 0 进行转发;
    • 常规区域( Normal Area )
      默认情况下,ospf区域被定义为普通区域,除了Area 0,传输区域内路由,区域间路由和外部路由;
    • 末梢区域( Stub Area )
      末梢区域是指只有一个入口和一个出口的区域,网络包中要么是始发地址,要么是终止地址;不允许AS外部LSA在内部进行泛洪的区域,没有Type5,Type4 报文,只通告一条目的地址是0.0.0.0 的默认路由,末梢区域降低了路由器的cpu 和内存占用,提高了性能;
    • 非完全末梢区域( Not-So-Stubby Area )
      允许外部路由通告到ospf自治系统内部,使用Type7 类型报文,只会在NSSA区域进行泛洪;

    路由器类型

    划分了区域后,路由器也分成了和区域相关的几个类型
    

    内部路由器 (Internal Router)

    • 设备的所有接口都属于同一个ospf区域;

    区域边界路由器ABR(Area Border Router)

    • 同时属于两个以上的区域,但其中一个必须是骨干区域,ABR用来连接骨干区域和非骨干区域;

    骨干路由器(Backbone Router)

    • 设备至少有一个接口属于骨干区域,所有的ABR和位于Area0的内部设备都是骨干路由器;

    自治系统边界路由器ASBR(AS Boundary Router)

    与其他AS交换路由信息的设备称为ASBR,ASBR并不一定位于AS的边界,它可能是区域内设备,也可能是ABR。只要一台OSPF设备引入了外部路由的信息,它就成为ASBR;


    image.png

    DR 和BDR 路由器

    DR 和BDR 产生背景

    • 在一个多址网络中,再构建邻居关系时,会产生很多不必要的LSA,n 台路由器中,每台路由器会产生 n-1 条LSA信息+1个网络LSA,总共产生n*n 条LSA通告;
      -多址网络泛洪扩散混乱,一台路由器向它的邻居路由器发出LSA通告,邻居路由器会继续向它的邻居发出LSA,一个网络中会产生重复的LSA;
    28.jpg
    • 为了解决该问题,通过DR 和BDR来管理ospf 区域内网络和区域网络的泛洪扩散,当DR失效时,BDR会成为新的DR,继续再网络中传送数据;


      29.jpg

    DR和BDR选取过程

    前提条件
    • 每台路由器接口都有一个优先级,默认为1,范围再0-255,优先级为0的不能成为DR 或BDR;
    • 当接口再网络中有效时,把DR和BDR的地址设置为(0.0.0.0),等待计时器值设置为路由器无效时间间隔;
    选取过程
    • 在路由器和邻居路由器之间建立双向通信,检查Hello 数据包的优先级,DR,BDR 的地址,所有路由器宣称自己是DR/BDR路由器;
    • 创建一个还没有宣告为DR路由器的路由器子集;
    • 在子集中多台邻居路由器,Hello 数据包BDR包含了各自的接口地址,优先级高的将被选择为BDR路由器; 优先级一样情况下, 具有最高路由器 的router-id 的邻居路由器被选择为BDR ;
    • 同样,选择DR路由器过程跟BDR 过程一样;
    • 如果没有路由器宣告自己是DR,新选取的BDR将作为DR路由器;
    • DR和BDR选取后,其他路由器成为Dother,他们只和DR和BDR建立邻居关系;

    Hello 包

    Hello 包作用

    • 发现邻居路由器;
    • 在两台路由器成为邻居之前,需要通告两台路由器之间相互认可的几个参数;
    • hello 数据包在邻居路由器充当keepalive 角色;
    • 确保邻居路由器之间的双向通信;
    • 用来在一个广播网络或非广播多路访问(NBMA)的网络上选取指定路由器和备份指定路由器;

    广播型网络Hello包交换以及链路状态同步过程

    45.jpg
    邻居关系建立
    • RouterA的一个连接到广播类型网络的接口上激活了ospf协议,并发送了一个hello报文(使用组播地址224.0.0.5)。此时,RouterA认为自己是DR路由器(DR=192.168.100.1);
    32.jpg
    • RouterB启动的较晚,开始处于Down 状态,当收到上一步RouteA发来的Hello包,转为Init 状态,以默认值也在发送Hello报文;
    33.jpg
    • RouterA收到RouterB回应的Hello报文后,知道RouterB 是自己的邻居,于是在下一次发送Hello 包时携带邻居信息,然后进行发送,这样RouterB就看到了自己的接口信息,将邻居状态机置为2-way状态,双向通信会话成功建立,下一步双方开始发送各自的链路状态数据库;
    34.jpg
    主/从关系协商、DD报文交换
    • RouterB首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号Seq=X,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文;
    35.jpg

    1.为了提高发送的效率,RouterA和RouterB通过发送DD报文首先了解对端数据库中哪些LSA是需要更新的;为了保证在传输的过程中报文传输的可靠性,在DD报文的发送过程中需要确定双方的主从关系,作为Master的一方定义一个序列号Seq,每发送一个新的DD报文将Seq加一,作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的Seq;

    • RouterA在收到RouterB的DD报文后,将RouterB的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息);
    37.jpg
    • 由于RouterB的router-id比较大,所以,最终会选定RouterB为master,并将RouterB的邻居状态机改为Exchange,RouteA 为slave,使用RouterB 的序列号传送新的DD报文,传送LSA的摘要,在报文中RouterA将MS=0,说明自己是Slave,当前M=0,RouterA 发送的最后一个报文;
    38.jpg
    • RouterB收到报文后,将RouterA的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=X+1,当前报文中M=0,说明已经是RouteB 发送的最后一个报文了;
    39.jpg
    LSDB同步(LSA请求、LSA传输、LSA应答)
    • RouterB收到最后一个DD报文后,发现RouterA的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RouterA也收到了RouterB的最后一个DD报文,RouterA的数据库也有一些LSA 是自己没有的,将邻居状态机改为Loading状态;

    • RouterB发送LSR报文向RouterA请求更新LSA。RouterA用LSU报文来回应RouterB的请求。RouterB收到后,发送LSAck报文确认;

    42.jpg
    • 上述过程持续到RouterA中的LSA与RouterB的LSA完全同步为止,此时RouterA将RouterB的邻居状态机改为Full状态。当路由器交换完DD报文并更新所有的LSA后,此时邻接关系建立完成;ospf 路由依据LSDB 按照SPF算法计算形成;
    邻居状态机
    • 失效状态(Down):邻居会话的初始状态,用来指明在最近一个RouteDeadInterval 时间内没有收到来自邻居路由器的Hello 数据包;
    • 尝试状态(Attempt):仅适用于NBMA网络上的邻居。当 NBMA网
      络上具有 DR选 取资格的路由器和其邻居路由器相连的接口开始变为有效 (Active)时转换为Attempt状态;
      -初始状态(Init):RouteDeadInterval 时间内收到来自邻居路由器的Hello 数据包;
      -双向通信状态(Two-Way):本地路由器在来自邻居由器的Hello数据包中看到了自己的router-id,双向通信建立;
    • 信息交换初始状态(ExStart): 本地路由器和邻居建立主从关系,确定数据库描述包的序列号,为交换数据库描述包信息左准备,具有最高router-id的路由器选举成为主;
    • 信息交换状态(Exchange): 发送完整的DD报文;
      -信息加载状态(Loading):本地路由器向邻居发送LSR,请求最新的LSA通告;
    • 完全邻接状态(Full):每个路由器的LSDB 已经达到一致状态,

    ospf 实验

    30.jpg

    说明: AR1-AR3 :area1; AR4-AR5: area2; AR3-AR4:area0;

    实验配置

    AR1:
    [Huawei]router id 5.5.5.5
    [Huawei]ospf
    [Huawei-ospf-1]area 1
    [Huawei-ospf-1-area-0.0.0.1]network 172.16.1.0 0.0.0.255
    AR2:
    [Huawei]router id 3.3.3.3
    [Huawei]ospf
    [Huawei-ospf-1]area 1
    [Huawei-ospf-1-area-0.0.0.1]network 172.16.1.0 0.0.0.255
    [Huawei-ospf-1-area-0.0.0.1]network 192.168.1.0 0.0.0.255
    AR3:
    [Huawei]router id 1.1.1.1
    [Huawei]ospf
    [Huawei-ospf-1]area 1
    [Huawei-ospf-1-area-0.0.0.1]network 192.168.1.0 0.0.0.255
    [Huawei-ospf-1]area 0
    [Huawei-ospf-1-area-0.0.0.0]network 192.168.0.0 0.0.0.255
    AR4:
    [Huawei]router id 2.2.2.2
    [Huawei]ospf
    [Huawei-ospf-1]area 0
    [Huawei-ospf-1-area-0.0.0.0]network 192.168.0.0 0.0.0.255
    [Huawei-ospf-1]area 2
    [Huawei-ospf-1-area-0.0.0.2]network 192.168.2.0 0.0.0.255
    AR5:
    [Huawei]router id 4.4.4.4
    [Huawei]ospf
    [Huawei-ospf-1]area 2
    [Huawei-ospf-1-area-0.0.0.2]network 192.168.2.0 0.0.0.255
    [Huawei-ospf-1-area-0.0.0.2]network 172.17.1.0 0.0.0.255
    AR6:
    [Huawei]router id 6.6.6.6
    [Huawei]ospf
    [Huawei-ospf-1]area 2
    [Huawei-ospf-1-area-0.0.0.2]network 172.17.1.0 0.0.0.255

    • AR1的LSDB库信息:
    43.jpg
    • AR1 的路由信息:
    44.jpg

    相关文章

      网友评论

          本文标题:OSPF-开放最短路径优先协议-ipv4

          本文链接:https://www.haomeiwen.com/subject/vxqvedtx.html