1、华为 OSPF 总结1 OSPF 基本概念1.1 拓扑和路由器类型OSPF 整体拓扑 OSPF 把自治系统划分成逻辑意义上的一个或多个区域,所有其他区域必须与区域 0 相连。路由器类型 区域内路由器(Internal Router):该类设备的所有接口都属于同一个OSPF 区域。 区域边界路由器 ABR(Area Border Router):该类路由器可以同时属于两个以上的区域,但其中一个接口必须在骨干区域。ABR 用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 骨干路由器(Backbone Router):该类路由器至少有一个接口属于骨干区域。所有的
2、 ABR 和位于 Area0 的内部路由器都是骨干路由器。 自治系统边界路由器 ASBR(AS Boundary Router):与其他 AS 交换路由信息的路由器称为 ASBR。ASBR 并不一定位于 AS 的边界,它可能是区域内路由器,也可能是 ABR。只要一台 OSPF 路由器引入了外部路由的信息,它就成为 ASBR。拓扑所体现的 IS-IS 与 OSPF 不同点 在 OSPF 中,每个链路只属于一个区域;而在 IS-IS 中,每个链路可以属于不同的区域; 在 IS-IS 中,单个区域没有骨干与非骨干区域的概念;而在 OSPF 中,Area0 被定义为骨干区域; 在 IS-IS 中,Le
3、vel-1 和 Level-2 级别的路由都采用 SPF 算法,分别生成最短路径树 SPT 而在 OSPF 中,只有在同一个区域内才使用 SPF 算法,区域之间的路由发布还是距离矢量算法,区域之间的路由需要通过骨干区域来转发。1.2 OSPF 网络类型,DR,BDR 介绍OSPF 支持的网络类型 点到点 P2P 类型:当链路层协议是 PPP、HDLC 时,缺省情况下,OSPF认为网络类型是 P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello 报文、DD 报文、LSR 报文、LSU 报文、 LSAck 报文) 。 点到多点 P2MP 类型(Point-to-Mul
4、tipoint ):没有一种链路层协议会被缺省的认为是 Point-to-Multipoint 类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的 NBMA 改为点到多点的网络。在该类型的网络中以组播形式(224.0.0.5)发送 Hello 报文,以单播形式发送其他协议报文(DD 报文、 LSR 报文、LSU 报文、 LSAck 报文) 。 NBMA 类型( Non-broadcast multiple access):当链路层协议是 ATM 时,缺省情况下,OSPF 认为网络类型是 NBMA。在该类型的网络中,以单播形式发送协议报文(Hello 报文、DD 报文、LSR
5、 报文、LSU 报文、LSAck报文) 。 广播类型(Broadcast):当链路层协议是 Ethernet、FDDI 时,缺省情况下,OSPF 认为网络类型是 Broadcast。在该类型的网络中,通常以组播形式发送 Hello 报文、LSU 报文和 LSAck 报文。其中, 224.0.0.5 的组播地址为 OSPF 路由器的预留 IP 组播地址;224.0.0.6 的组播地址为 OSPF DR的预留 IP 组播地址。以单播形式发送 DD 报文和 LSR 报文。在至少含有两个路由器的广播型网络和 NBMA 网络都有一个指定路由器(DR )和一个备份指定路由器(BDR )DR/BDR 的作用
6、 减少邻居关系的数量,从而减少链路状态信息和路由信息的次数。Drother 只与 DR/BDR 建立完全邻接关系。DR 与 BDR 之间建立完全邻接关系。 DR 产生网络 LSA 来描述 NBMA 网段或者广播网段信息。DR/BDR 选举规则 DR/BDR 由 OSPF 的 Hello 协议选举,选举是根据端口的路由器优先级(Router Priority)进行的。 如果 Router Priority 被设置为 0,那么该路由器将不允许被选举成 DR 或者 BDR。 Router Priority 越大越优先。如果相同,Router ID 大者优先。 DR/BDR 不能抢占。 如果当前 DR
7、 故障,当前 BDR 自动成为新的 DR,网络中重新选举 BDR;如果当前 BDR 故障,则 DR 不变,重新选举 BDR。ISIS DIS 与 OSPF DR/BDR 的不同点 在 IS-IS 广播网中,优先级为 0 的路由器也参与 DIS 的选举,而在 OSPF中优先级为 0 的路由器则不参与 DR 的选举。 在 IS-IS 广播网中,当有新的路由器加入,并符合成为 DIS 的条件时,这个路由器会被选中成为新的 DIS,原有的伪节点被删除。此更改会引起一组新的 LSP 泛洪。而在 OSPF 中,当一台新路由器加入后,即使它的 DR 优先级值最大,也不会立即成为该网段中的 DR。 在 IS-
8、IS 广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非 DIS 路由器。1.3 OSPF 报文类型Hello 报文:用于建立和维持邻居关系DD 报文:描述本地 LSDB 的摘要信息,用于两台路由器进行数据库同步LSR 报文:用于向对方请求所需的 LSA 路由器只有在 OSPF 邻居双方成功交换DD 报文后才会向对方发出 LSR 报文LSU 报文:用于向对方发送其所需要的 LSALSAck 报文:用来对收到的 LSA 进行确认OSPF 报文概述 OSPF 报文直接运行于 IP 之上,IP 协议字段号为 89。OSPF 有五种报文类型,但是 OSPF 报文头部格式都是相同的
9、。 除 Hello 报文外,其它的 OSPF 报文都携带 LSA 信息。1.3.1 OSPF 报文头部信息所有的 OSPF 报文使用相同的 OSPF 报文头部 Version :OSPF 协议号,应当被设置成 2。 Type:OSPF 报文类型, OSPF 共有五种报文。 Packet length:OSPF 报文总长度,包括报文头部。单位是字节。 Router ID:生成此报文的路由器的 Router ID。 Area ID:此报文需要被通告到的区域。 Checksum:是指一个对整个数据包(包括包头)的标准 IP 校验和。 AuType:验证此报文所应当使用的验证方法。 Authentic
10、ation:验证此报文时所需要的密码等信息。1.3.2 Hello 报文格式 Network Mask:发送 Hello 报文的接口的网络掩码。 HelloInterval:发送 Hello 报文的时间间隔。单位为秒。 Options:标识发送此报文的 OSPF 路由器所支持的可选功能。 Router Priority:发送 Hello 报文的接口的 Router Priority,用于选举 DR和 BDR。 RouterDeadInterval:宣告邻居路由器不继续在该网段上运行 OSPF 的时间间隔,单位为秒,通常为四倍 HelloInterval。 Designated Router:发
11、送 Hello 报文的路由器所选举出的 DR 的 IP 地址。如果设置为 0.0.0.0,表示未选举 DR 路由器。 Backup Designated Router:发送 Hello 报文的路由器所选举出的 BDR 的 IP地址。如果设置为 0.0.0.0,表示未选举 BDR 路由器。 Active Neighbor:邻居路由器的 Router ID 列表。表示本路由器已经从该邻居收到合法的 Hello 报文。1.3.3 DD 报文格式 接口 MTU:是指在数据包不分段的情况下,始发路由器接口可以发送的最大 IP 数据包大小。当在虚连接时,该在段为 0x0000。 Option:同 hell
12、o 报文。 I 位:当发送的是一系列 DD 报文中的第一个数据包时,该为置位为 1。后续的 DD 报文将该位置位 0。 M 位:当发送的数据包还不是一个系列 DD 报文中的最后一个数据包时,该值置为 1。如果是最后一个 DD 报文,则将该为置为 0。 MS 位:在数据库同步中,主要用来确认协商过程中的序列号。 DD Sequence Number:DD 的序列号报文,4byte LSA 头部信息。1.3.4 LSR 报文格式 Link State Type:用来指明 LSA 标识是一个路由器 LSA、一个网络 LSA 还是其他类型的 LSA。 Link State ID:不同类型 LSA 该字
13、段意义不同。 Advertising Router:始发 LSA 通告的路由器的路由器 ID。1.3.5 LSU 报文格式 Number of LSA:指出这个数据包中包含的 LSA 的数量。 LSA:明细 LSA 信息1.3.6 LSAck 报文格式 Header of LSA:LSA 头部信息。1.3.7 LSA 头部信息除 Hello 报文外,其它的 OSPF 报文都携带 LSA 信息。 LS age:此字段表示 LSA 已经生存的时间,单位是秒。 Option:该字段指出了部分 OSPF 域中 LSA 能够支持的可选性能 LS type:此字段标识了 LSA 的格式和功能。常用的 LS
14、A 类型有五种。 Link State ID:根据 LSA 的不用而不同。 Advertising Router:始发 LSA 的路由器的 ID。 Sequence Number:当 LSA 每次新的实例产生时,这个序列号就会增加。这个更新可以帮助其他路由器识别最新的 LSA 实例。 Checksum:关于 LSA 的全部信息的校验和。因为 Age 字段,所以校验和会随着老化时间的增大而每次都需要重新进行计算。 Length:是一个包含 LSA 头部在内的 LSA 的长度。1.4 LSA 类型和区域内路由计算与描述Router-LSA(Type1) 路由器产生,描述了路由器的链路状态和开销,本
15、区域内传播Network-LSA(Type2) DR 产生,描述本网段的链路状态,本区域内传播Network-summary-LSA(Type3) ABR 产生,描述区域内某个网段的路由,区域间传播(除特殊区域)ASBR-summary-LSA(Type4) ABR 产生,描述到 ASBR 的路由,OSPF 域内传播(除特殊区域)AS-external-LSA(Type5) ASBR 产生,描述到 AS 外部的路由,OSPF 域内传播(除特殊区域)NSSA LSA(Type7) 由 ASBR 产生,描述到 AS 外部的路由,仅在 NSSA 区域内传播。区域内路由的计算只涉及到 router-l
16、sa 和 network-lsa也只有 router-lsa 和 network-lsa 参与 ospf 路由计算1.4.1 描述拓扑结构1.4.2 Router-LSARouter-LSA 必须描述始发路由器所有接口或链路。区域内路由计算用到 router-lsaQ5display ospf lsdb router self-originate OSPF Process 1 with Router ID 5.5.5.5Area: 0.0.0.1Link State Database Type : RouterLs id : 5.5.5.5Adv rtr : 5.5.5.5 Ls age :
17、194 Len : 48 Options : ASBR E seq# : 80000007 chksum : 0xacb8Link count: 2* Link ID: 4.4.4.4 Data : 45.0.0.5 Link Type: P-2-P Metric : 1562* Link ID: 45.0.0.0 Data : 255.255.255.0 Link Type: StubNet Metric : 1562 Priority : Low Link State ID:是指始发路由器的路由器 ID。 V:设置为 1 时,说明始发路由器是一条或者多条具有完全邻接关系的虚链路的一个端点。
18、 E:当始发路由器是一个 ASBR 路由器时,该为置为 1。 B:当始发路由器是一个 ABR 路由器时,该为置为 1。 Link count:表明一个 LSA 所描述的路由器链路数量。 Link Type:置为 1 表示点到点连接一台设备;置为 2 表示连接一个transit 网络,可以理解为广播网络;置为 3 表示连接 subnet 网络,一般该地址为环回口地址;置为 4 表示虚链路。 Link ID:Link Type 置为 1 表示邻居路由器的路由器 ID;Link Type 置为 2表示 DR 路由器的接口的 IP 地址;Link Type 置为 3 表示 IP 网络或子网地址;Lin
19、k Type 置为 4 邻居路由器的路由器 ID。 Link Data:Link Type 置为 1 表示和网络相连的始发路由器接口的 IP 地址;Link Type 置为 2 表示和网络相连的始发路由器接口的 IP 地址;Link Type置为 3 网络的 IP 地址或子网掩码。 P2P 链路:描述到邻居连接 Transit 链路:描述到 DR 的连接 Stub 链路:描述子网,没有邻居(loopback 或者只有一个以太网链路) V-link 链路:描述虚链路点到点链路 ToS,暂不支持。 Metric:是指一条链路或接口的代价。1.4.3 Network-LSA DR 产生, BDR 不
20、会产生 Network-LSAQ2display ospf lsdb network self-originateOSPF Process 1 with Router ID 2.2.2.2Area: 0.0.0.0Link State Database Type : NetworkLs id : 10.0.0.2Adv rtr : 2.2.2.2 Ls age : 393 Len : 36 Options : E seq# : 80000006 chksum : 0x9088Net mask : 255.255.255.0Priority : LowAttached Router 2.2.2.
21、2Attached Router 3.3.3.3Attached Router 4.4.4.4 Link State ID:是指 DR 路由器接口上的地址。 Network Mask:指定这个网络上使用的地址或者子网的掩码。 Attached router:列出该多路访问网络上与 DR 形成完全邻接关系且包括DR 本身的所有路由器的路由器 ID。1.4.4 Network-summary-LSA(ABR 产生)Q4display ospf lsdb summary Type : Sum-NetLs id : 45.0.0.0Adv rtr : 4.4.4.4 Ls age : 425 Len
22、: 28 Options : E seq# : 80000003 chksum : 0xde1fNet mask : 255.255.255.0Tos 0 metric: 1562Priority : Low Link State ID:对于 3 类 LSA 来说,表示所通告的网络或子网的 IP 地址。对于 4 类 LSA 来说表示所通告的 ASBR 路由器的路由器 ID。 Network Mask:对于 3 类 LSA 来说,表示所通告的网络的子网掩码或者地址。对于 4 类 LSA 来说,该字段没有实际意义,一般置为 0.0.0.0。 Metric:直到目的地址的路由的代价。Network-
23、summary-LSA 在区域间传递,区域间路由是矢量的,那么矢量的路由需要防止环路防止环路方法如下:(1)ABR 不能从非骨干区域接收类型 3LSA(2)Downbit 防环1.4.5 ASBR-summary-LSA (ABR 产生) 1.4.6 AS-external-LSA (ASBR 产生)Q4display ospf lsdb ase OSPF Process 1 with Router ID 4.4.4.4Link State DatabaseType : ExternalLs id : 55.55.55.0Adv rtr : 5.5.5.5 Ls age : 2341 Len
24、: 36 Options : E seq# : 80000002 chksum : 0xa273Net mask : 255.255.255.0 TOS 0 Metric: 1 E type : 2Forwarding Address : 0.0.0.0 Tag : 1 Priority : Low Link State ID:目的地的 IP 地址。 Network Mask:指所通告的目的地的子网掩码或地址。 E type:用来指定这条路由使用的外部度量的类型。如果该 E bit 设置为 1,那么度量类型就是 E2;如果该 E bit 设置为 0,那么度量类型就是 E1。 Metric:指路
25、由的代价。由 ASBR 设定。 Forwarding Address:是指到达所通告的目的地的数据包应该被转发到的地址。如果转发地址是 0.0.0.0,那么数据包将被转发到始发 ASBR 上。 External Route Tag:标记外部路由。1.4.7 NSSA LSA ( ASBR 产生)Q5display ospf lsdb nssa self-originate Type : NSSALs id : 55.55.55.0 /目的网段的网络地址Adv rtr : 55.55.55.55 Ls age : 66 Len : 36 Options : NP seq# : 80000001
26、chksum : 0x8390Net mask : 255.255.255.0 TOS 0 Metric: 1 E type : 2Forwarding Address : 45.0.0.5 Tag : 1 Priority : Low Forwarding Address:如果网络一台 NSSA ASBR 路由器和邻接的自治系统之间是作为一条内部路由通告的,那么这个 FA 就是这个网络的下一跳地址。如果网络不是作为一个条内部路由通告的,那么这个 FA 地址将是NSSA ASBR 路由器的路由器 ID。1.4.8 区域内路由计算 SPF 过程1.5 Option 字段 Option 可选字段出
27、现在每一个 Hello 数据包、DD 和每个 LSA 中的。 Option 字段允许路由器和其他路由器进行一些可选性能的通信。Option 字段解释: DN:用来避免在 MPLS VPN 中出现环路。当 3 类、5 类和 7 类 LSA 中设置了 DN 位之后,接收路由器就不恩能够在它的 OSPF 路由计算中使用该LSA。 O:该字段指出始发路由器支持 Opaque LSA(类型 9、类型 10 和类型11) 。 DC 位:当始发路由器支持按需链路上的 OSPF 的能力时,该位将被设置。 EA:当始发路由器具有接收和转发外部属性 LSA 的能力时,该位被置位。 N 位:只在 Hello 数据包
28、中。 N=1 表明路由器支持 7 类 LSA。N=0 表明该路由器将不接收和发送 NSSA LSA。 P 位:只用在 NSSA LSA。该位将告诉一个非纯末节区域中的 ABR 路由器将 7 类 LSA 转换为 5 类 LSA。 MC 位:支持 MOSPF。 E 位:当始发路由器具有接收 OSPF 域外部 LSA 的能力时,该位置位。在所有 5 类 LSA 和始发于骨干区域以及非末节区域的 LSA 中,该位置为1。而始发与末节区域的 LSA 中,该位置为 0。如果 Hello 报文中该位表明一个接口具有接收和发送 5 类 LSA 的能力。 MT 位:表示始发路由器支持多拓扑 OSPF。2 OSP
29、F 邻居和邻接关系2.1 邻居关系建立邻居状态建立: Down:这是邻居的初始状态,表示没有从邻居收到任何信息。 Init:在此状态下,路由器已经从邻居收到了 Hello 报文,但是自己不在所收到的 Hello 报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的 Hello 报文的邻居列表中。 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。如果网络为广播网络或者NBMA 网络则选举 DR/BDR。在形成邻居关系过程中,需要对 Hello 报文携带的参数进行协商: 如果接收端口的网络类型是广播型,点到
30、多点或者 NBMA,所接收的Hello 报文中 Network Mask 字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查 Network Mask 字段; 所接收的 Hello 报文中的 Hello 和 Dead 字段必须和接收端口的配置保持一致; 所接收的 Hello 报文中的认证字段需要一致; 所接收的 Hello 报文中的 Options 字段中的 E-bit(表示是否接收外部路由信息)必须和相关区域的配置保持一致。 所接收的 Hello 报文中的区域字段必须一致。2.2 邻接关系建立邻接状态建立: 邻居状态机变为 ExStart 以后,R1
31、向 R2 发送第一个 DD 报文,在这个报文中,DD 序列号被设置为 552A(假设) ,Initial 比特为 1 表示这是第一个 DD 报文,More 比特为 1 表示后续还有 DD 报文要发送, Master 比特为 1 表示 R1 宣告自己为主路由器。 邻居状态机变为 ExStart 以后,R2 向 R1 发送第一个 DD 报文,在这个报文中,DD 序列号被设置为 5528(假设) 。由于 R2 的 Router ID 比 R1 的大,所以 R2 应当为主路由器, Router ID 的比较结束后,R1 会产生一个NegotiationDone 的事件,所以 R1 将状态机从 ExSt
32、art 改变为 Exchange。 邻居状态机变为 Exchange 以后,R1 发送一个新的 DD 报文,在这个新的报文中包含 LSDB 的摘要信息,序列号设置为 R2 在第二步里使用的序列号,More 比特为 0 表示不需要另外的 DD 报文描述 LSDB,Master 比特为 0 表示 R1 宣告自己为从路由器。收到这样一个报文以后,R2 会产生一个 NegotiationDone 的事件,因此 R2 将邻居状态改变为 Exchange。 邻居状态变为 Exchange 以后,R2 发送一个新的 DD 报文,该报文中包含LSDB 的描述信息,DD 序列号设为 5529(上次使用的序列号加
33、 1) 。 即使 R1 不需要新的 DD 报文描述自己的 LSDB,但是做为从路由器,R1需要对主路由器 R2 发送的每一个 DD 报文进行确认。所以,R1 向 R2 发送一个新的 DD 报文,序列号为 5529,该报文内容为空。 邻居状态变为 Loading 之后,R1 开始向 R2 发送 LS request 报文,请求那些在 Exchange 状态下通过 DD 报文发现的,而且在本地 LSDB 中没有的链路状态信息。 R2 收到 LS Request 报文之后,向 R1 发送 LS Update 报文,在 LS Update报文中,包含了那些被请求的链路状态的详细信息。R1 收到 LS
34、Update报文之后,将邻居状态从 Loading 改变成 Full。 R1 向 R2 发送 LS Ack 报文,确保信息传输的可靠性。LS Ack 报文用于泛洪对已接收 LSA 的确认。2.3 邻居关系状态机2.4 邻接关系状态机2.5 总结 OSPF 邻接建立状态变换和用途1.5.1 Init 状态当路由器收到邻居发送来的 hello 报文就将状态变换成 init 状态,Init 状态也说明路由器是可以收到邻居的 hello 消息的,也说明路由器和邻居之间至少二层是互通的。1.5.2 TwoWay 状态a,检查如下参数是否一致, 在 p2p 与 MA 之间有什么不同 如果接收端口的网络类型
35、是广播型,点到多点或者 NBMA,所接收的Hello 报文中 Network Mask 字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查 Network Mask 字段; 所接收的 Hello 报文中的 Hello 和 Dead 字段必须和接收端口的配置保持一致; 所接收的 Hello 报文中的认证字段需要一致; 所接收的 Hello 报文中的 Options 字段中的 E-bit(表示是否接收外部路由信息)必须和相关区域的配置保持一致。 所接收的 Hello 报文中的区域字段必须一致。P2P 不需要建立邻接, MA 需要建立邻接b,用途?当路由器和邻
36、居之间建立双向通信就变成 TwoWay 状态,或者说当路由器收到邻居发送过来的 hello 报文发现自己在对方的邻居列表中就变成 TwoWay 状态。c,DR 选举和抢占,wait 计时器就是 dead time 计时器,在这个时间里面,如果路由器接收到的 hello 报文中有 DR 和 BDR 就不进行 DR 选举1.5.3 Exstart 状态通过检查 router-id,DBD 主从选举,router-id 大的成为主,小的成为从1.5.4 Exchange 状态检查 ls age 和 sequence,同步 DBD1.5.5 Loading 状态发送 LSR 请求1.5.6 FULL
37、状态发出的 LSR 全部收到应答检查 DBD 完全一样已经同步了 LSDB3 OSPF 中 DR,BDR 选举4 OSPF 特殊区域和外部路由Ospf 特殊区域为 stub 和 nssa引入外部路由不建议引入直连的路由而采用 network+silent 方式引入直连路由。4.1 Stub 区域OSPF 可以将特定区域配置为 Stub 和 Totally Stub 区域。Stub 区域是一些特定的区域,Stub 区域的 ABR 不传播它们接收到的自治系统外部路由,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。Stub 区域是一种可选的配置属性,但并不是每个区域都符合配置的条
38、件。通常来说,Stub 区域位于自治系统的边界,是那些只有一个 ABR 的非骨干区域。为保证到自治系统外的路由依旧可达,该区域的 ABR 将生成一条缺省路由,并发布给Stub 区域中的其他非 ABR 路由器。Stub 区域 骨干区域不能配置成 Stub 区域。 如果要将一个区域配置成 Stub 区域,则该区域中的所有路由器都要配置Stub 区域属性。 Stub 区域内不能存在 ASBR,即自治系统外部的路由不能在本区域内传播。 虚连接不能穿过 Stub 区域。 Stub 区域不允许自治系统外部的路由(Type5 LSA)在区域内传播。 区域内的路由器必须通过 ABR 学到自治系统外部的路由。实
39、现方法是ABR 会自动产生一条缺省的 Summary LSA(Type3 LSA)通告到整个 Stub区域内。这样,到达自治系统的外部路由就可以通过 ABR 到达。Totally Stub 区域 Totally Stub 区域既不允许自治系统外部的路由( Type5 LSA)在区域内传播,也不允许区域间路由(Type3 LSA)在区域内传播。 区域内的路由器必须通过 ABR 学到自治系统外部和其他区域的路由。 ABR 会自动产生一条缺省的 Summary LSA(Type3 LSA)通告到整个 Stub区域内。 Stub 区域的 E-bit 被置位实例Q1 和 Q2 所在的 area 2 为 stub 或者是 stub totally