一、OSPF
- Open Shortest Path First 开放式最短路径优先;属于链路状态路由协议
- OSPF被IP协议封装,工作在网络层之上的一种路由协议,协议号为89
- OSPF路由信息传递与路由计算分离,基于SPF算法,以累计链路开销作为选路参考值
- OSPF四张表:邻居表、链路状态数据库、OSPF路由表、全局路由表
二、OSPF报头
- Version(1字节):版本v2代表v4网络,v3代表v6网络
- Type(1字节):类型;ospf报文的类型;一共五种(看下面OSPF报文,type1-5顺序)
- Pack Length(2字节):总长度;包括报文头部+数据
- Router ID(4字节):发送该报文的路由器标识(router id)
- Area ID(4字节):发送该报文的所属区域
- checksum(2字节):校验和,包含了除认证字段的整个报文的校验和
- Auth Type(2字节):验证类型;0:验证 1:简单验证 2:MD5认证
- Authentication(8字节):验证信息;0代表没有 1为明文密码 2为key id
三、OSPF报文
- hello 报文:发现和建立邻居关系
- 邻居发现:自动发现邻居路由器
- 邻居建立:完成hello报文中的参数协商,建立邻居关系
- 邻居保持:通过keepalive机制,检测邻居运行状态
- hello报文:
- DD 建立邻接关系:交互链路状态数据库摘要(DD报文两种情况:不携带LSA摘要信息的DD报文和携带LS摘要信息的DD报文)
- LSR 链路状态请求:请求特定的链路状态信息
- LSU 链路状态更新:发送详细的链路状态信息(拥有完成LSA)
- LACK 链路状态确认:发送确认报文
HELLO报文中影响邻居关系的因素:
- router id(不冲突)
- area id(一致)
- 认证类型(一致)
- 认证数据(一致)
- Hello时间间隔(一致)
- Hello失效时间(一致)
- N bit和E bit取值(一致)
DD、LSR、LSU、LSAck与LSA的关系:
DD报文:携带LSDB所有LSA的摘要信息;摘要信息包括:type、Ls id、Advertising Router、ls age(老化时间)、seq(序列号)、chksum(校验和)等信息
LSR:携带LSA的标识;type、Ls id、Advertising Router
LSU:携带LSA的头部以及链路状态
LACK:包含LSA摘要信息,跟DD报文一样
OSPF协议router ID如何确认
- 管理员手动配置ospf的router id优先级最高
- 默认使用路由器的全局router id;全局router id:设备第一个配置的IP成为router ID;手动配置全局ID:router id X.X.X.X 需要重启生效
- 手动配置---->loopback最大--->物理接口最大/或者第二大(一般思科遵循此选举办法,华为设备建议手动配置)
四、OSPF工作状态
- dowm:
- 邻居初始状态;表示没有从邻居收到任何信息,此状态下可以发送hello报文,发送间隔为poll interval通常和router dead interval间隔相同
- attempt:
- 此状态只有在NBMA网络中存在。
- init:
- 此状态已经从邻居收到hello报文,但hello报文中不包含自己route id,将邻居的router id添加到hello报文中再发送出去。
- to-way:
- 收到含有自己router id的hello包进入2-way状态,建立邻接关系;根据网络类型选举DR/BDR
- ex-start:
- 这是形成邻接关系的第一个步骤;进入此状态向邻居发送DD报文(不携带LSA摘要信息的DD报文)主要确认主从路由器(router id较大称为主master)
- 为什么要选举主从路由器;通过DD报文序列号+1机制实现隐式确认,保障数据可靠传输;
- I(init)置1,表示第一个DD报文 M(more)置1表示后续还有其他DD报文 MS(master)置1表示自己为master
- ex-change
- 将自身LSDB中所有LSA信息摘要信息通过DD报文进行交换,实现LSDB同步;(DD报文好处:传递的是邻居之间没有的LSA头部信息,减少无用的LSA传递)
- LSDB同步:就是邻居之间最终拥有相同的LSA的信息以及LSA的新旧程度
- 摘要信息用途:
- 标识唯一条LSA(由type、ls id、adv rtr三个参数标识一条LSA)
- 用于判断LSA的新旧(seq(序列号)、chksum(校验和)、ls age(老化时间)三个参数判断新旧程度)
-
- loading
- 相互发送LSR报文请求LSA,发送LS Updata通告LSA(交互LSR和LSU)
- full
- 运行SPF算法,LSDB已经同步完成(主路由器优先进入full状态)
OSPF 邻居建立和LSDB同步过程:


判断一条LSA新旧:
- Seq(序列号)越大的越新,起始值:0x80000001 最大值:0x7fffffff
- 如果seq相同则比较chksum(检验和)越大越新
- chksum相同,则判断LS age(老化时间)是否等于3600s,等于3600s最新
- 如果LS age不等于3600s则判断ls age差值,如果大于900s则LS age小的最新,小于900s则认为相同
- DR/BDR选举
- 根据优先级选举DR/BDR;优先级高的优先;当优先级相同时router id大的优先;
- 接口优先级0-255,0代表不选举,默认是1,不具有抢占性;
- 每条广播/NBMA链路都必须选举一个DR,默认会选举BDR路由器(可选),链路上其他路由器称为Drother
- DR/BDR/Drother之间保持full的邻接关系需要进行LSDB同步;Drother之间保持tao-way的邻居关系,不进行LSDB同步;
- DR/BDR 监听:224.0.0.5和224.0.0.6 Drother监听:224.0.0.5
- 链路总结:
-
网络类型hello时间特点缺省选择备注p2p10s以组播形式发送hello报文、DD报文、LSR报文、LSU报文、LSAck报文当链路层协议是ppp、hdlc、lapb时,缺省情况下ospf网络类型是P2P
不选举DR/BDR NBMA30s以单播形式发送hello报文、DD报文、LSR报文、LSU报文、LSAck报文、NBMA网络必须是全连通的,即网络中任意两台路由器之间必须直连可达当链路层协议是ATM时,缺省情况下ospf认为网络类型是NBMADR与BDR/DRoute建立邻接关系BDR与DR/DRoute建立邻接关系DRoute之间只建立邻居关系广播(broadcast)10s通常以组播形式发送hello报文、LSU报文和LSAck报文,以单播形式发送DD报文和LSR报文当链路层协议是ethernel、FDDI时,缺省情况下ospf认为网络类型是broadcastP2MP30s以组播形式发送hello报文、以单播形式发送DD报文、LSR报文、LSU报文、LSAck报文、P2MP网络中掩码长度必须一致必须手动指定不选举DR/BDR
五、LSA
- LSA(link state Advertisement)是路由器之间链路状态信息的载体,LSA是LSDB最小的组成单位,也就是说LSDB是由一条条LSA构成的;一共6种LSA。
- LS age(16位):此字段表示LSA生存时间,单位是秒
- LS type(8位):此字段标识了LSA的格式和功能,常用的LSA类型有五种
- Link State ID(32位):此字段是该LSA所描述的的那部分链路的标识,例如:router id等
- Advertising Router(32位):此字段是产生此LSA的路由器的rouer ID
- LS sequence number(32位):此字段用于检测旧的和重复的LSA;序列号越大代表LSA越新。
- LSA checksum(16位):校验和
- Length(16位):LSA总长度
- 1800s 更新一次 3600s失效
链路状态信息
- 什么是链路?路由器之间相连的链路
- 什么是状态?链路上各种网络参数在某一个时刻的取值
- 链路的类型、接口IP地址及掩码、链路上所连接的邻居路由器、链路的带宽(开销 cost)
- 1类LSA
- router lsa
- 每个ospf路由器都会产生,描述路由器自身加入到ospf进程的直连链路的链路状态;只在区域泛洪(右图是建立邻居关系后)
- 1类LSA的链路状态由4种组成link type来进行描述;Stubnet(描述自身直连的网络号/掩码)、p-to-p(描述点对点、点对多点链路邻居)、transnet(描述广播/NBMA链路上的邻居)、virtual(描述虚链路)
- 注意:广播/NBMA 网络里会出现一个伪节点概念,广播网络里ospf在计算拓扑的时候都把当成与伪节点相连,依次来计算路由拓扑。
- 下面三张分别描述:stubnet、p-to-p、transnet
- 2类LSA
- network lsa
- 由DR路由产生,描述DR周边网络环境(包括拓扑和网络号),只在本区域泛洪
- (transNet:用于描述连接伪节点的信息,type2 LSA其实描述了伪节点连接的哪些节点)
- 3类LSA
- network summary lsa
- 网络汇总lsa,由ABR路由器产生,将区域1、2类LSA做归纳,生成3类LSA泛洪到其他区域中。
- 一条三类LSA只能传递一条路由;(如果1类2类LSA很多那么生成的三类LSA路由也会很多)
- 4类LSA
- asbr summary lsa
- 由ABR路由器产生,描述ASBR路由所在区域的位置
- 5类LSA
- AS external LSA 自治系统外部LSA(外部引入路由)由ASBR路由器产生,用来通告网络去往其他路由协议的LSA。
- 外部路由通过重分布引入到ospf路由域中,以5类LSA进入ospf区域。引入外部路由时默认是type2的路由;
- type 1:路由表始终显示引入时开销和AS内部路径开销之和
- 同类型的路由,选择cost小的,如果cost值相同则负载分担,路由意义上选路方式,OSPF根据SPF算法自动选路;
- type2:引入外部路由时在路由表中忽略AS内部路径的开销,仅显示引入的开销,cost默认是1;
- 同类型的路由,优先比较引入时的开销,引入时的开销值小的优先,如果引入时开销相同则比较AS内部路径开销,即选择到ASBR近的优先,如果内部开销也相同则负载分担;管理意义上的选路方式,人为可控。
- 7类LSA
- nssa external lsa
- 由NSSA区域中的ABR/ASBR产生,描述到达外部网络的信息
- 总结:
六、OSPF区域
- OSPF将网络划分成两层区域结构
- 一层为骨干区域(area 0)
- 一层为非骨干区域(非area 0)
- 非骨干区域一定要和骨干区域相连
- OSPF路由类型:
- 区域内路由:由1类和2类LSA产生
- 把整个OSPF的一棵大树划分成几个小树;1类和2类LSA各自在树内的计算路由
- 区域间路由:由3类LSA产生
- 把各自树内计算出的路由通过转换成三类LSA在区域间传递,一条区域内路由只能转换成一条区域间的路由
- ABR将自身直连区域内路由转化其他直连区域3类LSA,完成区域间路由计算;ABR将区域0中的3类LSA转换成其他非骨干区域的3类
- 区域间路由的计算方法:cost=自身到ABR的开销+ABR到路由的开销
- 区域外路由:由5类和7类LSA产生
- 区域内路由:由1类和2类LSA产生
ABR:连接多个区域并且至少一个活动的接口属于区域0的路由器
IR:区域颞部路由器,所有接口都属于同一个区域的路由器
ASBR:连接其他自治系统的路由器称为ASBR
虚链路介绍:
- 主要创建vlink的路由器都是ABR
- vlink永远属于区域0的链路
- vlink只能在非骨干区域创建,只能跨越一个非骨干区域
- 特使区域不能创建vlink
- 用于修复不连续的骨干区域
- 将非骨干区域和骨干区域相连起来
- 可以作为区域0的备用路线,能不用就不用
- 配置:骨干区域配置vlink-peer X.X.X.X:非骨干区域的IP地址 非骨干区域:vlink-peer X.X.X.X:骨干区域IP地址
特殊区域介绍:
- stub区域(末节区域)
- 不允许5类LSA在该区域泛洪,不会产生4类LSA;
- ABR为该区域产生一条3类LSA的缺省路由用于访问外部路由;区域试图下:default-cost修改缺省路由的开销
- 通过3类的LSA用于访问区域间的路由;
- 该区域的所有路由器都要配置成末节区域
- totally stub(完全末节区域)
- 不允许5类LSA在该区域泛洪,不产生3类和4类lsa
- 该区域的ABR产生一条3类的LSA用于访问区域间路由和外部路由
- 该区域的ABR路由配置成完全末节区域,IR路由器配置成末节区域
- 和ASBR在同一个区域路由如何计算外部路由?
- Cost=自身到ASBR的开销+引入时的开销(5类) next-hop=自身到asbr的下一跳
- 和ASBR不在同一个区域的路由器如何计算外部路由?
- Cost=自身到ABR的开销+ABR到ASBR的开销(4类)+引入时的开销(5类) next-hop=自身到asbr的下一跳
- nssa
- 允许本区域ASBR引入外部路由,以7类LSA形式引入;
- 只能在本区域泛洪,不能在其他区域泛洪
- 不允许其他区域的ASBR产生的5类LSA泛洪,不产生4类LSA
- NSSA区域的ABR产生一条7类缺省路由,用于访问其他区域引入外部路由
- NSSA区域ABR将7类LSA转成5类LSA泛洪到其他区域,如果有多个ABR则router ID大的ABR去做7转5;nssa translator-always 这条命令可以指定某个ABR做7转5;
- totally nssa
- 允许本区域的ASBR引入外部路由,以7类的LSA方式引入
- 不允许其他ASBR产生的5类LSA泛洪,不产生4类LSA
- 不产生3类lsa,由NSSA区域的ABR产生一条3类LSA的缺省路由,用于访问区域间路由
- NSSA区域的ABR产生一条7类LSA的缺省路由,用于访问其他区域引入的外部路由(存在两条缺省路由,一条3类,一条7类,优选3类的LSA的缺省路由)
- 7类LSA只能在NSSA区域泛洪,不能泛洪到其他区域
- NSSA区域的ABR将7类LSA转成5类LSA泛洪到其他区域,如果有多个ABR,则router id大的ABR去做7转5;nssa translator-always
- 总结:
-
特点stub 区域totally stub区域nssa区域totall nssa区域是否必须位于AS边缘是是否否ABR数量1个1个1个或者多个1个或者多个是否允许有ASBR不允许不允许允许一个或者多个允许一个或者多个是否允许虚连接穿过不允许不允许不允许不允许type 3 LSA允许不允许允许不允许type 4 LSAtype 5 LSA不允许不允许不允许不允许type 7 LSA不允许不允许允许不允许缺省路由自动生成一条默认路由;下一跳是所在区域内的ABR路由器接口地址;自动生成一条默认路由;下一跳是所在区域内的ABR路由器接口地址;自动生成一条默认路由;下一跳是所在区域内的ABR路由器接口地址;自动生成两条默认路由;一条3类,一条7类允许的LSAtype 1 LSAtype 2 LSAtype 3 LSAtype 1 LSAtype 2 LSAtype 1 LSAtype 2 LSAtype 3 LSAtype 7 LSAtype 1 LSAtype 2 LSAtype 7 LSA不允许的LSAtype 4 LSAtype 5 LSAtype 7 LSAtype 3 LSAtype 4 LSAtype 5 LSAtype 7 LSAtype 4 LSAtype 5 LSAtype 3 LSAtype 4 4 LSAtype 5 LSA
七、路由汇总
- 区域间路由汇总
- 只能在ABR上执行。只能对直连区域的路由汇总(即对区域内的路由)
- 汇总路由的开销默认继承明细路由中开销最大的值
- 明细路由全部失效,汇总路由也会失效(哪怕明细路由只有一条可达,汇总路由也不会失效)
- 如果区域有多个ABR,所有ABR都要执行汇总,否则失去汇总的效果
- 外部路由汇总
- 只能在ASBR上执行
- 汇总路由开销类型继承明细路由的开销类型,如果明细路由开销类型不一致则默认为type2
- NSSA区域的外部路由汇总可以在ASBR上执行,也可以再NSSA区域的ABR执行
八、路由过滤
- 过滤工具filter-policy
- import方向:对接收路由设置过滤策略,只有通过过滤策略的路由才被添加到路由表中,但不影响对外发布路由。ospf路由信息记录在lsdb中,实际上只是对ospf计算出来的路由进行过滤,不能对LSA过滤
- export方向:通过引入外部路由后通过filter-policy对引入路由发布时进行过滤,将满足条件的外部路由转换为type5、type7发布出去。先引入路由,再过滤。filete-policy acl name filter-export
九、OSPF防环
- 区域内
- 在区域内每个路由器都维护一个独立的lsdb,根据SPF算法得出最优路由,算法本身防环。
区域间:
- 所有非骨干区域必须和骨干区域相连,区域间路由需要通过骨干区域中转。
- ABR只能将本区域内部路由注入到area 0(ABR存在其他区域的路由不会注入到area0中)但可以将区域内部路由以及区域间的路由注入到非0区域
- ABR从非骨干区域收到type-3LSA不能用于区域间路由计算
- ABR不会将area 0内部路由信息type-3再注入该区域中(情景:三角网络架构其中路由器1、2为区域0,与另一台路由器3非0区域相连,路由1通过路由器3把type-3路由信息传递到了路由器2,路由器2不会把该type-3路由信息再此传递给路由器1)
- ospf通过down位防环,3类LSA DN比特不仅可以防环还可以优化数据转发;DOWN比特在把多协议BGP引入到ospf时3类LSA自动添加,其他PE设备如果检测到3类LSA中down位 置位就拒绝再引回BGP(自动完成)
- ospf 通过tag防环,主要针对5类和7类;在MPLS VPN环境下,会把BGP的AS号放到5、7类的tag字段,其他PE设备检测到TAG位和自身的AS号相同就拒绝路由。display ospf lsdb ase 可以看到TAG 值
OSPF 不能建立原因:
- 路由器接口未参与OSPF 进程
- 网络一二层故障
- 路由器接口被设置为passive接口
- Hello 包被acl 拦截
- MA 网络子网掩码不匹配
- Hello包时间间隔不匹配
- 认证类型和认证密钥不匹配
- 区域ID 和 router id
- Stub/NSSA 区域选项不匹配
- P2MP 中FR没有配置broadcast
- 企图用接口辅助地址建立邻居