zoukankan      html  css  js  c++  java
  • CCNA学习指南 -开放最短路径优先OSPF(多区域部分)

    在之前的介绍中,可以看到单区域OSPF对于古老的RIP的优点:

    • 路由选择更新流量减小
    • 使用与大型网络和链路速度不一样的网络

    OSPF能够在LSDB中呈现网络拓扑结构,这使得它汇聚的速度远快于RIP。

    但是,单区域的OSPF存在严重的可拓展性问题,首先单区域内的路由器众多,存在的链路数目也是非常多,那么当链路状态发送改变的时候,就需要全部的路由器重新计算LSDB,这无疑是复杂而又繁琐的,占用了大量的路由器CPU时间和内存。此外不要忘记,还有路由表,这使得内存更加不堪重负。
    考虑到这些,单区域OSPF不适用于大型网络的原因就是它的可拓展性的限制。它将所有的路由器划分到一个区域中,使得每一台路由器都要处理大量LSA。

    如何解决这个问题呢?好在OSPF也提供对网络分区域的方法,它支持将一个大型互联网络划分成易于管理的小块。

    OSPF分区域的优点:耗用内存小,处理器开销小,路由表规模小,汇聚更快,可拓展性好。

    • 区域内部的路由器不要再计算和存储整个网络的拓扑结构,即不用再计算整个网络的LSDB。因为它们只需要知道当前区域内的链路状态信息,这极大的降低了使用的内存。
    • 对于区域内部的路由器来说,当别的区域链路发生变化的时候,不用重新计算LSDB;当且仅当所属区域的拓扑发生变化的时候,才需要重新计算。这样做降低了处理器的开销。
    • 由于可以在区域边界汇总路由,所以路由器的路由选择表规模比使用单区域的时候小的多。

    多区域OSPF简介

    在多区域的OSPF中路由器的各种类型:主干路由器,内部路由器,区域边界路由器(ABR),自主系统边界路由器(ASBR)。

    链路状态通告LSA,描述了路由器及其直接相连的网络,路由器彼此交换LSA以获悉完整的网络拓扑,这让所有路由器的拓扑数据库LSDB都一样。利用LSA建立LSDB之后,将LSDB的内容作为Dijkstra算法的输入,计算得到最短路/最佳路径,添加到路由表项中。

    建立邻居关系的条件

    发现邻居之后,必须建立邻居关系,这样才能够与邻居交换路由信息LSA。需要经过以下两个步骤:

    • 双向通信,这是使用Hello协议进行的。
    • 数据库同步,在此期间交换三种分组:1)数据库描述分组(DD); 2)链路状态请求分组(LSR); 3)链路状态更新分组(LSU)。

    数据库同步之后,就建立了邻居关系。

    相邻路由器想要建立邻居关系,以下的内容必须相同:

    • 区域ID
    • 子网
    • Hello定时器和失效定时器
    • 身份验证方法(如果配置了)

    何时建立邻居关系取决于网络类型,如果是点对点的,只要两台路由器配置了正确的信息,那么就将建立邻居关系。
    如果是 广播多路访问网络,那么OSPF只与DR或者是BDR建立邻居关系。

    OSPF路由器类型

    所有接口都属于同一个区域的,我们称之为内部路由器,它们所有的接口都属于同一个区域。
    配置多区域路由器的时候,必须配置一个主干区域,即区域0.在区域0内的路由器称为主干路由器,有的完全属于区域0,有的则是 ASBR,ABR 这种不完全属于区域0的。

    注意!为什么要设置区域0:

    第一:区域防环,OSPF在区域内防环机制是靠SPF路由算法(树型),那OSPF区域间防环如何做的呢??那如果没有一个骨干区域,路由就可能会从一个区域传出去,再从这个区域传进来,这样环路就无法防止了。骨干区域就是实现这个功能,可以理解为“OSPF 的毒向逆转”,即路由从一个区域传过来的,绝不会从该区域再出去。
    第二:路由优化,很容易想像有AREA 0,所有常规区域的路由必须从骨干区域获得更新,而常规区域之间是不会交互LSA更新。即不用形成一个FULL MESH的结构,以减少路由表的size。

    ABR

    当一个路由器的不同接口,连接到两个不同区域的时候,这样的路由器称为 区域边界路由器ABR。
    ABR 属于多个OSPF区域,它在拓扑数据库LSDB中维护来自所有直连区域的信息。但不在区域间分享拓扑信息。
    ABR 会将路由选择信息从一个区域转发到另外一个区域(通过第三第四类LSA),这里的核心概念是:ABR 分隔LSA泛洪区(即LSA泛洪只在区域内进行),是主要的区域地址汇总点,通常提供默认路由,同时维护其连接的每个区域的链路状态数据库(也就是说,它的LSDB中拥有来自多个区域的LSA路由更新)。

    ASBR

    当一个路由器的不同接口,连接到两个或两个以上不同自治系统的时候,这样的路由器称为 自治系统边界路由器ASBR。
    ASBR至少有一个接口连接到外部网络(其它的AS)。
    运行的路由器选择协议不是OSPF的网络,被称为外部网络。ASBR通过将其从外部网络获取的选择信息,注入OSPF(通过第五类LSA)。
    ASBR 并不会自动在 OSPF路由选择进程 和 外部网络的路由选择进程 之间进行路由选择学习的交换。这种路由选择是通过重分发进行的

    链路状态通告LSA

    路由器的LSDB链路状态数据库由链路状态通过组成。LSA大致分为5类(其实不止)。

    LSA的分类

    第一类LSA:称为路由器链路通告(RLA),由每台路由器向其所属区域的其他路由器发送。包含路由器所连接的当前区域的链路状态。如果路由器有多个接口连接到不同的区域,那么它将分别发送针对各个区域的一类LSA。
    第二类LSA:称为网络链路通告(NLA),是由指定路由器DR生成的,DR使用它来发送网络中其他路由器的状态信息。注意:2类LSA被洪泛到当前区域,但不会洪泛到其他的区域,也就是说,ABR分割LSA洪泛区。
    第三类LSA:称为汇总链路通告(SLA),是由边界区域路由器ABR产生的,ABR将它发送到ABR连接的其他区域,3类LSA通告网络,并通告前往主干区域 区域0的区域间路由。
    第四类LSA:有区域边界路由器ABR生成,专门用于告诉其他的OSPF区域如何前往ASBR.
    第五类LSA:称为外部链路通告,由自主系统边界路由器发送用于通告前往OSPF自助系统外的路由,将传遍整个OSPF自主系统。

    明白各种LSA及其用途很重要,由上面的介绍可以知道:

    • 第一类第二类用于区域内的路由器进行传播。
    • ABR边界区域路由器 1)维护它连接的每个区域的LSDB 2)用于 从区域M获悉到的 路由汇总信息 通告给区域0 或者相反。
    • 在接收到 ASBR 通告的 第5类LSA 之后,ABR 将 第四类LSA 洪泛到区域0,让区域内的所有路由器都知道如何前往ASBR。

    OSPF Hello协议

    Hello协议向邻居提供大量的信息,默认的情况下,邻居每个10s就交换以下信息:

    • 路由器ID:RID,最大活动IP地址,如果配置了loopback interface,则为最大的 interface address;否则使用最大的物理接口地址。
    • Hello间隔和失效间隔:Hello时间指的是Hello分组发送的时间间隔,一般默认为10s。失效时间指的是,时隔多长时间没有收到来自邻居的Hello报文之后确认邻居失效,默认为Hello时间的四倍。
    • 邻居列表:发送Hello分组的路由器 的所有邻居的 RID。一般存储于邻居关系数据库内。邻居的定义是:属于同一个子网,使用同一个子网掩码。
    • 区域ID:所属区域。
    • 路由器的优先级:一个8bit的值,用于选举DR和BDR,在点到点链路上不设置。
    • DR的IP地址
    • BDR的IP地址
    • 身份验证信息(如果配置了)

    注意,每个OSPF路由器维护两个数据库,一个是我们经常提到的LSDB,另外一个是 邻居关系数据库:当路由器接收到另外一个路由器发送的Hello报文的时候,将Hello内的信息加入邻居关系数据库。

    之前有提到,在邻居发送的Hello分组中,如果想要建立 邻居关系,以下信息必须相同:

    • Hello定时器值
    • 失效定时器值
    • 区域ID
    • OSPF区域类型
    • 子网和身份验证信息(如果配置了的话)

    否则不能建立邻居关系。

    邻居状态

    对OSPF进行配置验证以及故障排除,必须了解OSPF在建立 邻居关系 的时候经历的各种状态。

    我认为可以大致的分为两个部分,一个是使用Hello协议 通过组播地址 建立起普通的关系,即2WAT状态;一个是交换LSA,含LSDB的信息 来 同步数据库,即FULL状态。

    假设此时有两台路由器A与B 想要建立起邻接关系,那么它们之间将会有八种状态:

    第一步:进入2WAY状态

    一开始,两台路由器都属于DOWN状态。
    A先发送Hello报文,B接收了它,把A和Hello内的信息加入邻居关系数据库。
    B进入INIT状态,并向A发送Hello报文。
    A收到来自B的Hello报文,加入邻居关系数据库,双方进入 2WAY状态。

    INIT状态:B已经收到了A的Hello报文,将A加入邻居关系数据库,但是此时A发送的Hello报文尚未有B的信息(B的RID),这表明还未建立双向联系。

    建立双向联系之后,在广播多路访问网络中,开始选举DR和BDR。

    当two-way关系建立以后,路由器之间会考虑是否建立邻接关系,这决定于邻居路由器的状态 以及网络的类型。如果网络的类型是广播或者非广播,那么仅仅会在DR和BDR路由器之间建立邻接关系。在其他类型的网络中(NBMA),邻接关系只会在邻居路由器之间建立。
    

    第二步:进入FULL状态

    选举完DR和BDR之后,进入 预启动EXSTART状态为发现有关互联网络的链路状态信息(LSA) 并为创建LSDB做好了准备
    在预启动阶段,DR和BDR已经和区域中的其他路由器建立了邻居关系。在每台路由器和DR(BDR)之间,建立的是 主从关系:RID 较大的为主,主动发起交换。交换完DBD(数据库描述)分组之后,路由器 进入EXCHANGE交换状态。

    此时,A向DR发送了第一个DB报文,B向DR发送了第二个DB报文,DB报文中的RID较大的那个(比如 A的RID > B的RID)成为Master,A将主动发起同B的交换。

    处于交换状态的时候,A和B 使用 DD/DBD数据库描述分组 进行交换 路由选择信息,还可能发送链路状态请求LSR,和链路状态更新。
    当路由器A开始发送LSR之后,进入加载状态(LOADING).

    当A路由器 处在LOADING状态的时候,向邻居B 发送 链路状态请求(LSR)分组 ,请求对方发送在交换期间遗漏或者受损的LSA。邻居B 使用 LSU链路状态更新分组 进行回应,当前路由器A 则使用LSAck链路状态确认分组进行确认。
    在B收到所有A的LSR的应答之后,A和B的 链路数据库便完全同步了,进入FULL状态。

    整个过程:

    (1)A ---(Hello)---> B; B -> INIT
    (2)B ---(Hello)---> A
    (3)A,B -> 2WAY
    ----------------------------------
    (4)
    A <-> DR; 
    B <-> DR; 
    A,B -> EXSTART
    
    (5)
    Judge: [A_RID > B_RID] 
    -> Master: A
    
    (6)
    A ---(DBD/DD)---> B; 
    A,B -> EXCHANGE
    
    (7)
    B ---(DBD/DD)---> A; 
    ······
    A ---(LSR)---> B; 
    A,B -> LOADING
    
    (8)
    B ---(LSU)---> A;
    A ---(LSAck)---> B;
    ······
    
    (9)
    A,B ---> FULL
    

    2WAY -> 主从关系确定;预准备阶段 -> 交换链路信息(DD/DBD)阶段 -> 加载阶段,用于补全缺失的LSA -> 发送LSAck,代表同步结束 -> FULL。

    注意,只有在进入FULL状态之后,也就是同步了所有LSA的信息之后,建立了邻居关系,OSPF路由选择才能正常运行。
    路由器的最终状态,要么是2WAY,要么是FULL,其他状态都属于过渡状态。路由器在其他状态不应该停留过久。

    2016/8/30

  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5816646.html
Copyright © 2011-2022 走看看