OSPF(Open Shortest Path First)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。与RIP相对,OSPF是链路状态路由协议,而RIP是距离向量路由协议。
1.骨干区域:起到了让其他非骨干区域能够知道别的区域的网络情况的作用。也就是说,所有非骨干区域的路由信息都要流经骨干区域。
2.虚拟链路:是一个通过非骨干区域到骨干区域的链路。
使用目的:
连接一个非骨干区域到一个骨干区域通过一个非骨干区域
通过一个非骨干区,连接分开的两个骨干区部分
规则:
必须在两个ABR之间进行配置
虚链路通过的区域作为传输区域,必须有完整的路由信息
间传输区不能是存根区。
3. OSPF的分层拓扑的优势:
1) 降低SPF的计算频率
2) 减小路由表
3) 降低LSU更新的开销
LSA 链路状态通告
LSDB 链路状态数据库
邻居表--发现并建立邻居
拓扑表--建立DBD
路由表--根据SPF算法计算到各个路由器的最佳路径。
1. 内部路由器:所有端口在同一区域的路由器,维护一个链路状态数据库。
2. 主干路由器:具有连接主干区域端口的路由器。
3. 区域边界路由器(ABR): 具有连接多区域端口的路由器,一般作为一个区域的出口。ABR为每一个所连
接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负
责将这些信息发送到各个区域。
4. 自治域系统边界路由器(ASBR): 至少拥有一个连接外部自治域网络(如非OSPF的网络)端口的路由器,负责将非OSPF 网络信息传入OSPF网络。
Version:版本字段,占1个字节,指出所采用的OSPF协议版本号,目前最高版本为OSPF v4,即值为4(对应二进制是0100)。
Packet Type:报文类型字段,标识对应报文的类型。前面说了OSPF有5种报文,分别是:Hello报文、DD报文、LSR报文、LSU报文、LSAck报文。具体将在下面各小节介绍。
Packet Length:包长度字段,占2个字节。它是指整个报文(包括OSPF报头部分和后面各报文内容部分)的字节长度。
Router ID:路由器ID字段,占4个字节,指定发送报文的源路由器ID。
Area ID:区域ID字段,占4个字节,指定发送报文的路由器所对应的OSPF区域号。
Checksum:校验和字段,占2个字节,是对整个报文(包括OSPF报头和各报文具体内容,但不包括下面的Authentication字段)的校验和,用于对端路由器校验报文的完整性和正确性。
AuType:认证类型字段,占2个字节,指定所采用的认证类型,0为不认证,1为进行简单认证,2采用MD5方式认证。
Authentication:认证字段,占8个字节,具体值根据不同认证类型而定:认证类型为不认证时,此字段没有数据,认证类型为简单认证时,此字段为认证密码,认证类型为MD5认证时,此字段为MD5摘要消息。
Hello Packet包含信息:
1.源路由器的RID
2.源路由器的Area ID
3.源路由器接口的掩码
4.源路由器接口的认证类型和认证信息
5.源路由器接口的Hello包发送的时间间隔
6.源路由器接口的无效时间间隔
7.优先级
8.DR/BDR接口IP地址
9.五个标记位(flag bit)
10.源路由器的所有邻居的RID
根据OSPF数据包type字段数值的不同,OSPF数据包类型分为5种,不同的type,其后面的内容也不同。
路由表的形成与这5种数据包的交互息息相关。
1.hello包-----周期10s
编号为1的OSPF数据包
功能:用于发现,和维持邻居关系的,以及DR/BDR的选举(2way)
在成为邻居之前,必须对Hello包里的一些参数进行协商,hello时间间隔默认10s,死亡间隔4倍。
Hello包在邻居之间扮演着keepalive的角色
允许邻居之间的双向通信
用于在NBMA(Nonbroadcast Multi-access)网络上选举DR和BDR
2.链路状态数据库描述数据包-------DBD
编号为2的OSPF数据包
对ospf的网络拓扑进行描述
数据包在链路状态数据库交换期间产生,主要作用有三个:
①选举交换链路状态数据库过程中的主从关系
②确定交换链路状态数据库过程中的初始序列号
③交换所有的LSA数据包头部
虚链路中,MTU字段必须设置为 0 。
在部分路由数据库信息丢失或过时时发送
3.链路状态请求数据包------LSR
编号为3的OSPF数据包
用于请求在DBD交换过程中发现的本路由器中没有的或已过时的LSA包细节
4.链路状态更新数据包---LSU
编号为4的OSPF数据包
功能:用于存储和传递路径信息
用于将多个LSA泛洪,也用于对接收到的链路状态更新进行应答
5.链路状态确认数据包-----LSAck
编号为5的数据包
用于对接收到的LSU进行确认。
如果发送确认的路由器的状态是DR或者BDR,确认数据包发送到OSPF的组播地址224.0.0.5
如果发送确认的路由器状态不是DR或BDR,确认将被发送到OSPF路由器组播地址224.0.0.6
1.问题引出
在运行OSPF的MA网络中包括广播型和NBMA网络会存在两个问题:
1)、在一个有n个路由器的网络中,会形成(n*(n-1))/2邻居关系。
2)、邻居间LSA的泛洪扩散混乱,相同的LSA会被复制多份,
这样的工作效率显然是很低的,消耗资源,那么如何解决这个问题的呢?
2.DR与BDR的作用
1)DR(designated router)即指定路由,其负责在MA网络建立和维护邻接关系并负责LSA的同步。
2)DR与其他所有的路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息,这样就大大 减少了MA网络中的邻接关系数据 及交换链路状态信息消耗的资源。
3)DR一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态数据库也无法同步,此时就需要重新选举 DR、再与非DR路由器建立邻接关系,完成LSA的同步,为了规避单点故障风险,通过选举备份指定路由器BDR,在DR 失效时快速接管DR的工作。
3.DR与BDR的选举规则
1)DR/BDR的选举是基于接口的
2)接口的DR优先级越大越优先。接口的DR优先级相等时,router ID越大越优先。
3)接口DR优先级相等时,router ID越大越优先
4)接口DR优先级为0,表示不参与选举,router priority最大不一定是DR/BDR
5)在P2P网络及P2MP网络上具有邻居关系的路由器之间会进一步建立邻接关系。但在广播型及NBMA网络上,非DR BDR路由器之间只能建立邻居关系,不能建立邻接关系。非DR/BDR路由器与DR/BDR路由器之间会建立邻接关系,DR 与BDR之间也会建立邻接关系。
4.DR和BDR的选举
1.优先级为0的不参与选举;
2.优先级高的路由器为DR;
3.优先级相同时,以router ID 大为DR;router ID 以回环接口中最大ip为准;若无回环接口,以真实接口最大ip为准。
4.缺省条件下,优先级为1。
5.要注意的是,当网络中已经选举了DR/BDR后,又出现了1台新的优先级更高的路由器,DR/BDR是不会重新选举的。
6.DR/BDR选举完成后,DRother只和DR/BDR形成邻接关系.所有的路由器将组播Hello包到AllSPFRouters
地址224.0.0.5以便它们能跟踪其他邻居的信息,即DR将泛洪update packet到224.0.0.5;DRother只组播update packet 到AllDRouter地址224.0.0.6,只有DR/BDR监听这个地址
7.先选举BDR,在选举DR。
8.ID的产生优先级:route id>loopback address>route接口最高IP
5.DR和BDR的选举需要注意以下四点:
1)只有在广播或NBMA类型接口时才会选举DR,在点到点或点到多点类型的接口上不需要选举DR。
2)DR是指某个网段的概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是DR,在另一个接口上有可 能 是BDR,或者是DR Other。
3)若DR、BDR已经选择完毕,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。
4)DR并不一定就是DR优先级最大的路由器;同理,BDR也并不一定就是DR优先级第二大的路由器。
六、邻接关系建立的4个阶段:
1.邻居发现阶段
2.双向通信阶段:Hello报文都列出了对方的RID,则BC完成.
3.数据库同步阶段:
4.完全邻接阶段: full adjacency
邻居关系的建立和维持都是靠Hello包完成的,在一般的网络类型中,Hello包是每经过1个HelloInterval发送一次,有1个例外:在NBMA网络中,路由器每经过一个PollInterval周期发送Hello包给状态为down的邻居(其他类型的网络是不会把Hello包发送给状态为down的路由器的).Cisco路由器上PollInterval默认60s Hello Packet以组播的方式发送给224.0.0.5,在NBMA类型,点到多点和虚链路类型网络,以单播发送给邻居路由器。邻居可以通过手工配置或者Inverse-ARP发现.
1.Down: 初始化状态,表明尚未从邻居收到任何数据包。
2.Attempt: 只适于NBMA网络,在NBMA网络中邻居是手动指定的,在该状态下,路由器将使用HelloInterval
取代PollInterval来发送Hello包。
3.Init: 表明在DeadInterval里收到了Hello包,但是2-Way通信仍然没有建立起来,只建立起单项通信。
4.two-way: 双向会话建立,2-way状态下选举DR和BDR,DROther间保持2-way状态。
5.ExStart: 信息交换初始状态,在这个状态下,本地路由器和邻居将建立Master/Slave关系,并确定DD
Sequence Number,RID接口等级高的的成为Master。Master最先发送LSA。
6.Exchange: 信息交换状态,本地路由器向邻居发送数据库描述包。
7.Loading: 信息加载状态,本地路由器和邻居交换LSA。
8.Full: 完全邻接状态,这种邻接出现在Router LSA和Network LSA中。
1类LSA:路由器LSA 表明此路由器连接到某链路的状态、代价,只在本区域泛洪。
2类LSA:网络LSA 网络LSA有DR生成,没有DR就不存在网络LSA,只在本区域泛洪。
3类LSA:网络汇总LSA 由ABR生成,将区域内的网络宣告到其他区域,3类LSA只在一个区域扩散,ABR
会重新生成3类LSA扩散到其他区域。 //汇总LSA并不承载任何详细路由拓扑信息,只通告网络前缀。
4类LSA:ASBR汇总LSA 用来通告ASBR的信息。
5类LSA:外部LSA 描述了ospf区域外的路由,有ASBR通告。
7类LSA:NSSA外部LSA 用于通告NSSA区域引入的ospf外部路由,由ABR将7类转为5类传播。
LSA FLOODING的过程(路由发现过程):
1) 路由选择首先发生在AREA内,开始给其他AREA发送汇总的LSA之间,整个区域必须达到同步。(见单区域OSPF 路由操作)
2) ABR检查AREA内的“链路状态数据库”,并使用TYPE 3 4生成汇总的LSA。并发送给其他网络。
3) 汇总的LSA被放在一个LSU中,通过ABR接口转发出去。
有三种情况除外:
(1)连接的路由器处于“EXCHANGE”状态以下的某种状态。
(2)连接的是完全末节区域。
(3)汇总的LSA包括TYPE 5的路由,并且连接的是末节区域。
4) ABR/ASBR收到汇总的LSA后,将他们添加到自己的“链路状态数据库”,并FLOODING到本地区域。
更新路由表(维护路由):
1) 所有路由器首先计算到区域内目的地的路径,并添加到路由表。TYPE 1 2(见单区域OSFP操作中的“路由维护”)
2) 所有路由器计算到其他区域的路径。TYPE 3 4
3) 除末节区域的路由器外,所有路由器都计算到AS外部的路由。
不透明LSA:
TYPE 9-----只向本地网络进行flooding3. OSPF的区域类型
1) 标准区域:能接收链路状态更新和汇总。
2) 主干区域:AREA0,其他区域必须连接到该区域,以交换路由信息。
3) 末节区域:不接收TYPE 5的链路状态更新。
4) 完全末节区域:不接收TYPE 3 4 5的链路状态更新
5) 次末节区域:接收TYPE 7的链路状态更新,可以在ABR对TYPE 7的LSA进行汇总。
骨干区域:area0区域
标准区域:允许存在的所有内部和外部路由
末节区域(stub area): ----------命令area area-id stub
特点:
过滤外部路由,不接受外部AS的LSA(即5类LSA),3类LSA正常通行
ABR上可设默认度量值:area area-id default-metric metric 默认值为1.
只有一个出口,无虚链路经过,不是主干区域,无ASBR(except that the ABRs may also be ASBRs),最好只有一个 ABR,多个ABR可能导致次优路由。
ABR会自动向末节区域内发送一条指向自己的默认路由。
作用:
减少拓扑表(database-table)的大小,减少路由(route-table)表大小。
完全末节区域(Totally stubby area):不允许外部路由和汇总路由(3.4.5类)
命令:区域内路由器 area area-id stub,在ABR上area area-id stub no-summary。
特点:
隔离3类和5类LSA,即:不接受AS外路由及不接受同AS内的其他area路由汇总。
ABR会自动向区域内发送一条指向自己的默认路由。
跟stub area一样,只有一个出口,无虚链路通过,无ASBR(except that the ABRs may also be ASBRs),不是主干区 域。最好只有一个ABR。
作用:
比stub更进一步减少拓扑表(database-table)和路由表(route-table)大小。除了本完全末节区域内路由条目和一条默 认产生的指向ABR的路由条目外,不再需要其他路由条目。
可以发现,末节区域与完全末节区域的不同之处在于:末节区域可以允许其它OSPF区域的路由(Inter-Area Route)进 入,而完全末节区域却不可以。(也就是是否隔离3类LSA而已)话说完全末节区域只是比末节区域多隔离了3类LSA,其 他一样。
问题来了:既然有完全末节区域,末节区域的存在还有什么意义?看上去完全末节区域更为简洁、更为节约资源。
红头发回答:“因为只有cisco才有totally stub area,其他厂家没有。”
次末节区域NSSA: Not-So-Stubby Area
命令:区域内所有路由器area area-id nssa
特点:
允许接受以类型7的LSA发送的外部路由信息,并且ABR要负责把类型7的LSA转换成类型5的LSA。
从别的AS或者别的路由协议引进来的就定义不7类LSA,为让本OSPF的AS内其他路由器可识别,在NSSA的ABR会把7 类转为5类LSA。再强调:所有的末节区域的ABR总是过滤掉5类LSA。
与其他AS相接的路由器称为ASBR。
由于自身可以将外部网络的路由重分布进OSPF进程,所以ABR不会自动向NSSA区域内发送一条指向自己的默认路由, 但可以手工向NSSA域内发送默认路由(R1(config-router)#default-information originate [always]),并且只可在ABR上 发送默认路。
NSSA与末节区域的最大区别在于,NSSA区域可以允许自身将外部路由重分布进OSPF,而末节区域则不可以。
作用:
除了跟stub area一样减少拓扑表减少路由表大小外,还具备灵活性,可以由ASBR外接其他AS(或其他路由协议重分发)
完全次末节区域Totally NSSA:Totally Not-So-Stubby Area
命令:在ABR上R4(config-router)#area 1 nssa no-summary,其他area 1 nssa即可。
特点:
在Totally Not-so-Stubby Area(Totally NSSA)下,ABR将过滤掉所有外部路由和其它OSPF区域的路由(Inter- Area Route)进入Totally NSSA区域,但路由器可以将外部路由重分布进OSPF进程,即Totally NSSA区域内的路由器可 以成为ASBR,由于没有去往其它OSPF区域的路由,所以ABR会自动向Totally NSSA内发送一条指向自己的默认路由。
Totally NSSA与NSSA的区别在于,NSSA区域可以允许其它OSPF区域的路由(Inter-Area Route)进入,而 TotallyNSSA区域却不可以,但Totally NSSA区域的ABR会自动向Totally NSSA区域内发送一条指向自己的默认路由。
过滤3,4,5类lsa,ABR会产生缺省的3类lsa,该区域能引入外部路由
7类LSA在这里还是7类LSA,出本area后就变成5类而传播了
作用:
自动发现默认路由,比NSSA更进一步减少表大小
七类LSA不同区域内引入路由:
stub过滤4,5类lsa,ABR会产生缺省的3类lsa,区域内不能引入外部路由
total stub过滤3,4,5类lsa,ABR会产生缺省的3类lsa,区域内不能引入外部路由
nssa过滤4,5类lsa,ABR会产生缺省的7类lsa,该区域能引入外部路由
total nssa过滤3,4,5类lsa,ABR会产生缺省的3类lsa,该区域能引入外部路由
1.点到点类型 通常用PPP或HDLC进行封装
OSPF能自动检测邻居
通过组播地址224.0.0.5发送
2. 广播多路访问网络 通常用于LAN网络,以太网或令牌环
ospf自动发现邻居接口类型
需要选举DR和BDR
DR发送使用组播224.0.0.5,接受使用224.0.0.6
默认hello间隔10s dead间隔40s
3.非广播多路访问网络NBMA 支持多台路由器但不具备广播能力
常用ATM、X.25、帧中继
不能自动发现邻居
需要选举DR和BDR
默认hello间隔30s dead间隔120s
4.点到多点网络类型 该环境需要手工指定网络类型
不需要选举DR和BDR,只使用一个子网
通过组播发送,自动发现邻居
默认hello间隔30s dead间隔120s
5.虚链路(Virtual Link)以下2中情况需要使用到虚链路:
1. 通过一个非骨干区域连接到一个骨干区域.
2. 通过一个非骨干区域连接一个分段的骨干区域两边的部分区域.
6.虚链接是一个逻辑的隧道(Tunnel),配置虚链接的一些规则:
1. 虚链接必须配置在2个ABR之间.
2. 虚链接所经过的区域叫Transit Area,它必须拥有完整的路由信息.
3. Transit Area不能是Stub Area.
4. 尽可能的避免使用虚链接,它增加了网络的复杂程度和加大了排错的难度.
1、快速收敛,OSPF是真正的LOOP- FREE(无路由自环)路由协议?源自其算法本身——链路状态及最短路径树算法
2、区域划分?提出区域(Area)划分的概念,将自治系统划分为不同区域后,通过区域之间的对路由信息的摘要,大大
减少了需传递的路由信息数量,也使得路由信息不会随网络规模的扩大而急剧膨胀。
3、开销控制?将协议自身的开销控制到最小,目的如下所示:
用于发现和维护邻居关系的是定期发送的不含路由信息的hello报文,非常短小,包含路由信息的报文是触发更新
的机制,而且只有在路由变化时才会发送,但为了增强协议的健壮性,每30分钟全部重发一次。
4、在广播网络中,使用组播地址(而非广播)发送报文,减少对其他不运行OSPF的网络设备的干扰。
5、在各类可以多址访问的网络中(广播型网络和非广播型多路访问),通过选举DR(指定路由器),使同网段的路由器之间 的路由交换(同步)次数由O(N×N)次减少为O(N)次?
6、OSPF协议提出STUB区域的概念,使得STUB区域内不再传播引入的ASE路由。
7、在ABR(区域边界路由器)上支持路由聚合,进一步减少区域间的路由信息传递。
8、在点到点接口类型中,通过配置按需播号属性(OSPF over On Demand Circuits),使得OSPF不再定时发送
hello报文及定期更新路由信息,只在网络拓扑真正变化时才发送更新信息。
9、路由可信,通过严格划分路由的级别(共分4级),提供更可信的路由选择。
10、安全性高,良好的安全性,OSPF支持基于接口的明文及MD5 验证。
11、适应性广,OSPF适应各种规模的网络,最多可达数千台。
OSPF协议主要缺点如下:
1.配置相对复杂,由于网络区域划分和网络属性的复杂性,需要网络分析员有较高的网络知识水平才能配置和管理OSPF网络。
路由负载均衡能力较弱?OSPF虽然能根据接口的速率?连接可靠性等信息,自动生成接口路由优先级,但在通往同一目的的不同优先级路由中,OSPF只选择优先级较高的转发,不同优先级的路由中,不能实现负载分担?只有相同优先级的,才能达到负载均衡的目的,不像EIGRP那样可以根据优先级不同,自动匹配流量。
排除ospf故障
一)ospf邻居列表为空
1、路由器接口未参与ospf进程
2、网络1、2层故障
3、路由器接口设置为ospf passive模式
4、ospf hello 数据包被访问列表拦截
5、广播链路俩端的ip子网/子网掩码不匹配
6、ospf邻居所发hello数据包的hello/dead interval字段值不匹配
7、认证类型不匹配
8、认证密钥不匹配
9、区域ID不匹配
10、stub/NSSA区域选项不匹配
11、企图用接口secondary IP来建立ospf邻接接口 用独臂路由技术划分子接口
12、企图通过路由器的异步接口来建立ospf邻居关系 异步接口必须激活才能使用
二)ospf邻居路由器逗留在Attempt状态
本故障只能发生在NBMA环境中设有neighbor命令的ospf路由器上。
1、neighbor配置有误
2、NBMA环境中的ip单播连通性遭到破坏
①帧中继或ATM交换机映射错误DLDC或VPI/VCI标号
②访问列表破坏单播连通性
③单播ospf协议数据包包头中的ip地址经过NAT转换
三)ospf邻居路由器逗留在Init状态
1、ospf邻居中一方设有访问列表,单向拦截ospf hello数据包
2、多播连通性遭到单向破坏(6500交换机启用protocol filter)
3、单方启用ospf认证
4、fame-rely map/dialer map命令中为包含broadcast关键字
5、第2层故障导致hello数据包丢失
四)ospf邻居路由器逗留于2-way状态
原因: 把所有路由器ospf优先级都设为 0
五)ospf邻居路由器处于exstart/exchange状态
1、ospf邻居路由器MTU值不匹配
2、ospf邻居路由器间router-id冲突
3、接口不能发送长度超出MTU值的数据包
4、ip单播连通性遭到破坏
①帧中继或ATM交换机映射错误DLDC或VPI/VCI标号
②访问列表破坏单播连通性
③单播ospf协议数据包包头中的ip地址经过NAT转换
5、PRI和BRI拨号接口的ospf网络类型为point-to-point
六)ospf邻居处于loading状态
1、MTU值不匹配
2、LSR数据包遭到破坏
1、ospf不通告路由
1)通告接口为参与ospf进程
2)接口问题
3)同一路由器主Ip和secondary ip处于不同区域,这样不会通告secondary ip。
2、ABR不通告汇总路由
1)将常规区域配置为 totally nssa区域
2)ABR位于未于区域0相连
3)区域0未能连成一气
3、ospf路由器不通告外部路由
1)将ospf常规区域配置为stub或nssa区域 在配置常规区域错误为stub区域时,进入rip重分布后,将stub区域转为 NSSA区域//将rip的路由条目由为7类LSA转5向外发布
2)NSSA ABR为能将7类转换为5类
4、ASBR不通告默认路由
1)ASBR上未设有default-information originate命令
2)ASBR上设有default-information originate命令,但路由表中没有默认路由。
3)常规区域配置为stub区域。
5、ospf路由重分布故障
ospf未通告外部路由器
1)ASBR上的router ospf配置命令redistribure未包含subnets关键字
2)ASBR出站方向的distribute-list命令阻止了外部路由的通告
配置LOOPBACK接口地址
ROUTER(config)#interface loopback 0
ROUTER(config)#ip address IP地址 掩码
1.ospf区域的配置
router ospf 100
network 192.168.1.0 0.0.0.255 area 0
router-id 192.168.2.1 手动设置router-id
area 1 default-cost 50 手动设置开销
#clean ip ospf process
2.配置ospf明文认证
interface s0
ip ospf authentication
ip ospf authentication-key <密码>
3.配置ospf密文认证
interface s0
ip ospf authentication
ip ospf message-digest-key 1 md5 7 <密码>
4.debug ip ospf adj 开启ospf调试
show ip protocols
show ip ospf interface s0
5.手动配置接口花销,带宽,优先级
inter s0
ip ospf cost 200
bandwith 100
ip ospf priority 0
6.虚链路的配置
router ospf 100
area
show ip ospf virtual-links
Show ip ospf border-routers
Show ip ospf process-id
Show ip ospf database
show ip ospf database nssa-external
7.OSPF路由归纳
Router ospf 1\\对ASBR外部的路由进行路由归纳
Summary-address 200.9.0.0 255.255.0.0
Router ospf 1\\执行AREA1到AREA0的路由归纳
Area 1 range 192.168.16.0 255.255.252.0
8.配置末节区域
IR area
ABR area
9.配置完全末节区域
IR area
ABR area
10.配置NSSA
ASBR router ospf 100
area 1 nssa
ABR router ospf 100
area 1 nssa default-information-orrginate