研究OSPF数据结构( 三 )


?SummaryLSA-AutonomousSystemBoundaryRouter(汇总LSA-自治系统边界路由器)(类型4)—类型4与类型3LSA的关系密切 。二者的区别是类型3描述区内路由,而类型4描述的是OSPF网络之外的路由 。
?AS-外部LSA(类型5)—第5个LSA是自治系统外部LSA 。正如其名,这种LSA用于描述OSPF网络之外的目的地 。这些目的地可以是特定主机或是外部网络地址 。作为和外部自治系统相联系的ASBROSPF节点负责把外部路由信息在它属于的整个区中传播 。
这些LSA类型用于描述OSPF路由域的不同方面,它们直接寻址到OSPF区中的每一个路由器并同时传输 。这样的洪泛确保OSPF区中的所有路由器关于网络的5个不同方面(LSA类型)有一样的信息 。路由器完整的LSA数据存储在链路-状态数据库中 。当Dijkstra算法应用于这些数据库的内容时会得到OSPF路由表 。表和数据库的区别是数据库含有原始数据的完整集合,而路由表包含通过特定路由器接口到已知目的地的最短路径列表 。
不必研究每种LSA类型的结构,只需研究它们的头就足够了 。
1.LSA头
所有的LSA使用一个通用的头格式 。这个头20字节长并附加于标准的24字节OSPF头后面 。LSA头惟一地标识了每种LSA 。所以,它包括关于LSA类型、链路-状态ID及通告路由器ID的信息 。下面是LSA头域:
?LS年龄—LSA头中的前两个字节包含LSA的年龄 。这个年龄是自从LSA产生时已消逝的时间秒数 。
?OSPF选项—下面的字节由一系列标志组成,这些标志标识了OSPF网络能提供的各种可选的服务 。
?LS类型—1字节LS类型指出5种LSA类型中的一种 。每种LSA类型的格式是不同的 。因此,指出何种类型的数据附加在头后面必不可少 。
?链路-状态ID—链路-状态ID域4字节长用于指明LSA描述的特定网络环境区域 。这个域与前面提及的LS类型域关系紧密 。实际上,这个域的内容直接依靠于LS类型 。比如,在路由器LSA中,链路-状态ID包含产生了这个报文的OSPF路由器ID——通告路由器ID 。
?LS顺序号—OSPF路由器会递增每个LSA报文的序列号 。所以,接收到两个相同LSA事例的路由器有两种选择来决定哪一个是最新的报文,LS顺序号域4字节长 。检查这个域可以确定LSA在网络中已传输了多久 。从理论上讲,一个新的LSA年龄比一个老的LSA年龄大是有可能的,非凡是在大型复杂的OSPF网络中 。所以,接收路由器比较LS顺序号 。大号的LSA是最新生成的,这种机制不会因动态路由的变迁而受到损坏,而应认为其是一种更可靠的确定LSA时间的方法 。
?LS校验和—3字节的LS校验和用于检查LSA在传输到目的地的过程中是否受到破坏 。校验和采用简单的数学算法 。它的输出结果依靠于其输入,并且有高度的一致性 。给定相同的输入,校验和算法总是给出相同的输出 。LS校验和域使用部分LSA报文内容(包括头,不包括LS年龄和校验和域)来生成校验和值 。源节点运行Fletcher算法并把结果存于LS校验和域中 。目的节点执行相同的算法并把结果与存储在校验和域中的结果比较,假如两个值不相同,就可以认为报文在传输过程中被破坏 。之后,产生一个传输请求 。
?LS长度—LS长度域用于通知接收方LSA的长度(以字节为单位),这个域1个字节长 。
LSA报文体的剩余部分包含一个LSA的列表 。每个LSA描述OSPF网络5个不同方面中的一个 。所以,路由器LSA报文会广播区内已知存在的路由器信息 。
2.处理LSA更新
OSPF路由表与其他路由表的本质区别是它的更新并不直接被接收站点所使用 。从其他路由器接收到的更新包含“从发送路由器角度看”网络得到的信息 。所以,在使用和解释接收到的LSA数据之前必须由Dijkstra算法,把它转化为自己本身的信息 。

推荐阅读