OSPF

思维导图

·OSPF基本概念
·OSPF的工作过程
·OSPF报文
·OSPF邻居建立过程
·DR,BDR的选举
·LSA的解析
·OSPF区域类型
·OSPF的网络类型
·OSPF的路径选择
·OSPF特殊特性及实例分析

一.OSPF的基本概念

OSPF(Open shortest path first,开放式最短路径优先),是一种链路状态型协议,基于SPF算法。OSPF是一种层次式的协议,他不向邻居通告路由项,向邻居通告的是链路状态信息,由各路由器根据链路状态数据库自行计算生成路由表

二.OSPF的工作过程

1.了解直连网络:正确配置接口的IP地址和子网掩码并激活接口,并将接口包含在一条network语句中
2.发送HELLO包:建立OSPF邻居关系:邻居是指同样在链路对应接口上启用了OSPF功能的路由器
3.建立链路状态数据包:其中包含与该路由器直接相连链路的各种状态,包括邻居ID,链路类型和带宽等。一旦建立了临界关系,即可创建LSP
4.将链路状态数据包泛洪至邻居:每台路由器将自身库中的LSP都泛洪给邻居路由器,直至区域内所有OSPF路由器都具有相同的LSDB(链路状态数据库)
5.建立自身的路由表:路由器根据链路状态数据库,使用SPF算法,各自建立自己的路由表

三.OSPF报文

1.OSPF报文

OSPF不需要运输层 ospf直接_OSPF不需要运输层


2.OSPF数据包

OSPF中公有五种数据包,在整个OSFP运行的过程中起着重要的作用

·HELLO包

·DBD包

·LSR包

·LSU包

·LSACK包

(1)HELLO包

作用:建立邻居关系,根据包中的内容来协商邻居关系

建立邻居关系需要匹配的字段:HELLO和失效时间间隔,区域号相同,区域末节标识

出现阶段:邻居建立阶段

OSPF不需要运输层 ospf直接_OSPF不需要运输层_02

(2)DBD包(Datebase Description)

作用:在OSPF邻居关系建立之后,DBD包负责描述本地的LSDB,接收到路由器通过和自己的LSDB做对比,进而同步区域中的LSDB

特殊字段:

1字段,置1表示这是第一个要发送的数据包

M字段,置1表示之后还有DD包要发送

MS字段,用来表示谁是主(Master)谁是从(Slave)

DD Sequence Number:利用序列号来确保传输的完整性和可靠性

LSA Headers:LSA头部摘要信息

OSPF不需要运输层 ospf直接_OSPF_03


(3)LSR包(Link-State Update)

作用:用来向邻居路由器请求某些缺失的路由,或者哪些LSA是已经缺失了的

特殊字段:

LS Type,指定所请求的LSA类型,一共7类

Link State ID:用来表示LSA,根据LSA种类不同,有不同的含义

Advertising Router:用来表示产生此LSA路由器ID

OSPF不需要运输层 ospf直接_链路_04


(4)LSU(Link-State Update)

作用:对LSR进行回应,或者定时发送LSU来更新区域中的LSDB,发送的是真正需要的LSA的内容

特殊字段功能:

Number of LSA,指定此报文中共发送的LSA数量

LSAs:一条条具体的LSA完整的信息,可以有多个LSA的信息

OSPF不需要运输层 ospf直接_OSPF不需要运输层_05


(5)ACK包

作用:用来在收到对端的LSU之后返回的确认报文,内容是需要确认的LSA头部

特殊字段:

1.LSA Headres:LAS头部信息

OSPF不需要运输层 ospf直接_泛洪_06

四.OSPF邻居建立过程

首先对邻居关系和邻接关系要区分开,两台路由器相互之间的状态是2-way时则表明邻居关系建立,当邻居关系位FULL时则表明邻接关系建立
1.邻居关系变化过程
down->init->2-way->exstart->exchange->loading->full
down:表示还没有建立起来的邻居关系,没有检测到邻居的存在
init:收到了HELLO包,但是包中的邻居信息中没有自己的路由器ID
2-way:收到了HELLO包,包中的邻居信息包含自己的路由器ID
exstart:表示正在协商主从关系,即谁先发送DBD
exchange:在主路由器的带领下,开始交换DBD
loading:请求更详细的信息,即交换LSU
full:表示已完全建立邻接关系,数据库已与邻居完全一致

2.邻居建立过程详解
(1)邻居建立过程(down->init->2-way)
多路访问链路中,OSPF首先确定DR和BDR,这能优化广播网络中的信息交换过程,在2-way之后即进行DR和BDR的选举

(2)交换LSDB过程(exstart->exchange)
路由器在交换LSDB之前,会选举出一台主路由器来主导整个交换阶段,决定主路由器的阶段是exstart阶段
exstart:首先一条链路上的路由器初始都认为自己是主路由器,发送空的DBD包(不含LSA的索引,含有RID,MS位,M位,1位都会置1).收到对端的空的DBD后,会比较RID,大的一端将成为主路由器,从路由器还需要发送一个DBD包对主路由器进行响应。至此进入exchange阶段
exchange:在主路由器的带领下开始交换LSDB。主路由器发送的DBD包,从路由器总要作出回应。从路由器发送的DBD包全部是对主路由器发送的DBD包作出的回应,如果主路由器没有要通过的信息了,从路由器还有,那么从路由器就会将M置1,这样主路由器就知道从路由器还有信息要发送,会继续向从路由器发送DBD包,从路由器得以发送有关信息

(3)同步链路状态数据库过程(Loading->Full)
DBD交换完毕之后,路由器就有了邻居的LSA的索引列表,路由器进入Loading状态,开始请求自己没有的LSA,路由器会发送一个LSR来请求多个LSA,对端回复LSU包来告诉路由器他想要的信息,可以通过LSACK来确认对端已经收到了LSU,等到两端均不再发送LSU和LSR则LSDB同步完成,进入FULLL状态

五.DR和BDR的选举

1.DR和BDR存在的意义
DR和BDR是存在于多路访问中,作用是减少区域内的同步次数,降低路由器内存消耗,减少路由流量更新,确保同一区域内拥有相同的DR和BDR

2.选举过程
DR和BDR的选举过程是非抢占的
先比较优先级优先级较大的将被选举为DR和BDR,若优先级相同,再看RID,RID大者胜出,若优先级为0,则意味着不进行DR和BDR的选举
非DR和BDR,发送给DR和BDR时所使用的组播为224.0.0.6,DR和BDR发送给非DR和BDR使用的是组播224.0.0.5

六.LSA

1.LSA基本概念
LSA是路由器建立的用来描述链路状态信息的一种数据结构,保存在LSDB中,承载在LSU中发出,描述的是链路或接口的状态及每条链路的成本

2.最新LSA的判定规则
·更高的序列号
·校验和,越大越新
·老化时间
·更小的LS年龄

3.LSA类型

类型1:路由器LSA(Router Link States)

Link-state ID:源路由器ID

通告路由器:OSPF路由器

通告范围:只在特定区域内泛洪

通告内容:

·路由器在区域内的接口和接口所连接的邻居(链路的开销等),路由器直连链路状态

·网络连接类型

·是否为ABR

OSPF不需要运输层 ospf直接_泛洪_07


OSPF不需要运输层 ospf直接_链路_08


类型2:网络LSA(NET Link-State)

链路状态ID:DR的IP接口地址

通告路由器:DR和BDR

通告范围:在特定的区域内泛洪,只有存在在DR和BDR的网络中才会出现

通告内容:通告的是一个传输子网,列出了构成中转网络的所有路由器,包括链路的子网掩码,链路状态等信息(即与DR和BDR由关联的所有路由器)

OSPF不需要运输层 ospf直接_OSPF_09


OSPF不需要运输层 ospf直接_泛洪_10


类型3:汇总LSA (Summary Net Link State)

链路状态ID:目的网络的地址

通告路由器:ABR

通告范围:区域间通告,由一个区域通告给另一个区域,

通告内容:将本区域内的1类和2类LSA进行汇总发送给其他区域(非骨干–》骨干)。通告了源区域中的子网,掩码,以及ABR到目的的开销,即某个区域到到另一个区域中某台路由器的开销就是本地到ABR的开销,加上3类LSA中通告的开销(LSA只能由发出的路由器更新和删除,其他路由器只负责转发)

类型LSA的生成和传播规则:

·ABR只会将来自骨干区域中的3类LSA进行SPF算法,得出路由表,再将创建的LSA发送进非骨干区域,而不会对于来自非骨干区域中的LSA进行操作(一个区域中有两个ABR的问题),但这些LSA会存在于非骨干区域的LSDB中,并且在非骨干区域中泛洪

·LSA的泛洪,从非骨干区域到骨干区域,只会考虑区域内路由

·LSA的泛洪,从骨干区域到非骨干区域,会考虑区域内路由,也会考虑区域间路由

OSPF不需要运输层 ospf直接_链路_11


OSPF不需要运输层 ospf直接_链路_12


类型4:ASBR汇总LSA

链路状态ID:ASBR的路由器ID

通告路由器:最原始的是有外部路由引入的区域的ABR,之后再由各个区域的ABR修改度量值后再传入各自区域

通告范围:除了末节区域的整个OSFP域

通告内容:如何到达ASBR

4类LSA的泛洪:最原始ABR将该LSA注入到骨干区域(携带的度量值为ABR到ASBR的距离),骨干区域中的ABR收到后,修改度量值(为原始开销加上ABR到原始通告ABR的距离)后通告进非骨干区域(非骨干区域路由器中到ASBR的度量值为收到的4类LSA加上到ABR的距离)

OSPF不需要运输层 ospf直接_OSPF不需要运输层_13


类型5:自治系统LSA

链路状态ID:通告进自治系统的外部网络号

通告路由器:ASBR的RID,ABR只转发不修改

通告范围:除了末节区域的整个OSPF自治系统

OSPF不需要运输层 ospf直接_泛洪_14


类型7:NSSA外部LSA

链路状态:引入的外部网络号

通告范围:只存在于NSSA区域,在ABR处被当作5类LSA泛洪出去。转换为5类LSA之后,将保留一个地址(Forward Address),为ASBR的接口地址,其他区域到外部的路径实际上是去到保留地址的路径

OSPF不需要运输层 ospf直接_OSPF_15

4.有关LSA的特性及操作
(1)接口失效后,LSA的运作情况
发送新的类型1LSA告诉邻居,没有了链路的信息
(2)产生LSA的路由器身份
区域内路由器产生:1类和2类LSA
ABR产生:3类和4类LSA
ASBR产生5类和7类LSA

七.OSPF区域类型和结构

1.区域类型
(1)骨干区域:所有区域必须连接骨干区域
(2)标准区域:接收所有内部和外部的路由信息
(3)末节区域:不接受自治系统外部的路由信息(不接受4类和5类LSA)
(4)完全末节区域:只接收区域内部路由信息 思科专用,通过默认路由和别的区域相连(不接受3,4,5类LSA,通过默认路由与外部网络通信)
(5)NSSA:接收区域路由和有限的外部路由信息 限制自治系统外信息,NSSA区域中可以有ASBR
(6)完全NSSA:只接收区域内的路由信息和有限的外部路由信息

2.OSPF末节区域的默认路由
(1)末节区域,完全末节区域,完全NSSA区域会自动生成一条区域间的默认路由,NSSA区域不会自动生成,需要手动配置一下

八.OSPF网络类型

1.点到点连接
将一对路由器连接起来的网网络,使用的是PPP HDLC协议
使用组播224.0.0.5来发送各种数据包

2. 广播
多路访问网络,如以太网,需要DR和BDR的选举
通常以组播发送HELLO报文,LSU报文,和LSACK报文,以单播形式发送DD和LSR报文
DR和BDR给非指定路由器发送消息使用的是组播224.0.0.5
非指定路由器给DR和BDR发送消息使用的是组播224.0.0.6

3.非广播多路访问(NBMA, Non-Broadcast Multiple Access)
连接的路由器超过两台但是没有广播功能,帧中继网络和ATM网络
所有数据包均单播发送,指定邻居

4.点到多点
Hello包以组播形式发送,其他类型数据包由单播发送

九.OSFP路径选择

1.OSPF路由类型
·O,区域内路由
·OIA,区域间路由
·OE2,外部路由,开销值在区域内传播时不改变
·OE1,外部路由,开销值在区域内传播时改变
·ON2,在NSSA区域中存在,类似OE2
·ON1,在NSSA区域中存在,类似OE1
·OIA,区域间默认路由
·O
N2,NSSA区域中默认路由

2.选路规则
以下按优先级排列,先出现的优先级最高
·区域内路由
·区域间路由
·E1/N1路由,这两类路由被看作是平等的
·E2/N2路由

十.OSPF几个进阶分析题

1.5类LSA中的转发地址问题

(1)OSPF在引入外部路由时,若产生的类LSA的转发地址为0.0.0.0,则其他路由器在计算到达该外部网络时,将考虑如何到达ASBR,即产生5类LSA的路由器来计算处去往外部路由的下一跳地址

(2)在OSPF引入外部路由时,若产生的5类LSA的转发地址不为0.0.0.0,则其他路由器在计算到达该外部网络时,将考虑如何到达转发地址来计算出外部路由的下一跳地址

当同时满足以下三种情况时,OSPF产生的5类LSA的转发地址不为0.0.0.0

·引入的这条外部路由,其对应的出接口启用了OSPF

·引入的这条外部路由,其对应的接口未设置为passive-interface

·引入的这条外部路由,其对应的出接口的OSPF类型为broadcast

这种情况下,产生的5类LSA,其FA地址等于该引入的外部路由的下一跳地址

OSPF不需要运输层 ospf直接_OSPF不需要运输层_16


2.7类LSA中的转发地址

若在NSSA区域中引入外部路由,则产生的Type 7LSA中其转发地址均不为0,具体转发地址为该ASBR上启用OSPF的接口的IP地址

(1)若路由器上loopback接口开启了OSPF,则转发地址等于启用OSPF的loopback地址,若存在多个的话,则转发地址等于最后启用OSPF的Loopback接口的IP地址

(2)若该路由器上没有loopback接口开启了OSPF,那么FA地址等于启用了OSPF的物理接口地址,若存在多个,则转发地址为最后启用OSPF的物理接口的IP地址

3.去往外部的路由生成
(1)收到5类LSA,检查LSA中的转发地址,若为0.0.0.0则生成的路由本质上是到ASBR的路由,此时查找4类LSA,根据4类LSA中的度量值来计算去往外部的路由(考虑OE1和OE2,OE1加自治系统内部的开销,OE2不加自治系统内部的开销)
(2)若转发地址不为0.0.0.0,则去往外部的路径,即为去往转发地址的路径

4.虚链路问题

OSPF不需要运输层 ospf直接_链路_17


图中底下两台路由器在区域0中,左边两台为区域14,右边两台为区域23,上边两台为区域12,问最少需要几条虚链路,才能保证正常运行,几条虚链路才能最可靠

解析:

最少要一条即可,即路由器1和4或者2和3

原本区域0,14,23就在域内,只是缺少区域12,那在1和4之间建立虚链路就可以满足最基本要求

最可靠的话,3条