OSPF详解

OSPF定义

OSPF(Open Shortest Path First,开放最短路径优先)是IETF(Internet Engineering Task Force,互联网工程任务组)组织开发的一个基于链路状态的自治系统内部网关协议。目前针对IPv4协议使用的是OSPF Version 2。ospf直接工作在ip层之上,ip协议号89,ospf以组播方式发送协议包!

链路状态路由协议使用SPF最短路经优先算法(shortest path first spf)计算和选择路由,这类路由协议只关心网络中链路或接口的状态(up down ip地址,掩码带宽,利用率和时延等),每个路由器将已知的链路状态信息向该区域的其他路由器通告,通过这种方式,网络上的每台路由器对网络结构都会有相同的认识,随后路由器以其为依据,使用spf算法计算和选择路由

spf算法是以自身为根节点计算出一棵最短路径树,在这棵树上由根到各节点的累计开销最小

即由根到各节点的路径在整个网络中都是最优的,这样也就获得了由根去往各个节点的路由。

ospf引入router id概念,ospf区域内的每台路由器的行为都能很好的被跟踪

OSPF协议基本原理

工作过程:邻居发现、路由交换、路由计算、路由维护

1、邻居表:记录所有建立了邻居关系的路由器,包括相关描述和邻居状态。会定期的相互发送hello报文来维护,若在一定的周期内没有收到领居回应的hello报文,则认为邻居路由器失效,将它从邻居表中删除

2、链路状态数据库表(LSDB):此表里包含了网络拓扑中链路状态的通告。。每台路由器在同一个区域内LSDB表一样

3、路由表:在获得完整LSDB表后,进行SPF算法,形成最优路由加入路由表

OSPF路由器间组播

ospf是以组播地址发送协议包,只有加入了ospf区域的接口地址才会接受和发送组播地址发送的ospf报文(224.0.0.6指代一个多路访问网络中DR和BDR的组播接收地址,224.0.0.5指代在任意网络中所有运行OSPF进程的接口都属于该组,于是接收所有224.0.0.5的组播数据包。

重点理解好 属于某一组 和 接收怎样的组播数据包,

比如 DR/BDR属于组播地址为224.0.0.6的组(Group),因此它接收目的地址为224.0.0.6的组播数据包,也就可以理解为何多路访问通过设置DR/BDR可以防止信息过多处理(因为属于某组的接收者(指OSPF接口),只会剥离到二层,而不会进一步处理,也就省去了很多资源浪费)。 )

OSPF支持的网络类型

根据路由器所连接的物理网络不同,OSPF将网络划分为四种类型:广播多路访问型(Broadcast multiAccess)、非广播多路访问型(None Broadcast MultiAccess,NBMA)、点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。

广播多路访问型网络如:Ethernet、Token Ring、FDDI。NBMA型网络如:Frame Relay、X.25、SMDS。Point-to-Point型网络如:PPP、HDLC。

指派路由器(DR)和备份指派路由器(BDR)

在多路访问网络上可能存在多个路由器,为了避免路由器之间建立完全相邻关系而引起的大量开销,OSPF要求在区域中选举一个DR。每个路由器都与之建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。选举DR的同时也选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。

点对点型网络不需要DR,因为只存在两个节点,彼此间完全相邻。 协议组成OSPF协议由Hello协议、交换协议、扩散协议组成。本文仅介绍Hello协议,其他两个协议可参考RFC2328中的具体描述。

当路由器开启一个端口的OSPF路由时,将会从这个端口发出一个Hello报文,以后它也将以一定的间隔周期性地发送Hello报文。OSPF路由器用Hello报文来初始化新的相邻关系以及确认相邻的路由器邻居之间的通信状态。

对广播型网络和非广播型多路访问网络,路由器使用Hello协议选举出一个DR。在广播型网络里,Hello报文使用多播地址224.0.0.5周期性广播,并通过这个过程自动发现路由器邻居。在NBMA网络中,DR负责向其他路由器逐一发送Hello报文。

区域

OSPF协议引入“分层路由”的概念,将网络分割成一个“主干”连接的一组相互独立的部分,这些相互独立的部分被称为“区域”(Area),“主干”的部分称为“主干区域”。每个区域就如同一个独立的网络,该区域的OSPF路由器只保存该区域的链路状态。每个路由器的链路状态数据库都可以保持合理的大小,路由计算的时间、报文数量都不会过大。

共有五种区域的主要区别在于它们和外部路由器间的关系:

标准区域: 一个标准区域可以接收链路更新信息和路由总结。

主干区域(传递区域):主干区域是连接各个区域的中心实体。主干区域始终是“区域0”,所有其他的区域都要连接到这个区域上交换路由信息。主干区域拥有标准区域的所有性质。

存根区域(stub Area):存根区域是不接受自治系统以外的路由信息的区域。如果需要自治系统以外的路由,它使用默认路由0.0.0.0。

完全存根区域:它不接受外部自治系统的路由以及自治系统内其他区域的路由总结。需要发送到区域外的报文则使用默认路由:0.0.0.0。完全存根区域是Cisco自己定义的

不完全存根区域(NSAA): 它类似于存根区域,但是允许接收以LSA Type 7发送的外部路由信息,并且要把LSA Type 7转换成LSA Type 5。

OSPF链路状态公告类型

OSPF路由器之间交换链路状态公告(LSA)信息。OSPF的LSA中包含连接的接口、使用的Metric及其他变量信息。OSPF路由器收集链接状态信息并使用SPF算法来计算到各节点的最短路径。LSA也有几种不同功能的报文,在这里简单地介绍一下:

LSA TYPE 1:router LSA由每台路由器为所属的区域产生的LSA,描述本区域路由器链路到该区域的状态和代价。一个边界路由器可能产生多个LSA TYPE1。

LSA TYPE 2:network LSA由DR产生,含有连接某个区域路由器的所有链路状态和代价信息。只有DR可以监测该信息。

LSA TYPE 3:summary LSA由ABR产生,含有ABR与本地内部路由器连接信息,可以描述本区域到主干区域的链路信息。它通常汇总缺省路由而不是传送汇总的OSPF信息给其他网络。

LSA TYPE 4:Summary LSA由ABR产生,由主干区域发送到其他ABR, 含有ASBR的链路信息,与LSA TYPE 3的区别在于TYPE 4描述到OSPF网络的外部路由,而TYPE 3则描述区域内路由。

LSA TYPE 5:AS External LSA由ASBR产生,含有关于自治域外的链路信息。除了存根区域和完全存根区域,LSA TYPE 5在整个网络中发送。

LSA TYPE 6:multicast OSPF LSA,MOSF可以让路由器利用链路状态数据库的信息构造用于多播报文的多播发布树。

LSA TYPE 7:Not-So-Stubby LSA由ASBR产生的关于NSSA的信息。LSA TYPE 7可以转换为LSA TYPE 5。

OSPF的三张表

1、 邻居列表:列出每台路由器全部已经建立邻接关系的邻居路由器
2、 链路状态数据库:列出网络中其他路由器的信息,由此显示了全网的网络拓扑
3、 路由表:列出通过SPF算法计算出到达每个相连网络的最佳路径

OSPF邻居的有限状态机

1、 down:初始状态,没有收到来自邻居的hello包,在NBMA网络中pollinterval时间发送一次he1lo给邻居。

2、 attempt:只用于NBMA网络,邻居有效(收到邻居的hello)后,hellointerval取代pollinterval来发送hello包。

3、 init: (收到了来自邻居的he1lo)标识着自身邻居表创立完成。

4、 2way: (在邻居的hello包中看见了自己的RID)多路访问网络选取DR/BDR才能往下进行,其他网络无条件往下继续。标识着邻居的邻居表建立完成。

5、 exstart: (协商主从后才能往下进行) RID大的为master,确定DBD的序列号。主先发DBD,从后发DBD。

6、 exchange:交换DBD,也向邻居发送LSR来请求新的LSA。 DBD交换完。

7、 loading:发送LSR请求最新LSA,收到新的LSA,对比LSA的序列号(如果LSDB相同往下)

8、 full:完全邻接。同步完成计算最短路径,加载入路由表。

导致邻接关系建立不起来的可能原因

1、 卡在EDOWN,网络类型与二层网络类型条件不匹配、有ACL阻挡、he1lo和dead时间不-一致、区域ID不-致、认证错误、特殊区域类型不一-致、RID相同。

2、 卡在2way,多路访问网络不能选举DR/ BDR,就是priority 都为0。

3、 卡在exstart,链路两端MTU设置不同,二层MTU,三层MTU。 可以ip ospf mtu-i gnore忽略. 卡在exchange, 11. 0和12.3IOS的LSA格式不兼容。

4、 建立一一个邻接关系

在邻接关系建立过程中0SPF需要使用3种类型的数据包LSR/LSU/DBD。

DBD数据包非常重要,它携带了源路由器LSDB中的所有LSA的描述信息(头部)。这些信息可以让路由器判定LSDB中LSA是否最新,是否完整。

DBD数据包中有3个重要位I (initial)位M(more)位MS (master/slave)位

a) I位:置1说明发送的是第一个DBD包。

b) M位:置1说明发送的不是最后一个DBD包。

c) M/S位:置1说明源路由器为主,0为从。

更新数据包传送的所有LSA必须单独进行确认,确认后从链路状态重传列表删除它们。

a) 显式确认:回送发送-一个LSAck来确认收到那个LSA包。

b) 急式确认:回送包含那个LSA拷贝信息的更新数据包。

主路由器控制着数据库的同步过程。

由于从路由器必须确认每个收到的DBD数据包,因此从路由器总是最先得知同步完成。

OSPF协议报文

OSPF路由的计算过程和邻接关系的建立与维持

OSPF协议路由生成过程

1、生成LSA描述自己的接口状态

每台路由器都根据自己周围的接口状态生成LSA(接口状态up或down)、链路开销、IP地址/子网掩码链路开销与接口带宽成反比

2、同步ospf区域内的每台路由器的LSDB

ospf路由器通过交换LSA来实现LSDB的同步

3、使用spf计算路由

ospf路由器用spf算法以自身为根节点计算出一棵最短路径树

如果通过SPF算法发现到达同一目标的路径cost值相同,就将两条路由同时加入路由表,形成等价路由

一,DR的选举

DR选举过程:

1,本网段的ospf路由器

2,本网段priority>0的ospf路由器

3,所有的priority>0的ospf路由器都认为自己是DR

4,选priority值最大的,若priority值相等,选route-id最大的

DR选举特点:

1,DR是各路由器选出来的,而非人工指定的。

2,DR一旦当选,除非路由器故障,否而不会更换,即便新加入一台优先级比DR搞得路由器,也不换。

3,DR选出的同时,也选出BDR来

二,邻接关系的形成与维持

通过hello报文形成邻接关系

邻居建立后,还需要hello报文进行邻居关系的维持,有两个定时器来进行这项工作:

1,hello time:缺省10s(nbma网络30s)

2,dead time:缺省40s

邻居关系和邻接关系的建立:
1、邻居发现与维护

a、两台路由器以组播的方式(224.0.0.5)发送ospf协议的hello报文(Router ID、相关参数协商信息)。组播地址224.0.0.5表示所有运行ospf路由器都能收到该报文。(224.0.0.5是DR和BDR发送报文给DRother时用,224.0.0.6是DR和BDR监听DRother时用(实验表明都是用224.0.0.5))

b、两台路由器根据收到的报文,进行参数协商,如果验证、区域等参数都设置一致,则认为发现邻居

c、发现邻居后,进行维护。邻居之间周期性(10s)的交互hello报文
在一定时间内,内收到邻居发来的报文,认为邻居正常,反则认为失效。

d、ospf定时器:
hello定时器(10s):接口向邻居发送hello报文的间隔。邻居之间定时器要保持一致,且与路由的收敛速度、网络负荷大小成反比

邻居失效时间 (40s):在邻居失效时间内,如果接口还没有收到hello报文,则宣告邻居无效非广播网络中,每隔30秒发送一次,保持时间120秒

2、邻居和邻接

ospf路由器启动后,便会通过ospf接口向外发送hello报文。收到报文的ospf路由器且报文中参数一致,则双方形成邻居关系

形成邻居关系的路由器不一定都能形成邻接关系,要根据网络类型,只要双方成功交互DD报文,交换LSA并达到LSDB的同步之后,才能真正成为邻接关系

DR、BDR之间为邻接关系(full)(LSA和DD报文)
DR、BDR与DRother之间为邻接
DRother之间为邻居关系(2-way)(hello报文)

3、邻居关系的建立:

i:RTA发送hello报文将DR为置成0.0.0.0,邻居表为空

ii:看对方邻居表是否有自己,没有,将RTA放入邻居表状态设为Init状态,然后比较RouterID,发现自己的比RTA大,将DR设为自己,发给RTA

iii:RTA检查RTB的hello报文,发现邻居表有自己状态设为2-way,并将RTB加入自己的邻居表,再发送hello给RTB

iv:RTB收到RTA的hello报文检查,发现邻居表里有自己,直接将邻居表里RTA状态设为2-way

邻接关系的建立:

如果RTA和RTB有一个是DR或者BDR还要继续建立邻接关系

i:RTA将邻居表里的RTB状态设为Exstar状态,并且发送一个不包含LSA的DD报文,进行主从协商,(Maste路由器的作用是在交换DD报文时,主动发送DD报文的作用)

Seq:序列号,由主设定,第一个包RTA认为自己是主,序列号设为X

I:置为1,表示是RTA发送的初始化的包

M:置为1,表明这不是最后一个包

MS:置为1,表明自己是主

ii:RTB收到DD报文,将邻居表里的RTA设为Exstar状态。比较Router ID,由于自己的比RTA大,所以认为自己是主,序列号置为Y,MS置为1,,I和M也置为1

iii:RTA收到后,比较Router ID确实比自己大,认为RTB为主,并将邻居表RTB的状态设为Exchange状态,并采用RTB设置的序列号Y发送一个带有LSA摘要的DD报文

iv:RTB收到后,也将邻居表RTA的状态设为Exchange状态,并回一个序列号为Y+1的带有LSA摘要的DD报文和RTA交换LSA摘要信息

v:双方收到带有LSA摘要的DD报文后,进行比较,RTB发现RTA的LSA摘要所对应的LSA自己都有,则将邻居表里的RTA设为Full。

vi:RTA发现RTB发来的LSA摘要所对应的LSA自己有缺少的,将邻居表中RTB状态设为Loading,并发送一个LSR报文(包含自己缺少的LSA摘要)。

vii:RTB收到后,将RTA所请求的LSA,以一条或多条LSU报文发给RTA

viii:RTA将收的LSA放入自己的LSDB表中,知道之前请求的所有LSA都获得。

5、ospf邻居状态机:

i:Down:在上一个邻居失效时间内,没有收到任何hello报文

ii:Attempt:只存在于NBMA网络中,当一台设备试图联系自己邻居时,没有收到回应报文时,就会将邻居状态设置为Attempt

iii:Init:表示一台路由器收到另一台路由器的hello报文,但是报文中的邻居表里没有自己的RouterID

iv:2-way:表示一台路由器收到另一台路由器的hello报文,报文的邻居表中有自己的RouterID

v:Exstart:在协商主从时,确定DD报文的序列号,比较MTU。(MTU不一样时停在此状态)ospf mtu-enable //开启MTU比较

vi:Exchange:在交换LSA摘要时

vii:Loading:对方的LSA摘要和自己的LSDB比较后,发现LSA摘要中存在LSDB中没有的

vii:Full:收到的LSA摘要和自己的LSDB表一致

三,LSDB的更新:

  • 老化时间:LSDB里面的LSA都设定了老化时间,默认为1h,如果1h内LSA没有被更新,LSA在LSDB表中将会被移除。LSDB每隔0.5h刷新一次所有的LSA,LSA的序列号都会加一
  • 序列号越大,表示LSA越新;老化时间越小,表示LSA越新,默认每0.5h进行一次LSA的泛洪。

注意:校验和是不能体现LSA的新旧。

(1)、RTA发现链路状态发生改变后,以组播地址为(224.0.0.6)将LSU报文发送给RTC和RTD。组播地址224.0.0.6表示只有DR和BDR能够接收到这个报文

(2)、RTC作为DR,收到报文后,发送LSAack报文确认,同时使用组播地址为224.0.0.5将LSU报文发送给所有OSPF的路由器。

骨干区域与虚连接

OSPF划分区域之后,并非所有的区域都是平等的关系。其中有一个区域是与众不同的,它的区域号是0,通常被称为骨干区域。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。对此,OSPF有两个规定:

· 所有非骨干区域必须与骨干区域保持连通;

· 骨干区域自身也必须保持连通。

在实际应用中,可能会因为各方面条件的限制,无法满足上面的要求。这时可以通过配置OSPF虚连接予以解决。

(2) 虚连接(Virtual Link)

虚连接是指在两台ABR之间通过一个非骨干区域而建立的一条逻辑上的连接通道。它的两端必须是ABR,而且必须在两端同时配置方可生效。为虚连接两端提供一条非骨干区域内部路由的区域称为传输区(Transit Area)。

OSPF的三张表(链路状态公告)相关推荐

  1. OSPF的三张表(邻居表、LSDB表、路由表)、LSA、LSDB、SPF与路由表之间的关联、OSPF建立的8种必要条件

    4.2.3 路由 OSPF(OSPF的三张表.LSA-LSDB-SPF-路由表之间的关联.OSPF建立的8种必要条件) OSPF的三张表(邻居表.链路状态数据库表.路由表) 邻居表 记录ospf路由器 ...

  2. 华为路由器:ospf协议三张表及邻居建立过程

    说明:本篇接上一篇继续讲解 拓扑图 为了方便,我把R1/2/3/4/5的router id改成了回环网卡的IP. ospf协议三张表 邻居表(neighbortable) OSPF用邻居机制来发现和维 ...

  3. HCNP——OSPF的Router-ID和OSPF的三张表

    一.Router-ID OSPF Router-ID是一个32bit长度的数值,通常使用点分十进制的形式表现,用于在OSPF域中唯一地标识一台OSPF路由器.我们把一系列连续地OSPF路由器组成地网络 ...

  4. BGP路由协议特性和三张表

    BGP的主旨是提供一种域间路由选择系统,确保自主系统只能够无环地交换路由选择信息,BGP路由器交换有关前往目标网络的路径信息. BGP是一种基于策略的路由选择协议,BGP在确定最佳路径时考虑的不是速度 ...

  5. 3.OSPF的协议报文和链路状态通告

    0x01.OSPF报文 1.报文:Packet 2.链路状态通告:LSA 3.OSPF是动态路由协议,需要报文来维护关系 4.IP承载OSPF报文: | Link Layer Header | IP ...

  6. 产品经理最最最最需要关切的三张表

    作者:刘雨 全文共 4141 字,阅读需要 9 分钟 ---- / BEGIN / ---- 我们知道在财务系统里有三张表:「 资产负债表 」.「 利润表 」和 「 现金流量表 」. 资产负债表反映公 ...

  7. mysql中3张表如何关联查询_mysql三张表关联查询

    三张表,需要得到的数据是标红色部分的.sql如下: select a.uid,a.uname,a.upsw,a.urealname,a.utel,a.uremark, b.rid,b.rname,b. ...

  8. 阿里规定超过三张表禁止JOIN,为啥呢?

    作者 | e71hao 来源 | http://blog.itpub.net/30393770/viewspace-2650450/ 一. 问题提出 <阿里巴巴JAVA开发手册>里面写超过 ...

  9. bartender外部表不是预期格式_三张表轻松搞定项目计划

    俗话说凡事预则立,我们做项目更要如此,其实生活也雷同,比如说小到买个家电,从预算.到品牌选择或者商场选择.到安装使用等整个过程. 下图展示计划的主要思考点,仅供参考 项目主要包括需求沟通和方案预研.需 ...

最新文章

  1. 聊天机器人之文本分词
  2. 017——VUE中v-fo指令的使用方法
  3. Java Stream简介, 流的基本概念.
  4. 2016年8月份学习总结,读书《书都不会读,你还想成功》
  5. c语言的输入函数有哪些
  6. (android 地图实战开发)4地图偏移量解决方案
  7. python requests示例_Python3中requests库学习01(常见请求示例)
  8. linux下shell程序(一)
  9. 线性代数第九版中文版pdf_线性代数第九版StevenJ Leon.pdf
  10. C#使用TCP/UDP协议通信并用Wireshark抓包分析数据
  11. intersystem-M语言基础语法
  12. 用springboot对接支付宝支付接口的详细开发步骤总结
  13. 论文排版——Latex正文中参考文献标注方式
  14. 外卖行业现状分析_外卖行业生存现状分析:你还会点外卖吗?
  15. 东北大学 计算机网络,东北大学计算机网络B卷(附答案).pdf
  16. CleanMyMac2022免费版MAC内存清理空间软件
  17. linux mint(ubuntu)频率锁定解决
  18. html5的class属性值,HTML class 属性 | 菜鸟教程
  19. 【240】python 一个二维数组和一个整数,判断数组中是否含有该整数
  20. Redis分布式锁使用不当,酿成一个重大事故,超卖了100瓶飞天茅台!

热门文章

  1. JavaWeb用户信息管理系统-修改用户操作的实现
  2. Adobe Audition将音频转化为PCM
  3. 某位算法工程师对自己工作的反思
  4. Python 3.8.0百度网盘资源下载
  5. 安全的企业邮箱如何选择
  6. c语言在规定时间内跳出循环,do while死循环如何在规定时间内跳出
  7. DAO开发实战业务分析
  8. 有几种检测方法可以检测沼气成分?
  9. vuepress的初始化中的heroImage在哪
  10. 人人权限系统本地部署