太阁实验栈 吃我一记最全面试大题OSPF强势安利


OSPF开放式最短路径优先协议:
OSPF是IETF(公有标准)定义的一种基于链路状态的内部网关路由协议(IGP)。支持中到大型企业网络(路由器数量100台左右、路由条目2-3万条、功能多)、属于无类协议,支持VLSM和CIDR。
版本:V1(实验室)、V2(支持IPv4)、V3(同时支持IPv4和IPv6--双栈模式)
算法:采用的SPF算法(迪杰斯特拉),即最小生成树算法(传递拓扑和路由信息)
特点:
1、不易环路-ospf区域内采用SPF最短路径算法,是不存在路由环路的,OSPF区域间传递路由信息的时候,传递的是路由协议,也就是说OSPF区域之间传递路由信息的时候,可能会产生路由环路。
2、收敛速度--支持触发更新,能够快速检测并通告自治系统内的拓扑变化;ERGRP>IS-IS>OSPF>RIP
3、扩展性--支持IPv6:IS-IS(TLV)>ERGRP/OSPF/RIP---路由条目、路由器数量:ERGRP>IS-IS>OSPF>RIP
4、支持认证:支持明文和密文认证
5、QOS属性:在IPv4报文的TOS字段中ip precedence值设置为6,将OSPF协议设置成高优先级,在网络环境差的情况下可以优先转发。
6、OSPF使用的IP协议号为89,支持组播发送报文(224.0.0.5/224.0.0.6)

工作原理:
OSPF要求区域内每台运行OSPF的路由器都了解区域内的链路状态信息,这样才能计算出到达目的地的最优路径。首先路由器之间发送hello报文建立邻居和邻接关系,形成邻居表;邻居之间通过LSA泛洪交互拓扑信息,LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息,收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB形成拓扑表;路由器在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树,通过计算得出到达每个目的网络的最优路由并将其加入到IP路由表中,形成路由表。
OSPF报头封装:
Layer2 /IPv4/OSPF/FCS(IP协议号为89)

注:
Version:版本字段,指出所采用的OSPF协议版本号(V1\V2\V3)
Packet Type:报文类型字段,标识对应报文的类型。OSPF有5种报文,分别是:Hello报文、DBD报文、LSR报文、LSU报文、LSAck报文。
Packet Length:报文长度字段,整个报文(OSPF报头和报文)的字节长度。
Router ID:路由器ID字段,指定发送报文的源路由器ID。
Area ID:区域ID字段,指定发送报文的路由器所对应的OSPF区域号。
Checksum:校验和字段,对OSPF报头和各报文具体内容但不包括下面的Authentication字段的校验和,用于对端路由器校验报文的完整性和正确性。
AuType:认证类型字段,0为不认证,1为明文认证,2采用MD5密文认证。
Authentication:认证字段,具体值根据不同认证类型而定:认证类型为不认证时,此字段没有数据,认证类型为简单认证时,此字段为认证密码,认证类型为MD5认证时,此字段为MD5摘要消息。
网络类型:
hello报文发送周期/存活周期----2、4(10S/40S) 3、5、6(30S/120S)
1、环回口Loopback:(不主动发送hello消息;宣告环回口时默认发送32位的主机路由;当该接口类型修改为p2p时,才可以发送正常的路由)
2、广播broadcost:以太网接口(选举DR/BDR,支持组播/单播报文发送)
3、非广播NBMA non-broadcos :串行接口--帧中继的主接口/多点子接口/ATM(选举DR/BDR,默认不支持组播报文发送,指定neighbor后支持单播报文发送)
4、点到点Point to point:串行接口--HDLC/PPP/帧中继的子接口(不选举DR/BDR;支持组播/单播报文发送;只能建立一个邻居)
5、点到多点Point to multipoint:帧中继(默认不对应任何接口需手工指定;支持组播/单播报文发送,不选DR/BDR,默认发送32位主机路由)
6、点带多点非广播Point to multipoint non-broadcost:帧中继(默认不对应任何接口需手工指定;不支持组播报文发送,指定neighbor后支持单播报文发送,不选举DR/BDR,默认发送32位的主机路由)
接口状态变换:
Loopback:被设置为环回口的接口会被通告为一个Stub网络(接口测试时)
注:该状态下的如果端口收到UnloopInd事件后,端口解除环回状态,进入Down状态。
Down:接口的初始状态,底层协议显示该端口不可用,所有定时器被关闭。
注:收到Interface Up事件后,端口的链路层协议变成可用状态(链路层Up)。
1、点到点、点到多点(非广播)和虚连接virtual-link
Point-to-point(P-to-P):接口是可用的,端口试图与邻居建立邻接关系,并以Hello Interval的间隔发送Hello报文。
2、广播型和非广播NBMA
Waiting:路由器通过监听接收到的Hello报文检测网络中是否已经有DR和BDR。在此状态下的路由器不可以参与选举DR和BDR(wait interval)。
Backup Seen:路由器已经检测到网络中是否存在BDR。
Backup:路由器成为该区域内的BDR,和区域内所有的其他路由器建立邻接关系。
DR:该路由器成为该区域内的DR,和区域内所有的其他路由器建立邻接关系。
DROther:该路由器连接到一个广播型/NBMA网络,而且该路由器不是一个DR/BDR。此状态下的该路由器将与DR和BDR形成邻接关系并交换路由信息。
路由器ID:Router ID是一个32位的值(使用点分十进制,不要求PING可达),唯一标识了一个自治系统内的路由器;手工配置为优,防止Router ID因为接口地址的变化而改变导致网络频繁的翻动;其次使用逻辑接口中最大的IP地址作为Router ID;最后使用物理接口的最大IP地址作为Router ID。
注:建议在宣告前手工指定Router ID,否则是不会生效的(防止网络波动),可以使用clear ip ospf process强制重置OSPF进程后生效;同一个区域内的Router ID不能冲突,建议不同区域内的Router ID也不要冲突,否则在做路由重分发时会导致网络的翻动。
LSDB:链路状态数据库;LSDB由LSA汇总得到的
LSU: 链路状态跟新,用于封装LSA,一个LSU包含一个或多个LSA
LSA:链路状态通告,内容包含拓扑信息和路由信息;共11种类型(0-11),1类LSA是在区域内泛洪发送;2类LSA在区域内子网络发送;3类LSA是在ABR设备上发送跨区域通告;4类LSA在区域间发送描述AS边节点的。5类、7类。
OSPF报文类型:
1、Hello 报文:邻居发现报文(根据网络类型10s或30s发送一次);用于发现和实时的维护邻居关系,并在广播和非广播网络类型中选举DR/BDR.
2、DBD报文:数据库描述报文;两台路由器进行LSDB数据库同步时,用DBD报文来描述自己的LSDB。DBD报文的内容包括LSDB中每一条LSA的头部(LSA的头部可以唯一标识一条LSA)和序列号。LSA头部只占一条LSA的整个数据流量的一小部分,这样就可以减少对链路带宽的消耗。
3、LSR报文:链路状态请求报文;两台路由器互相交换过DBD报文之后,知道对端的路由器有哪些LSA是本地LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA(内容包含link state ID、ADV router、LSA类型、LSA序列号)。
4、LSU报文:链路状态更新报文;用来向对端路由器发送所需要的LSA。
5、LSACK报文:链路状态确认报文;用来对接收到的LSU报文进行确认。
确认机制一:显式确认--一发一确认(使用单独的报文确认) LSR/LSU/LSACK
确认机制二:隐式确认---一发一回应(使用相同的报文+序列号回应)DBD
点到点网络:使用组播地址224.0.0.5发送
广播网络:hello(组)、DD(单)、LSR(单播)、LSU(组播)、LSACK(组播)
邻居发现报文:hello报文

1、Network Mask:发送Hello报文的接口的网络掩码。
2、Hello Interval:发送Hello报文的时间间隔,单位为秒。
3、Options:标识发送此报文的OSPF路由器所支持的可选功能。
E位:表示区域内是否允许5类LSA通行(置1允许/置0不允许)
N位:表示区域内是否允许7类LSA通行(置1允许/置0不允许)
4、Router Priority:发送Hello报文的接口的优先级,用于选举DR和BDR。
5、Router Dead Interval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;单位为秒,通常为四倍Hello Interval。
6、Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。
7、Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR。
8、Neighbor:邻居的Router ID列表,表示本路由器已经从邻居收到了Hello
数据库描述报文:DBD报文(option字段省略)
Flg:Flg字段,前5位置0,后3位包含以下内容:
I(Init bit,置1表示发送的第一个DBD
M(More bit,置1表示后面还有DBD)
MS(Master/Slave,置1表示Master,只有1个master,其他的为slave,在DBD交换过程中,Master先发包含LSA头部信息的DBD包,使用一个DBD sequence number,slave回复DBD报文,使用相同的DBD sequence number,在传递LSA的同时对Master发送的DBD进行确认,以此实现可靠的信息交换。
接口MTU:最大传输单元,默认1500字节。
Link State Advertisement Header: LSA数据包的报头,包含LS Type, LS ID, Advertising Router和LS Sequence Number。
链路状态请求报文:LSR报文
LS type:LSA类型,其中的11种LSA之一。
Link State ID:相应的LS type的LSA header里面包含的Link State ID字段Advertisiong Router:通告该被请求LSA的Router。
链路状态更新报文:LSU报文
advertisements:包含的LSA的数量。
link state advertisements:完整的LSA数据包
当网络有变动时,发送新的LSA时需要邻居使用 Ackownledged packet进行确认。未收到邻居的确认,对该邻居进行单播重传,以确保他们的数据库信息同步。
链路状态确认报文:LSACK报文
Link State Advertisement Header:收到的Update packet里面包含的唯一确认LSA的报头三元素和序列号,发送回去表示具体的LSA已经收到。
链路状态通报告报文:LSA报头

1、LS age:此字段表示LSA已经生存的时间(0-3600),单位是秒。
2、Option:可选项功能(详细内容见TCP/IP路由协技术.卷一)。
B位:边界位,置1表示产生此LSA的路由器是一个ABR
E位:外部位,置1表示产生此LSA的路由器是一个ASBR
3、LS type:标识了LSA的格式和功能(共11种);常用的LSA类型有六种。
4、Link State ID:此字段是该LSA所描述的那部分链路的标识;例如Router ID
5、Advertising Router:此字段是产生此LSA的路由器的Router ID。
6、LS sequence number:序列号字段,此字段用于检测旧的和重复的LSA。
7、LS checksum:校验和字段 8、Length:LSA报文长度
注:LS type,Link State ID和Advertising Router的组合共同标识一条LSA。
LSA防环机制:一台路由器收到LSA后要判断新旧,只接收和泛洪新的LSA,丢弃旧的LSA(通过LSA报头中的序列号、老化计时器、校验和)。
链路状态通报告报文:LSA报文载荷(以1类LSA为例,每种报文载荷内容不一样)

V(virtual link) 如果产生此LSA 的路由器是虚连接的端点,则值为1
E (external): 如果产生此LSA 的路由器是ASBR, 则值为1
B (border):如果产生此LSA 的路由器是ABR,则值为1
#links:LSA 中所描述的链路信息的数量,路由器处于某区域中所有链路和接口
Link ID :链接的对端标识,不同链路类型的Link ID表示的意义也不同。
Type :链路类型,为1表示通过点对点链路与另一个路由器相连;为2表示连接到传送网络;为3表示连接到STUB 网络;为4 表示虚电路
#TOS:链路不同方式的数量Metric :链路的度量值
TOS:服务类型Tos metric :指定服务类型的链路度量值
Link ID :链路标识,具体的数值根据链路类型而定。
Link data:用于描述此链接的附加信息,不同的链路类型所描述的信息也不同。
邻居状态机:

邻居和邻接关系建立的过程如下:
1、Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
2、Attempt:此状态只在NBMA/点到多点非广播网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为Hello发送周期。如果四倍Hello发送周期内未收到邻居的Hello报文,则转为Down状态。
3、Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中(路由器ID),尚未与邻居建立双向通信关系。
4、2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态(邻居关系已建立,可以发送hello报文)。
-广播、非广播网络:选举指定/备份路由器DR/BDR(full)、DR Others(2-way)
-比较参选路由器OSPF优先级(0-255,默认1,0没有参选资格,值越高越优先)
-优先级相同时,继而比较路由器ID,值越高越优先(DR/BDR选举不支持抢占)
-点到点网络/点到多点(非广播)不需要选举主/备份路由器DR/BDR
注:DR Others只和DR/BDR建立邻居/邻接关系,DR Others发送跟新给DR/BDR时使用组播地址224.0.0.6;DR/BDR和DR Others之间同步跟新时使用组播地址224.0.0.5;选举时间为4倍的hello时间(wait interval为40S或120S)。
5、ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DBD报文。主从关系是在此状态下形成的,初始DBD序列号也是在此状态下决定的,在此状态下发送的DBD报文不包含链路状态描述。
路由器使用DBD报文进行主从路由器(Master/Slave)的选举和数据库摘要信息交互过程:
-邻居状态变为ExStart以后,RTA向RTB发送第一个DBD报文(载荷为空),在这个报文中,DBD序列号被设置为X(假设),RTA宣告自己为主路由器。RTB也向RTA发送第一个DBD报文,在这个报文中,DBD序列号被设置为Y(假设)。RTB也宣告自己为主路由器。由于RTB的Router ID比RTA的大,所以RTB应当为主路由器(DBD中包含MTU和router ID,思科默认开启MTU一致性检测)。
-主路由器(MAster):发起第一个DBD报文;确认序列号
-从路由器(Slave):仅仅对主路由器发送的DBD报文做确认
6、Exchange:此状态下路由器相互发送包含链路状态信息摘要的DBD报文,描述本地LSDB的内容。
7、Loading:相互发送LSR报文请求LSA,互相发送LSU/LSACK报文互相同步LSA
8、Full:路由器的LSDB已经同步(邻接关系已建立,可以发送hello、LSDB、路由信息)。
OSPF建立邻居、邻接关系需要满足的条件:
1、版本必须一致(OSPF报头中/2-way)
2、Router ID不能冲突(OSPF报头中/2-way)
3、直连路由器两端的区域号Area保持一致;和接收端口所属区域的Area ID不一致,但是值为0,表示属于骨干区域,而且是在一个虚连接上发送的;(OSPF报头中/2-way)
4、认证类型和认证密钥保持一致(OSPF报头中/2-way)
5、掩码保持一致(HELLO报文中/2-way)广播/非广播网络中需保持一致
6、Hello时间、Dead时间保持一致(HELLO报文中/2-way)
7、Option字段中,E位和N位区域类型保持一致(HELLO报文中/2-way)
8、直连链路两端的MTU值保持一致(first DBD报文中)
9、直连链路两端的网络类型匹配,否则FULL状态下不能交互LSA
OSPF多区域划分:

OSPF将一组网段组合在一起称为一个区域(区域划分是基于路由器的接口),划分OSPF区域可以缩小路由器的LSDB规模和优化路由。区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。每个区域都有自己的LSDB,不同区域的LSDB是不同的。路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了;同时多区域的划分可以方便进行路由汇总,减少路由条目。
AS:自治系统,使用同一种路由协议交换路由信息的一组路由器。
骨干区域/传输区域:Area 0,为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息,非骨干区域都必须连接到骨干区域;骨干区域支持1、2、3、4、5类LSA通行。
非骨干区域:常规区域、末节区域stub、完全末节区域tottlly stub、次末节区域NSSA 、完全次末节区域tottlly NSSA(非骨干区域编号可以任意、重复)
--常规区域:标准区域,在这个区域里面可以正常传递OSPF各类报文;常规区域支持1、2、3、4、5类LSA通行。
--末节区域:叶子区域,不能是区域0;不能存在ASBR(hello字段中option字段的E位置0);也不能使用virtual-link;stub区域内所有路由器区域类型要保持一致;ABR会主动向区域内下放一条默认路由,度量值默认为1,路由类型为OIA;该区域支持1、2、3类LSA通行;一般放置的是性能较差的路由器
--完全末节区域:该区域仅支持1、2类LSA通行;ABR会主动向区域内下放一条默认路由,度量值为1,路由类型为OIA;如果要到达本区域以外的目标网络的时候,直接把报文通过默认路由发出去;一般放置的是性能较差的路由器。
--次末节区域:NSSA是在含有stub区域的条件下还能够存在ASBR,不允许5类LSA通行,但是可以允许7类LSA通行。默认情况下ABR/ASBR不会下放一条默认路由到该区域,需要手工配置;ASBR下放默认路由时需要本地路由表中拥有该缺省路由,ABR则不需要;度量值为1,路由类型为ON2(满足条件同stub)。
--完全次末节区域:就是在完全末节区域环境下允许引入外部路由,ABR会主动向区域内下放一条默认路由,度量值为1,路由类型为OE1(满足条件同stub)。
ABR(Area Border Routers):区域边界路由器,该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接;它包含所有相连区域的LSDB;ABR是可以产生3类LSA的。
真ABR:该路由器不但有一个接口属于area 0而且area 0中有属于full的邻居;遵守3类LSA的防环机制,收到非骨干区域传递过来的3类LSA时,只可以将3类LSA放进拓扑表,不进行路由计算,也不会将该路由传递给其他邻居。
伪ABR:该路由器有一个接口属于area 0;但是在area 0并没有full的邻居,可以不遵守3类LSA的防环机制,在传递3类LSA时可能会出现环路。
ASBR(AS Boundary Routers):自治系统边界路由器,和其他AS交换路由信息的路由器,这种路由器会向整个AS通告AS外部路由信息(路由重分发);ASBR 是可以产生5类和7类LSA;ASBR并不一定位于AS 的边界,它可能是区域内路由器,也可能是ABR。
BR(Backbone Routers):骨干路由器,路由器至少有一个接口属于骨干区域。所有的ABR 和位于Area0 的内部路由器都是骨干路由器。
IR(Internal Routers):内部路由器,路由器的所有接口属于同一个区域且该区域一定是非骨干区域。
下期为大家介绍OSPF的LSA类型,敬请期待!

