在之前的介绍中,可以看到单区域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。

  1. two-way关系建立以后,路由器之间会考虑是否建立邻接关系,这决定于邻居路由器的状态 以及网络的类型。如果网络的类型是广播或者非广播,那么仅仅会在DRBDR路由器之间建立邻接关系。在其他类型的网络中(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. (1)A ---(Hello)---> B; B -> INIT
  2. (2)B ---(Hello)---> A
  3. (3)A,B -> 2WAY
  4. ----------------------------------
  5. (4)
  6. A <-> DR;
  7. B <-> DR;
  8. A,B -> EXSTART
  9. (5)
  10. Judge: [A_RID > B_RID]
  11. -> Master: A
  12. (6)
  13. A ---(DBD/DD)---> B;
  14. A,B -> EXCHANGE
  15. (7)
  16. B ---(DBD/DD)---> A;
  17. ······
  18. A ---(LSR)---> B;
  19. A,B -> LOADING
  20. (8)
  21. B ---(LSU)---> A;
  22. A ---(LSAck)---> B;
  23. ······
  24. (9)
  25. A,B ---> FULL

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

注意,只有在进入FULL状态之后,也就是同步了所有LSA的信息之后,建立了邻居关系,OSPF路由选择才能正常运行。

路由器的最终状态,要么是2WAY,要么是FULL,其他状态都属于过渡状态。路由器在其他状态不应该停留过久。

2016/8/30

CCNA学习指南 -开放最短路径优先OSPF(多区域部分)的更多相关文章

  1. CCNA学习指南 -开放最短路径优先OSPF(单区域)

    在上个世纪九十年代撰写的<TCP/IP协议详解 卷一:协议>的动态选路中,内容大部分还是介绍 RIP路由选择信息协议,在互联网络如此发达的今天,RIP因为它的局限性逐步被OSPF取代. 在 ...

  2. 重拾IP路由选择:CCNA学习指南中的IP路由选择

    IP路由选择技术 是网络技术的核心部分,也是目前研究的热点,其中的 动态路由选择协议 比如RIPv1,RIPv2,OSPF等,解决了数据在网络中转递的诸多问题. 在TCP/IP协议详解的学习过程中,我 ...

  3. 开放式最短路径优先OSPF

    1.OSPF基本知识 OSPF作为基于链路状态的协议,解决了RIP在收敛慢,路由环路,可扩展性差等问题,还有以下优点: 采用组播方式发布报文,可以减少对其他不运行ospf路由器的影响 ospf直尺无类 ...

  4. ccna学习指南第七版

    1.加电post自检    闪存查找ios 可随时从命令行进入设置模式,为此可在特权模式下输入setup    ctrl+c退出特权模式 6.2cli   命令行界面 进入cli router> ...

  5. CSS Flexbox 学习指南、工具与框架

    Flexbox 是一种更有效的布局方式,它能更好的分配容器空间,并控制项目的对齐.虽然,掌握它的理论有些复杂,但幸运的是,我们可以借助开放的网络来学习并逐步掌握它. 在本文中,我们整合了一些最佳的 F ...

  6. spring boot 1.x完整学习指南(含各种常见问题servlet、web.xml、maven打包,spring mvc差别及解决方法)

    spring boot 入门 关于版本的选择,spring boot 2.0开始依赖于 Spring Framework 5.1.0,而spring 5.x和之前的版本差距比较大,而且应该来说还没有广 ...

  7. 全新Wijmo5中文学习指南正式上线

    Wijmo 是一款使用 TypeScript 编写的新一代 JavaScript/HTML5 控件集.它秉承触控优先的设计理念,在全球率先支持 AngularJS,并且支持React.VueJS以及T ...

  8. Civil 3D API二次开发学习指南

    Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...

  9. 笔记——shell脚本学习指南

    <shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...

随机推荐

  1. log4j和commons- logging(好文整理转载)

    一 :为什么同时使用commons-logging和Log4j?为什么不仅使用其中之一? Commons-loggin的目的是为 “所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱( ...

  2. mysql字符串根据指定字符分割

    1.分割函数:SUBSTRING_INDEX('浙江温州-中国电信','-','1') 2.用例(筛选'-'前至少4个汉字的数据) a.数据分布 b.筛选sql select t.mobile_num ...

  3. Javaweb程序打包或exe执行文件

    java程序的打包与发布 这里主要是讲解一下怎样将 Java程序打包成独立运行的exe程序包,以下这种方法应该是最佳的解决方案了.NetDuke的EXE程序包了是使用这种方案制作的.在操作步骤上还是比 ...

  4. Asp.net读取和写入txt文件方法(实例)!

    Asp.NET读取和写入txt文件方法(实例)! [程序第一行的引入命名空间文件 - 参考] System; using System.Collections; using System.Config ...

  5. T-SQL数据库备份

    /*1.--得到数据库的文件目录 @dbname 指定要取得目录的数据库名 如果指定的数据不存在,返回安装SQL时设置的默认数据目录 如果指定NULL,则返回默认的SQL备份目录名 */ /*--调用 ...

  6. vue.js(一)

    之前看过一点vue.js但是知识点没做记录,现在也差不多不记得了,今天把以前看过的翻一遍,顺便提炼一下知识点 注意:下面的所有与vue相关的标签.指令都是写在id="app"的di ...

  7. 洛谷P1373 小a和uim之大逃离 dp

    正解:dp 解题报告: 传送门! 同样是看到列表发的题解就想着跟着做下dp的题目趴 然后发现还挺难的,,,反正我只大概想到怎么转移但是初始化什么的都不会TT 所以还是大概说下QAQ 首先可以想到设f[ ...

  8. day11(jsp入门&Cookie&HttpSession&一次性图片校验码)

    day11 JSP入门   1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. ...

  9. PAT 1109 Group Photo[仿真][难]

    1109 Group Photo(25 分) Formation is very important when taking a group photo. Given the rules of for ...

  10. 2016ACM/ICPC亚洲区沈阳站 Solution

    A - Thickest Burger 水. #include <bits/stdc++.h> using namespace std; int t; int a, b; int main ...