OSPF开放式最短路径优先协议-个人总结

OSPF 介绍

  1. OSPF(Open Shortest Path First)开放式最短路径优先协议是一个内部网关协议IGP),是一种链路状态路由协议,采用最短路径优先SPF)算法计算到达目的地的最短路径,由此构建路由表;

OSPF 网络类型

  1. 点到点网络(P2P不选举DR、BDR,二层协议为PPP、HDLC等时,自动检测为P2P网络类型;
  2. 广播多路访问(Broadcast需要选举DR、BDR(这样在一个网段内存在多台路由器时,无需两两互相建立联系,避免大量开销而浪费资源)。使用Hello消息通过组播地址224.0.0.5周期性广播发现邻居。DR、BDR侦听组播224.0.0.6
  3. 非广播多路访问(NBMA需要选举DR、BDR,采用静态发现即手动指定邻居(比动态发现邻居减少大量的流量)。由DR负责向其他路由器逐一发送Hello消息;
  4. 点到多点网络(P2MP只能手动强制更改至该网络类型;
网络类型 建立邻居和学习路由的说明
P2P 可以与Broadcast、NBMA建立邻居关系,但无法学习路由;可以与P2MP建立邻居关系,且能学习到路由(hello time和dead time一致的情况下)
Broadcast 可以与P2P建立邻居关系,但无法学习路由;可以与NBMA建立邻居关系,且能学习到路由(hello time和dead time一致的情况下)
NBMA 可以与P2P建立邻居关系,但无法学习路由;可以与Broadcast建立邻居关系,且能学习到路由(hello time和dead time一致的情况下)
P2MP 可以与P2P建立邻居关系,且能学习到路由(hello time和dead time一致的情况下)

OSPF 报文和格式

OSPF首部报文格式:(byte)
OSPF开放式最短路径优先协议-个人总结

部分字段 说明
Packet Type 对应5类报文(如1:Hello)
AuType 认证类型,为0代表不认证,1为简单认证,2为MD5认证
  1. Hello报文:用于建立、发现和维护邻居关系;
    OSPF开放式最短路径优先协议-个人总结
部分字段 说明
HelloInterval 默认10s
Options 可选项,E为允许5类LSA泛洪,N/P为允许7类LSA泛洪
Rtr Pri 指定优先级,默认1,为0代表不参与DR/BDR选举
RouterDeadInterval 指定路由器失效时间,默认40s
  1. DD报文:用于描述本地路由器的LDSB(即LSA摘要),还有选举主从(空的LSA首部);
    OSPF开放式最短路径优先协议-个人总结
部分字段 说明
Options 可选项,E为允许5类LSA泛洪,N/P为允许7类LSA泛洪
I 多个连续报文的第一个置1
M 多个连续报文的最后一个置0
MS 主从选举,1代表主Master,0代表从Slave
  1. LSR报文:用于请求相邻路由器LSDB里的部分数据;
    OSPF开放式最短路径优先协议-个人总结

  2. LSU报文:用于应答LSR报文,也用于向对端路由器发送所需的真正LSA完整内容;
    OSPF开放式最短路径优先协议-个人总结

  3. LSAck报文:用于确认收到了LSU报文,内容含有所确认的LSA首部;
    OSPF开放式最短路径优先协议-个人总结

OSPF 状态机

流程图预览
OSPF开放式最短路径优先协议-个人总结

  1. Down初始状态,还未收到任何Hello报文;
  2. Attempt(只在NBMA才有的状态):定期向手工配置的邻居发生Hello报文,且一直未收到对方的Hello报文,如果超过Dead time没收到,转为Down状态;
  3. Init收到Hello报文(目的地址为组播224.0.0.5),同时该Hello报文中的邻居列表里还没有我的RouterID即对方未收到我的Hello报文,立刻单播发送给对方Hello报文,报文中的邻居列表包含自己和对方的RouterID;
  4. 2-Way此时双方都收到了对方的Hello报文,建立了邻居关系(在广播和NBMA网络中,会选举DR、BDR,优先根据接口优先级越大越优先 > RID越大越优先,DROther之间会停留在该状态);
  5. ExStart开始发送DD报文(不包含链路信息),选举主从关系(RouterID大的为主),确定DD***
  6. Exchange交换DD报文(保护LSA首部),描述本地LSDB;
  7. Loading发送LSR,通过更新LSU、LSA报文,互相补充缺少的DD报文,完善LSDB;
  8. Full此时邻居路由器的LSDB同步完成,形成了邻接关系;
停留状态 原因分析
Down 一直没收到邻居的Hello报文
Attempt 已发送单播Hello报文,但是没有收到Hello报文
Init 收到了Hello报文,但该报文邻居列表不包含接受路由器
2-Way 广播和NBMA网络中,DROther之间会正常停留在该状态
ExStart 邻居路由器直接MTU不匹配或RouterID重复等原因
Exchange 邻居路由器之间MTU不匹配
Loading MTU不匹配或硬件故障

OSPF LSA类型

LSA首部
OSPF开放式最短路径优先协议-个人总结

LS type Link State ID Advertising Router
Router-LSA(1) 产生此LSA的路由器RID 始发对应LSA的路由器RID
Network-LSA(2) DR的接口IP地址 始发对应LSA的路由器RID
Summary-LSA(IP network)(3) 所通告的区域外的网络地址 始发对应LSA的路由器RID
Summary-LSA(ASBR)(4) 所通告区域外的ASBR的RID 始发对应LSA的路由器RID
AS-External-LSA(ASBR)(5) 所要通告的外部AS的网络地址 始发对应LSA的路由器RID
NSSA AS-External-LSA(7) 所要通告的外部AS的网络地址 始发对应LSA的路由器RID
  1. Type1 LSA即Router LSA(路由器LSA):每个OSPF路由器都会产生路由器LSA,内容包含了对应设备物理接口所连接的链路或接口,并且指明了各链路的状态、开销等参数;
    OSPF开放式最短路径优先协议-个人总结
Type Link ID Link Data
1 - Point-to-point connection to anther router 对端路由器RID 和网络相连的通告路由器接口地址
2 - Connection to a transit network DR的接口地址 和网络相连的通告路由器接口地址
3 - Connection to a stub network 子网号 掩码
4- Virtual link 对端路由器RID 和网络相连的通告路由器接口地址
  1. Type2 LSA即Network LSA(网络LSA):由DR或BDR产生,内容包含了DR和BDR所在网段的链路状态,也仅在所属的区域内传播;
    OSPF开放式最短路径优先协议-个人总结

  2. Type3 LSA即Network summary LSA(网络聚合LSA):由ABR产生,内容包含了所连接的某个区域内某个网段的聚合路由(包括缺省路由),并通告非Totally Stub或NSSA区域,达到减少区域内部路由器的路由表表项的目的;
    OSPF开放式最短路径优先协议-个人总结

  3. Type4 LSA即ASBR summary LSA(ASBR聚合LSA):由ABR产生,内容包含了从该ABR到达OSPF路由域中各个ASBR的路由,通告给整个路由域(仅在普通区域中泛洪);
    OSPF开放式最短路径优先协议-个人总结

  4. Type5 LSA即Autonomous system external LSA(自治系统外部LSA):由ASBR产生,内容包含了到达AS外部的路由,仅在普通区域中泛洪;
    OSPF开放式最短路径优先协议-个人总结

E 说明
0:第一类外部路由 手动配置,优先级高于第二类外部路由,开销为内外部开销之和
1:第二类外部路由 默认,优先级低于第一类外部路由,开销为外部开销,忽略内部开销
  1. Type7 LSA即NSSA External LSA(NSSA外部LSA):由ASBR产生,内容同Type5 LSA,但专用于NSSA区域和Totally NSSA区域连接的ASBR向NSSA区域内泛洪外部AS的路由,然后经过NSSA区域ABR上转换为Type5 LSA向OSPF路由域内其他区域中传播;
    OSPF开放式最短路径优先协议-个人总结

OSPF 链路类型

  1. Point-to-point connection to anther router(P2P):网络类型为P2P的接口,在OSPF中的P2P网络里会与末梢链路同时出现(P2P链路描述对端RID及本地接口,末梢链路描述子网);
  2. Connection to a transit network(传输链路):拥有至少两台路由器的链路,即有OSPF邻居的接口(除了P2P类型);
  3. Connection to a stub network(末梢链路):该接口没有邻OSPF邻居;
  4. Virtual link(虚链路):逻辑链路,可以使非直连骨干区域area0的区域通过虚链路逻辑上与骨干区域相连;

OSPF 特殊区域

  1. Stub区域(末节):把一个非骨干区域配置成Stub区域,不接受Type4 LSA和Type5 LSA,通过ABR自动生成(多一条)的默认路由(Type3 LSA)指向骨干区域;
  2. Totally stub区域(完全末节):同Stub区域,只是同时不接受Type3 LSA,LSDB中只有一条Type3 LSA默认路由指向骨干区域;
  3. NSSA区域不接受Type4 LSA和Type5 LSA,但是可引入外部路由,以Type7 LSA通告出去,在ABR上转换为Type5 LSA向普通区域泛洪,同样ABR会下放一条默认路由(Type7 LSA);
  4. Totally stub区域同NSSA区域,不接受Type3 LSA,LSDB中只会存在一条Type3 LSA的默认路由;