LSA泛洪机制
1、触发条件:
链路状态变化
当路由器的链路状态发生改变时,例如接口的开启或关闭、链路开销(Cost)的改变等,会触发 LSA 的更新和泛洪。比如,在一个企业网络中,如果一条连接两个部门的以太网链路因为线路老化导致带宽下降,链路开销就会发生变化。这时,连接该链路的路由器会生成一个新的 LSA 来反映这个变化,并将其泛洪到整个网络。
新路由器加入网络
当一个新的路由器加入 OSPF 网络时,它会首先发送自己的 Router - LSA(类型 1)到网络中,以便其他路由器能够了解它的存在和链路状态。例如,在网络扩展过程中,新添加了一个接入路由器来连接新的用户网段,这个新路由器会向它所在的区域(如果是单区域网络则是整个网络)发送自己的 LSA,让其他路由器更新它们的链路状态数据库(LSDB)。
2、泛洪过程:
初始传播
当一个 LSA 需要泛洪时,路由器会将 LSA 发送给它所有的 OSPF 邻居。这些邻居收到 LSA 后,会进行一系列的检查。首先,它们会检查 LSA 的序列号,以确定这是一个新的 LSA 还是已经接收过的旧 LSA。如果是新的 LSA,邻居路由器会将该 LSA 放入自己的 LSDB 中,并向自己的其他邻居(除了发送该 LSA 的邻居)转发这个 LSA。
例如,假设路由器 A 生成了一个新的 LSA,它将这个 LSA 发送给邻居路由器 B 和 C。路由器 B 收到后,将其存入自己的 LSDB,然后将这个 LSA 转发给它的邻居 D 和 E(前提是 D 和 E 还没有收到这个 LSA)。
扩散规则
LSA 的扩散遵循一定的规则,以避免无限循环和重复传播。其中一个重要的规则是基于接口状态和邻居关系。如果一个接口是处于被动状态(如在某些特殊配置下)
或者没有 OSPF 邻居,那么 LSA 不会通过这个接口进行传播。
另外,为了防止 LSA 的重复传播,每个路由器在收到 LSA 后,会记录 LSA 的来源。如果收到的 LSA 是从它之前转发过的邻居返回的,就不会再次转发这个 LSA,避免了 LSA 在网络中循环传播。
3、泛洪范围:
区域内泛洪
在一个 OSPF 区域内,LSA 通常会泛洪到区域内的所有路由器。例如,对于类型 1(Router - LSA)和类型 2(Network - LSA)的 LSA,它们主要在区域内传播,用于构建区域内的网络拓扑。所有区域内的路由器会根据这些 LSA 来计算区域内的最短路径树(SPT),以确定到达区域内各个网段的最佳路径。
区域间泛洪
对于区域间的 LSA(如类型 3 - Summary LSA),它们会在 ABR(区域边界路由器)的控制下,从一个区域传播到另一个区域。ABR 会对区域内的 LSA 进行汇总和转换,然后将汇总后的 LSA 发送到其他区域。这样,不同区域的路由器可以通过这些区域间的 LSA 了解其他区域的网络拓扑概要,从而实现区域间的路由计算。
LSA泛洪周期:
LSA 泛洪周期是指在 OSPF 网络中,链路状态通告(LSA)按照一定的时间间隔进行更新和重新发送的过程。这个周期对于保持网络拓扑信息的准确性和一致性非常重要。在正常情况下,LSA 不会无限制地频繁泛洪,而是有规律地更新,以平衡网络资源的利用和拓扑信息的时效性。
老化时间(Max - Age)与泛洪周期的关系
LSA 有一个老化时间(Max - Age)的概念,当一个 LSA 在网络中传播并存储在路由器的链路状态数据库(LSDB)中后,它会开始计时。如果一个 LSA 达到了老化时间(默认是 1 小时),这个 LSA 就会被认为是无效的,路由器会将其从 LSDB 中清除。
这个老化时和泛洪周期是相互关联的。正常的泛洪周期可以防止 LSA 过快地达到老化时间。例如,类型 3 的 Summary - LSA 的 30 分钟泛洪周期可以保证其在老化时间(1 小时)内至少更新一次,这样可以避免因长时间没有更新而被清除,从而保证区域间路由信息的稳定性。
同时,如果由于某种原因(如网络故障或配置错误)导致 LSA 没有按照正常的泛洪周期更新,当达到老化时间后,路由器会重新请求这个 LSA 的更新,这也有助于及时发现和纠正网络中的问题。
LSA标识方法:
LSA 类型(Type)
LSA 类型是最基本的标识方法之一。不同类型的 LSA 用于描述不同的网络信息。例如,类型 1(Router - LSA)用于描述路由器自身的链路状态信息,包括接口 IP 地址、链路开销(Cost)、所连接的网络类型(如以太网、点对点链路等)。每一个 OSPF 路由器都会生成自己的 Router - LSA 来通告自己的链路状态,让区域内的其他路由器了解它的情况。
类型 2(Network - LSA)主要用于描述广播型网络(如以太网)或者非广播多路访问(NBMA)网络中的网络链路状态。在一个广播型网络中,指定路由器(DR)会生成 Network - LSA,其中包含了连接到该网络的所有路由器的信息,如它们的 Router ID 等。
类型 3(Summary - LSA)用于区域间的路由信息传播。区域边界路由器(ABR)会将一个区域内的路由信息汇总成类型 3 的 LSA,然后发送到其他区域,使其他区域的路由器能够了解该区域的网络拓扑概要。
链路状态 ID(Link - State ID)
链路状态 ID 是另一个重要的标识字段。对于不同类型的 LSA,链路状态 ID 有不同的含义。在 Router - LSA(类型 1)中,链路状态 ID 就是生成该 LSA 的路由器的 Router ID。这使得每个路由器的链路状态通告可以被唯一地识别。
对于 Network - LSA(类型 2),链路状态 ID 是所描述的网络(如广播型网络)的 DR 的接口 IP 地址。这样,在一个包含多个广播型网络的区域中,可以通过链路状态 ID 来区分不同网络的 Network - LSA。
在 Summary - LSA(类型 3)中,链路状态 ID 是所通告的目的网络的 IP 地址。例如,如果一个 ABR 要通告一个区域内的子网 192.168.1.0/24 的路由信息到其他区域,那么在类型 3 的 LSA 中,链路状态 ID 就是 192.168.1.0。
通告路由器(Advertising Router)
通告路由器字段用于标识生成和发送该 LSA 的路由器。在所有类型的 LSA 中,这个字段都很重要。例如,在一个包含多个路由器的区域中,当收到一个 LSA 时,通过通告路由器字段可以判断这个 LSA 是来自哪个路由器的。对于 Router - LSA,通告路由器就是自身;对于 Network - LSA,通告路由器是该网络的 DR;对于 Summary - LSA,通告路由器是 ABR。
序列号(Sequence Number)用于版本标识
序列号是 LSA 头部中的一个关键标识,用于区分 LSA 的不同版本。每次路由器更新一个 LSA(通常是因为链路状态发生变化),它会增加 LSA 的序列号。例如,一个初始的 LSA 序列号可能是 0x80000001,当路由器更新这个 LSA 时,序列号可能会变为 0x80000002。
其他路由器在收到 LSA 时,会比较序列号来确定这个 LSA 是新的还是旧的。如果收到的 LSA 序列号大于本地存储的相同类型和相同链路状态 ID 的 LSA 序列号,就会更新本地的 LSA 和链路状态数据库(LSDB)。这样可以保证网络中的每个路由器都能获取到最新的链路状态信息。
LSA如何判断新旧:
通过序列号判断
序列号的基本概念:LSA 头部包含一个序列号字段,它是一个 32 位的整数。这个序列号是由生成 LSA 的路由器来维护的。每次路由器更新 LSA(例如,由于链路状态发生改变),就会增加这个序列号的值。
比较规则:当一个路由器收到两个相同类型(Type)、相同链路状态 ID(Link - State ID)和相同通告路由器(Advertising Router)的 LSA 时,会比较它们的序列号。如果收到的 LSA 序列号大于本地存储的 LSA 序列号,那么就认为收到的 LSA 是新的,会用新的 LSA 替换本地旧的 LSA,并更新链路状态数据库(LSDB)。例如,本地存储的 LSA 序列号是 0x80000001,收到的同类型 LSA 序列号是 0x80000003,就会判定收到的 LSA 为新,然后更新。
特殊情况:在序列号达到最大值(0x7FFFFFFF)后,序列号会翻转回 0x80000000。这种情况下,OSPF 有特殊的机制来处理。如果收到一个序列号较小但校验和(Checksum)不同的 LSA,路由器会认为这是一个新的 LSA,因为校验和的变化意味着 LSA 的内容发生了改变。
校验和(Checksum)辅助判断
校验和的作用:LSA 头部还包含一个校验和字段,用于检查 LSA 在传输过程中是否出现错误。校验和是根据 LSA 的内容(除了老化时间字段)计算出来的。当收到一个 LSA 时,路由器会重新计算校验和并与收到的校验和进行比较。
结合序列号判断新旧:如果两个 LSA 的序列号相同,但校验和不同,这表明 LSA 的内容可能已经发生了变化。在这种情况下,路由器会认为这个 LSA 是新的,需要更新本地的 LSDB。不过,通常情况下,序列号是主要的判断依据,校验和更多地用于验证 LSA 的完整性和内容变化。
老化时间(Age)作为参考
老化时间的范围:LSA 的老化时间(Age)从 0 开始计时,最大值为 Max - Age(默认是 1 小时)。当 LSA 在网络中传播时,每个路由器接收到 LSA 后会更新老化时间。如果老化时间达到 Max - Age,这个 LSA 就会被认为是无效的,路由器会将其从 LSDB 中清除。
新旧判断的参考价值:一般来说,老化时间较短的 LSA 相对较新。但是,老化时间不能单独作为判断 LSA 新旧的依据。因为在网络拓扑稳定的情况下,LSA 的老化时间可能只是正常的递增,而内容并没有更新。只有在结合序列号和校验和的基础上,老化时间才能辅助判断 LSA 是否是新的。例如,如果两个 LSA 的序列号和校验和相同,但一个老化时间为 10 分钟,另一个为 50 分钟,在其他条件相同的情况下,可以初步认为老化时间为 10 分钟的 LSA 相对较新。