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报文
2.OSPF数据包
OSPF中公有五种数据包,在整个OSFP运行的过程中起着重要的作用
·HELLO包
·DBD包
·LSR包
·LSU包
·LSACK包
(1)HELLO包
作用:建立邻居关系,根据包中的内容来协商邻居关系
建立邻居关系需要匹配的字段:HELLO和失效时间间隔,区域号相同,区域末节标识
出现阶段:邻居建立阶段
(2)DBD包(Datebase Description)
作用:在OSPF邻居关系建立之后,DBD包负责描述本地的LSDB,接收到路由器通过和自己的LSDB做对比,进而同步区域中的LSDB
特殊字段:
1字段,置1表示这是第一个要发送的数据包
M字段,置1表示之后还有DD包要发送
MS字段,用来表示谁是主(Master)谁是从(Slave)
DD Sequence Number:利用序列号来确保传输的完整性和可靠性
LSA Headers:LSA头部摘要信息
(3)LSR包(Link-State Update)
作用:用来向邻居路由器请求某些缺失的路由,或者哪些LSA是已经缺失了的
特殊字段:
LS Type,指定所请求的LSA类型,一共7类
Link State ID:用来表示LSA,根据LSA种类不同,有不同的含义
Advertising Router:用来表示产生此LSA路由器ID
(4)LSU(Link-State Update)
作用:对LSR进行回应,或者定时发送LSU来更新区域中的LSDB,发送的是真正需要的LSA的内容
特殊字段功能:
Number of LSA,指定此报文中共发送的LSA数量
LSAs:一条条具体的LSA完整的信息,可以有多个LSA的信息
(5)ACK包
作用:用来在收到对端的LSU之后返回的确认报文,内容是需要确认的LSA头部
特殊字段:
1.LSA Headres:LAS头部信息
四.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
类型2:网络LSA(NET Link-State)
链路状态ID:DR的IP接口地址
通告路由器:DR和BDR
通告范围:在特定的区域内泛洪,只有存在在DR和BDR的网络中才会出现
通告内容:通告的是一个传输子网,列出了构成中转网络的所有路由器,包括链路的子网掩码,链路状态等信息(即与DR和BDR由关联的所有路由器)
类型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的泛洪,从骨干区域到非骨干区域,会考虑区域内路由,也会考虑区域间路由
类型4:ASBR汇总LSA
链路状态ID:ASBR的路由器ID
通告路由器:最原始的是有外部路由引入的区域的ABR,之后再由各个区域的ABR修改度量值后再传入各自区域
通告范围:除了末节区域的整个OSFP域
通告内容:如何到达ASBR
4类LSA的泛洪:最原始ABR将该LSA注入到骨干区域(携带的度量值为ABR到ASBR的距离),骨干区域中的ABR收到后,修改度量值(为原始开销加上ABR到原始通告ABR的距离)后通告进非骨干区域(非骨干区域路由器中到ASBR的度量值为收到的4类LSA加上到ABR的距离)
类型5:自治系统LSA
链路状态ID:通告进自治系统的外部网络号
通告路由器:ASBR的RID,ABR只转发不修改
通告范围:除了末节区域的整个OSPF自治系统
类型7:NSSA外部LSA
链路状态:引入的外部网络号
通告范围:只存在于NSSA区域,在ABR处被当作5类LSA泛洪出去。转换为5类LSA之后,将保留一个地址(Forward Address),为ASBR的接口地址,其他区域到外部的路径实际上是去到保留地址的路径
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,区域间默认路由
·ON2,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地址等于该引入的外部路由的下一跳地址
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.虚链路问题
图中底下两台路由器在区域0中,左边两台为区域14,右边两台为区域23,上边两台为区域12,问最少需要几条虚链路,才能保证正常运行,几条虚链路才能最可靠
解析:
最少要一条即可,即路由器1和4或者2和3
原本区域0,14,23就在域内,只是缺少区域12,那在1和4之间建立虚链路就可以满足最基本要求
最可靠的话,3条