OSPF LSA泛洪
大约 4 分钟
OSPF LSA泛洪
泛洪机制
同一区域的所有路由器都应该有一份完整的LSDB
LSDB中包含了数个LSA
- 在
广播型网络中(以太网)
,Route单播向DR/BDR发送LSU,DR/BDR再组播发送LSU到所有路由器上 - 在
P2P/P2MP
的网络中,路由器之间单播传递LSU报文达成泛洪
泛洪行为
- 一台路由器从一个接口接收到LSA后,会从其它接口发出(类似于水平分割机制),但广播型网络中的DR/BDR例外
- LSA每经过一台路由器都会把LSA Age +1
- 如果收到的LSA本地数据库没有,则接收该LSA继续泛洪
- 如何接收到的LSA本地有,但接收到的LSA比本地数据库的新,则接收并继续泛洪
- 其它情况如LSA比本地旧,一样新,损坏等,则不接收受
判断相同ID的“新的”LSA要依次比较以下内容:
LSA序列号 (Sequence Number) LSA报文校验和 (Checksum) LSA年龄 (LSA Age)
说明如下:
- 序列号:有符号32位整数,采用线性递增的序列号,初始序列号从0x80000001 到最大值0x7FFFFFFF,序列号越大代表越新,LSA会周期(30min)产生新的 LSA,每次产生的LSA序列号都会增加1.
- Checksum:16位数,对刚收到的LSA做计算, Age字域不在计算内。即使LSA存放在LSDB中,路由器也会每5分钟重新计算一次。
- Age: 16位无符号整数。LSA的最大年龄是3600s,LSA在路由器间泛洪时每经过一跳年龄增加1,在LSDB中存放时年龄也增加1。若LSA 的年龄达到3600s (即 Maxage),路由器会从LSDB中清除该LSA。在拓扑稳定的场合下,每份存放在LSDB中的LSA间隔30min都会被周期产生的新LSA刷新。
示例
- X路由器泛洪自己的LSA,其序列号为0x8000000B
- A和C收到后发现比本地的新,接收继续泛洪给B,B泛洪给C
- 当X离线后,A和C的拓扑发生更新,泛洪新LSA,直到到达全网,网络中不会再有到达X的路由,但X产生的的LSA依然在其它路由器的LSDB中(我的理解是目前LSDB中存在X到A和B的链路但没有A/B到X的链路,自然就不通了),X产生的LSA会存在3600s
- 在此期间X重新上线了,由于初次启动,产生序列号为0x80000001的LSA,而A和C中有0x8000000B的LSA,数据同步后,X就会收到routeid是自己但序列号超前的LSA,但是X并没有该LSA的产生记录,就会加速LSA老化,立即产生一份新的ID+1的LSA泛洪到区域内路由器,新的LSA序列号为0x8000000C
结论
路由器如果收到比自己新的LSA,路由器要有动作,表明可能重启过,这种情况下,路由器必须“加速”LSA老化,序列号+1以超过“新”LSA序列号,并立即泛洪。同样的机制在RouterID冲突的场景下也会出现。如区域内非直连路由器的RID一致,也会彼此收到非自己产生的LSA,但标识又是自己的RID的LSA,接收路由器的做法是立即产生更高 序列号的LSA并向外泛洪。重复的行为在网络一直发生,序列号一直递增,直至其中一台设备自动调整自己的RID,RID不再冲突为止。
LSA类型
IETF为IPv4 定义了以下几种可用的LSA类型。
- Router-LSA (Type1) ,以下简称LSA1,每个设备都会产生,描述了设备的链 路状态和开销,仅在所属的区域内泛洪。
- Network-LSA (Type2) ,以下简称LSA2,由DR(Designated Router)产生,描述MA网络的链路状态,仅在所属的区域内泛洪。(P2P网络类型的链路上没有)
- Network-Summary-LSA (Type3) ,以下简称LSA3,区域内某个网段的路由, 由ABR产生LSA3 向其他区域通告。LSA3在区域间传递路由,但该LSA3 洪范围仅在一个区域内。
- ASBR-Summary-LSA (Type4) ,以下简称LSA4,由ABR产生,描述到ASBR 的距离,通告给除ASBR 所在区域的其他相关区域,该LSA4的泛洪范围仅在 一个区域。ABR会在区域边界为其他区域再产生LSA4并继续泛洪。
- AS-external-LSA (Type5) ,以下简称LSA5,由ASBR产生,描述到AS外部 的路由,可泛洪到所有的区域(除了STUB区域和NSSA区域)。
- NSSALSA (Type7) ,以下简称LSA7,由ASBR产生,描述到AS外部的路由, 仅在NSSA区域内泛洪。