OSPF - version - 3概论

更新时间:2023-09-21 11:33:01 阅读量: 工程科技 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

OSPF Version 3概论

华为3Com有限公司

培训中心 赵治东 工号:01552

OSPF Version 3概论

目 录

摘要 4 关键词 4 概述 4

OSPFv3与OSPFv2的区别 5

独立于网络协议 5

基于链路的运行 6 取消了编址性语义 6 链路本地地址的使用 7 用专用的LSA来发布前缀 8

扩展性和适应性 8

对多实例的支持 8 对未知类型LSA的处理 9

更加清晰而简洁 9

OSPF验证的变化 10 用Router-ID来标识邻居 10 泛滥范围的增加 10 Stub区域的支持 11

协议消息格式的变化 11

协议分组格式的变化 11 LSA格式的变化 12 协议分组 14

协议分组封装 14

Options字段 15

协议分组头 17

Hello分组 18

Database Description分组 19 Link State Request分组 21 Link State Update分组 21 Link State Acknowledgment分组 22 LSA 22

2004-5-13 内部资料,请勿扩散 第2页, 共44页

OSPF Version 3概论 LSA头 23 LS type 24 Link State ID 24 Prefix Options 25 Router-LSA 26 Network-LSA 29 Link-LSA 29

Intra-Area-Prefix-LSA 31 Inter-Area-Prefix-LSA 33 Inter-Area-Router-LSA 33 AS-external-LSA 34

自身建立的LSA 36

协议运作 36

选举DR和BDR 36

LSDB 36 链路LSDB 37 区域LSDB 37 自治系统LSDB 38 LSA的泛滥 38 接收LSU 38 发送LSU 39

路由计算 40

区域内路由计算 40 区域间路由计算 41 自治系统外部路由计算 41 路由的重新计算 41 Virtual Link 42

连接同一个链路的多个接口 43参考文献 44

2004-5-13

第3页, 共44页

内部资料,请勿扩散 OSPF Version 3概论

摘要

在简要回顾OSPFv2的基础上,通过对OSPFv2和OSPFv3的对比,本文对OSPFv3在协议分组、LSA、数据结构及协议处理机制上的变化,以及这种变化带来的新特性做出了深入探讨。

关键词

OSPF Version 3, OSPFv3, IPv6, OSPFv2, link-local, LSA, Router-LSA, Network-LSA, Inter-area-prefix-LSA, Inter-area-router-LSA, AS-external-LSA, Link-LSA, Intra-Area-Prefix-LSA, DD, LSR, LSU, LSAck, LS Type, PrefixOptions, LSDB,

概述

OSPF(Open Shortest Path First)Version 2标准最早发布于1991年的RFC1247中,后经过多次修订,终于在1998年的RFC2328中确立了目前的标准。

是一种链路状态路由协议。它具有标准开放、收敛迅速、确保无环路、便于层级化网络设计等众多优点。因而在过去几年中,OSPF作为一种主要的IGP(Interior Gateway Protocol),在网络中获得了广泛应用,为IP网络通信立下了汗马功劳。

OSPF是一种结构紧凑,逻辑严谨的路由协议。熟悉其内涵的人,无不为其设计之精巧而感叹。但是问题也随之而来。OSPFv2数据格式太紧凑,并且都已经确定,不方便扩展;和IPv4结合的太紧密,无法适应其它任何协议,甚至于无法适应IPv6更长的地址空间; LSA类型众多,而各种LSA的功能定义又不甚清晰,为理解和计算带来了很多不便;SPF算法代价也比较高昂,一旦网络拓扑发生任何变化,敏感的OSPF都需要重新计算SPF tree,在特定情况下会导致大量资源消耗,甚至影响数据转发。所以OSPF实际上主要应用于中小规模的IGP网络中。

与此相比,同属于链路状态路由协议的IS-IS就拥有不少优势。其中包括更加清晰的层级结构,部分SPF计算,更大的路由处理量,更便于扩展以支持多种协议路由等等。因而在大规模的网络,特别是

2004-5-13 内部资料,请勿扩散 第4页, 共44页

OSPF Version 3概论

很多运营商的大型内部网络中,都要求应用IS-IS作为IGP。

长江后浪推前浪,IPv6滚滚前进的趋势是不可阻挡的。与IPv4死死串在一根绳子上的OSPF难道就此推出历史舞台吗?不论从感情上,还是从价值上,都不能。应用多年的OSPF并非没有可取之处,IS-IS也并非完美无缺,而完全设计一种新的协议也没有特别的必要。从另一个方面来说,大量的网络工程师对OSPF网络的设计和部属已经非常熟悉,这种知识是非常宝贵的财富,就此弃之不用也是一种浪费。因此,在一番重大改进之后,为IPv6网络设计的新OSPF——OSPF Version 3应运而生。

RFC2470中确定了OSPFv3的基本标准。对于原有的OSPFv2的众多方面做出了修改,以便适应IPv6环境的要求。

笔者假设读者对OSPFv2和IPv6已经非常熟悉,因此对此二者并没有做过多介绍。读者可自行参考相关资料。

本文可以作为网络工程师、程序开发或理论教学的参考。

OSPFv3与OSPFv2的区别

与OSPFv2相比,OSPFv3在协议基本运作过程和基本算法上并没有做改变。但是为了处理IPv6的128位地址,适应未来复杂的网络环境,提供更强的扩展能力,OSPFv3做出了重要改变,从而焕然一新。

OSPFv3不再受到IP网络协议的限制,能够方便地进行多种能力的扩展,并且其结构更加简洁清晰。

独立于网络协议

可以说,OSPFv2就是为IPv4设计的。设计者们似乎预见到IP一统天下的结局,所以为IPv4设计了这么一款优秀的路由协议。但不幸的是,它们没有考虑到IPv6的压力会这么快到来。吸取这个教训,OSPFv3被设计得独立于网络协议。我们会在后面的小节看到,虽然OSPFv3仍然基于IPv6运行,但是只需要稍加扩展,就可以适应各种协议,并且实际上为未来可能的多种扩展预留了充分的可能性。

2004-5-13 内部资料,请勿扩散 第5页, 共44页

OSPF Version 3概论

基于链路的运行

在IPv6中强调了一个“链路(link)”的概念。链路是一种通信设施或媒介,节点之间的数据链路层通信通过链路来进行。设备通过接口连接到链路。在IPv6中,一个链路上可以分配多个IP子网,也就是IPv6前缀。和IPv4中不同的是,同一个链路上的两个节点即使不具有相同的IPv6前缀,也可以直接通过这个链路通信。这一点极大地改变了OSPF的行为。

OSPFv2是基于子网运行的。在IPv4的OSPF中使用的术语“网络”和“子网”通常是一回事,而没有强调“链路”的概念。因为IPv4的推荐配置是一个链路上的所有节点的IP地址处于同一个IP子网或网络内;而在OSPFv2中,两个OSPF路由器形成邻接关系的前提之一就是两者相连的接口必须处于同一个IP子网内,并且每一条路由的下一跳地址都是和路由器接口处于同一网段的IP地址。这实际上已经隐含要求了链路与子网或网络的一一对应关系。

OSPFv3是基于链路运行的,而不是以前的基于IP子网的运行。在OSPFv3中我们更多的是使用“链路”和“前缀”这两个个术语。但是如前所述,这两个概念是分离的,没有必然的对应关系。同一链路上的两个节点不必具有相同的前缀。所以在讨论路由协议时,OSPFv2的术语“网络”和“子网”在这里一般来说应该用“链路”替代掉。同样,一个OSPF接口现在是连接到一个链路上,而不再是一个IP子网上了。OSPF协议分组的接收以及Hello分组和LSA的格式也因此做出了相应修改。

编址性语义的取消

说OSPFv2协议具有编址性语义(Addressing semantics),是指这个协议的数据格式定义的与IP协议密切相关,协议分组和LSA中的许多字段都是来自于网络上的某个IP地址,或掩码,或某个IP子网号。

为了确保独立于网络协议,便于未来的扩展,OSPFv3从协议分组及主要的LSA类型中取消了编址性语义,只保留了独立于网络协议的基本语义核心。

在OSPFv3中,IPv6地址除了在Link State Update分组携带的LSA载荷中出现之外,不再出现在OSPF分组中。LSA中所出现的这些地址信息也仅仅是作为载荷信息,而不做其它任何特别的用途。

OSPFv3的Router-LSA和Network-LSA仍然存在,但是不再包含网络地址,而只是用于传达网络拓扑信息。拓扑的计算不再依赖IPv6地址。

OSPF的Router ID, Area ID和LSA的Link State ID仍然保留类似IPv4地址长度的32位s。实

2004-5-13 内部资料,请勿扩散 第6页, 共44页

OSPF Version 3概论

际上这些字段既不是IPv4地址,也不可能是IPv6地址,而只是一个编号。

另外在OSPFv2中,对broadcast 和NBMA网络类型,邻居路由器是以IP地址作为标识的。而在OSPFv3中,Neighboring路由器总是以Router ID作为标识的,所以DR和BDR也总是用其Router ID来标识的。

链路本地地址的使用

OSPFv2是基于IP子网运行的。在OSPFv2中,两个OSPF路由器形成邻接关系的前提之一就是两者相连的接口必须处于同一个IP子网内,因此,同一个链路上的所有路由器接口,也就必须处于同一个子网内。同时,OSPFv2也必须使用邻居的接口IP地址作为路由的下一跳地址。正因为这样,在OSPFv2网络规划时,即使一个链路上只有两个路由器,我们也要给它分配一个子网,也就是说任何一个链路都要有一个IP子网,任何一个OSPFv2的接口都要有一个IP地址。

但是这样是必须的吗?否!因为每个路由器的每个接口上的邻居是很有限的,所以所有路由的下一跳的个数也是非常有限的,并且这些下一跳地址也都是本地有效的,因此标识这些邻居/下一跳根本不需要一个全局IP地址。只需要一个本地/本链路有效的标识符就够了。

相信熟悉IS-IS的人对这一点都体会深刻。IS-IS路由协议本身的运作,根本不需要在IS和IS之间配置任何地址,它只要在链路层上运行就够了。

IPv6在RFC2373中定义了链路本地(link-local)地址用于一个单一链路上,其目的是完成邻居发现(neighbor discovery)和自动配置(auto-configuration)等功能。IPv6路由器不转发源地址为link-local类型的分组。Link-local单播地址范围为IPv6地址范围FF80/10。

OSPFv3假定,每个路由器的每个接口上都分配了link-local地址。除了在virtual link上之外,在所有的OSPF接口上,发送的OSPF分组都使用该接口的link-local单播地址作为源地址。一个路由器可以学习到在这个网段上相连的所有其它路由器的link-local地址,它使用这些link-local地址作为下一跳来转发分组。(但是,在virtual links上,必须使用global scope或者site-local地址作为OSPF协议分组的源地址)

由于链路本地地址只在本链路上有意义,因此它不应该泛滥(flood)到本链路之外的任何地方。因此OSPFv3规定,Link-local地址出只出现在Link-LSA中,而不允许出现在其它的LSA中。特别是不能在inter-area-prefix-LSA、AS-external-LSA或intra-area-prefix-LSA中公告。

通过这种方式,在大量的路由器间链路上就不需要规划子网,不但省去了不少麻烦,而且还节约了

2004-5-13 内部资料,请勿扩散 第7页, 共44页

OSPF Version 3概论

IP地址。最重要的一点是,因为在网络骨干的接口上都使用了链路本地地址,而不必再配置IPv6,所以OSPFv3可以说是“脱离”了IPv6而独立了起来,并且可以扩展用于多种协议的路由。

用专用的LSA来发布前缀

在OSPFv2中,区域内部的IP子网和网络信息是由Router-LSA和Network-LSA来完成的。但是Router-LSA和Network-LSA也同时负责传递网络拓扑信息,所以整个OSPF拓扑结构的计算和IP子网信息是紧紧捆绑在一起的。可以说OSPFv2的拓扑就是IP子网和路由器形成的拓扑。所以说OSPFv2是“基于IP子网”来运行的。

为了克服前一版本的种种弊端,实现网络协议独立性,在OSPFv3中把Router-LSA和Network-LSA从IP前缀信息的发布功能解放出来,而只用它们来发布拓扑信息。发布IPv6前缀的职责交给了新的link-LSA和inter-area-prefix-LSA。

一个链路范围内的IPv6前缀信息由link-LSA负责通告。这样,整个链路内的路由器就可以了解本链路绑定的IPv6前缀。

而inter-area-prefix-LSA负责把IPv6前缀公告到本区域范围内。从而整个区域内的路由器就可以了解区域内的IPv6前缀,用于区域内路由计算。

通过拓扑与前缀信息的分离传递,OSPFv3具备了独立于网络协议的特性。

扩展性和适应性

新的设计考虑到OSPFv2难以扩展的问题,提供了更强的扩展能力和适应能力。

对多实例的支持

在一些特殊的情况下,我们可能需要在同一个链路上使用多个OSPF实例。例如,假设一个电信运营商为两个服务提供商提供同一条接入链路。这两个服务提供商都运行OSPF,但是都希望保持自己的路由域的独立性,这时候就遇到一个麻烦。

另一种情况下,我们可能希望两个OSPF区域依赖同一个链路运行。也就是说,两个OSPF区域在物

2004-5-13 内部资料,请勿扩散 第8页, 共44页

OSPF Version 3概论

理链路上有交集。

在OSPFv2中,如果我们希望实现上述需求,就要使用OSPFv2的验证功能。我们可以给不同的服务提供商,分配不同的验证口令,以便保持其路由的相互的独立。但是这种方式实现的并不优雅而完美。

而在OSPFv3中提供了对同一链路上运行多实例的明确支持。这是通过在OSPF分组头中添加Instance ID字段,以及修改OSPF接口数据结构实现的。Instance ID值影响OSPF分组的接收行为。如果接口的Instance ID与其所接收的OSPF分组的Instance ID不匹配,则丢弃该分组。

对未知类型LSA的处理

在IPv4的中,OSPF路由器的行为是丢弃任何未知类型的LSA。这就造成一个扩展性问题——无法支持在单一链路上混合具有多种能力的路由器。

在广播型链路和NBMA型链路上,所有的LSA都需要由DR来负责传递,这对于强制类型的LSA当然没有问题,但是对于可选的LSA来说就麻烦了。假如DR所支持的可选LSA少于某个非DR路由器,那么这个非DR路由器发出的一些LSA就会被DR丢弃,而无法传递到其它路由器上。

OSPFv3对未知LSA类型的处理被设计得更加具有适应性。路由器收到LSA时,需要根据LSA头中LS type 字段中的LSA Handling位来决定如何处理。根据这一位值的不同,对未知的LSA类型有两种处理方法:要么把它当作具有link-local 泛滥范围来对待,从而只能泛滥到本地链路上;要么把它当作类型已知的LSA来处理,也就是存储下来并泛滥出去。当然对于本路由器来说,因为这个LSA类型是未知的,所以无论如何,实际上并没有把这个LSA纳入计算过程中。

这种处理方式对于未来的扩展有诸多好处。尤其是对类似于External-Attributes-LSA之类的LSA来说非常合适。

更加清晰而简洁

表面上看,OSPFv3修改了OSPFv2的很多地方,但实际上所有这些修改都使OSPF变得更加清晰,清晰和易于理解。

2004-5-13 内部资料,请勿扩散 第9页, 共44页

OSPF Version 3概论

OSPF验证的变化

本着“非核心业务能外包就外包”的原则,OSPFv3自己不再进行验证工作,转而依赖IPv6所提供的IP AH(Authentication Header)和IP ESP(Encapsulating Security Payload)协议进行验证,以确保路由信息的可信性、完整性和机密性。

因此OSPF分组格式也做出相应的改变。原OSPFv2的AuType和Authentication字段被取消。原OSPFv2接口数据结构和区域数据结构中,所有与验证相关的字段也都被取消。

这样,虽然OSPFv3扩展了原有的一些字段,还预留了扩展字段,但是其协议分组头和LSA头和OSPFv2一样紧凑,并没有增加协议的开销。

用Router-ID来标识邻居

在IPv6的OSPF中,在一个给定链路上,邻居路由器总是用其Router ID来标识的。

而与此对比,在IPv4的OSPF中,点到点网络和virtual link上的邻居以其Router ID来标识,而在broadcast、NBMA和点到多点网络上的邻居则是以其IPv4接口地址来标识的。

OSPFv3的这个改进是因为它已经把协议分组信息、网络拓扑描述和具体的IPv6前缀路由信息分离开了。这样邻居路由器可以完全没有配置IPv6前缀信息,而仅仅是网络上的一个路由节点,因而不能用IP地址来描述了。这看起来更像IS-IS——节点就是节点,只要有一个ID来标识就够了;ID就是ID,和接口没什么关系。

这个变化带来的好处之一就是,OSPF的各种协议分组和LSA的功能更加明确,定位更加清晰,理解更加容易,扩展更加方便。

这个变化同时也影响了OSPF分组(包括Hello分组)的接收和邻居的查找。

泛滥范围的增加

在OSPFv3中, LSA的泛滥范围被归纳起来,目前共有三种: ?

链路本地范围(Link-local scope)。这种LSA只能在本地链路范围内泛滥。这个特性是新增的,新定义的Link-LSA 就使用这种范围。 ?

区域范围(Area scope)。这种LSA只能在一个OSPF区域内泛滥。Router-LSA、Network-LSA、

2004-5-13 内部资料,请勿扩散 第10页, 共44页

OSPF Version 3概论

DC位

描述路由器对按需电路(demand circuits)的处理。当且仅当路由器想把相连的点到点电路当作按需电路时,它把Hello和DD分组的DC位设置为1。在点到点按需电路上,两个端点设备都必须支持对Hello分组的抑止,以便节省带宽资源。为了确保这一点,路由器在按需电路的接口发送的Hello分组和Database Description分组上把DC位设置为1。如果对方发送的DD分组或返回的Hello分组的DC位为0,说明对方不支持对Hello的抑止功能,所以路由器必须继续周期性地发送Hello分组。 按需电路特性的支持只需要在两个端点之一配置即可。如果一个路由器实现了按需电路特性,但是没有配置,那么当它接收到设置了DC位的Hello分组时,应该把这个点到点电路按照按需电路来对待,从而改变其相应进程。但是LSA中的DC位含义却有微妙的差别。设置LSA的DC位并不意味着路由器能够作为按需电路的一个端点,而是说明它能否正确处理设置了DoNotAge位的LSA。当且仅当路由器可以正确处理LSA的LS age 字段中出现的DoNotAge位的时候,它才把自己建立的LSA中的DC位设置为1。

处于不同位置的Options字段会对协议运作产生不同的影响。某些选项的不匹配,会阻止邻接关系的形成,例如如果过Hello分组的发送和接收,两个路由器发现E位不匹配,就不能形成邻居关系。某些选项的不匹配,会阻止特定类型的LSA的泛滥,例如如果通过DD分组的交换,两个路由器发现彼此的MC位不匹配,那么组播路由使用的Group-membership-LSA就不能泛滥。某些选项如果不匹配,会使路由器不能被纳入某一种或多种路由的计算,例如如果路由器从LSA中发现某个路由器的MC位没有设置,那么在组播路由计算时它就不会考虑这个路由器。

在发送Hello分组、发送DD分组和建立LSA时,路由器应该对Options字段中不认可的位进行清零。在接收Hello分组、接收DD分组和接收LSA时,路由器应该忽略OSPF Options字段中不认可的位,并且正常处理这个分组或LSA。

Options 字段使OSPF路由器能支持可选的能力,并且与其它路由器互相通告其能力。通过这种机制,具有不同能力的路由器可以在一个OSPF路由域中混合工作。

2004-5-13 内部资料,请勿扩散 第16页, 共44页

OSPF Version 3概论

协议分组头

OSPFv3的协议分组具有统一的头部,长度16字节。当然处理协议分组时,还有一些信息是来自于运载这个分组的IPv6头的。

OSPFv3的协议分组头中各个字段按顺序描述如下: Version #

1字节。表示OSPF版本号,设置为3。 Type

1字节。目前定义的OSPF分组类型如下表:

分组类型值 1 2 3 4 5

Packet length

2字节长。OSPF协议分组的长度,单位为字节。包括OSPF标准分组头长度。 Router ID

4字节长。建立此分组的路由器的Router ID。 Area ID

32位区域号。标识这个分组属于哪个区域。每个OSPF分组只能属于一个区域。通过virtual link传输的OSPF分组标记骨干区域号。

Checksum

使用IPv6标准16位校验和。校验内容包括前导的IPv6伪头和OSPF协议分组头。伪头中的Upper-Layer Packet Length字段值等于OSPF分组头中的Packet length字段值。如果分组长度不是16位的整数倍,则用0填充后进行计算。计算校验和时校验和字段本身设置为0。

Instance ID

Hello Database Description Link State Request Link State Update Link State Acknowledgment 分组类型 2004-5-13 内部资料,请勿扩散 第17页, 共44页

OSPF Version 3概论

1字节。缺省值为0。允许在一个链路上运行多个OSPFv3的实例。每个实例应该具有唯一的Instance ID。Instance ID只在本地链路上有意义。如果接收到的OSPF分组的Instance ID和本接口的Instance ID不同,则丢弃这个分组。

保留位

8位的保留位。必须为0。

Hello分组

用来发现邻居,选举DR和BDR,并维持邻接关系。Hello分组在所有接口上都应该周期性发送。在支持广播的链路上,都应该以组播形式发送。

Hello分组基本构成形式如下:

OSPFv3分组头 Hello分组内容 (Type=1)

Hello分组内容的各字段按顺序说明如下: Interface ID

32位接口标识。用来在一个路由器上唯一地标识本接口。它不再是一个IP地址了。 Rtr Pri

1字节。本路由器的路由器优先级(Router Priority)。用于DR和BDR的选举。优先级较高的路由器优先成为DR,次之的优先成为BDR。

Options

3字节。如上一节所述,表达本路由器的可选的能力。 HelloInterval

2字节。发送Hello分组的周期。单位为秒。 RouterDeadInterval

2字节。如果在这个时间内都没有收到邻接路由器的Hello分组,就说明邻接路由器down了。

Designated Router ID

2004-5-13 内部资料,请勿扩散 第18页, 共44页

OSPF Version 3概论

4字节。实际上是本路由器所承认的DR的Router-ID。用于宣告本链路的DR。设置为0的时候说明没有DR。

Backup Designated Router ID

4字节。实际上是本路由器所承认的BDR的Router-ID。用于宣告本链路的BDR。设置为0的时候说明没有BDR。

Neighbor ID

每个4字节。表示在上一个RouterDeadInterval时间内,本路由器收到的所有有效Hello分组中的Router ID。也就是本路由器所了解的相邻的所有路由器。

由于添加了Interface ID字段,发出Hello分组之前,要将该接口的Interface ID加入Hello分组。

OSPFv3的Hello分组不再包含IP网络掩码字段,因为如前所述,IPv6的运作是基于链路的,不是基于子网的。Options字段被挪动了位置,并且扩展成24位。这样有更多的扩展可能。在Hello分组中必须设置正确的选项位有:E位(是否非stub区域)、N位(是否NSSA区域)和DC位(是否按需电路)。未定义的位应该清零。

对于Designated Router和Backup Designated Router的选择,OSPFv3是用Router ID在Hello分组中表示其DR和BDR。而OSPFv2是用接口地址来表示的。

在Hello分组中包含的一些信息会影响邻接关系的形成。同一个链路上的两个路由器要想形成邻接关系,其Hello分组中的HelloInterval和RouterDeadInterval必须一致,当然版本号、Area ID、Instance ID以及Options字段的特定位也应该相应的地匹配。

Database Description分组

用来描述链路状态数据库的内容。为了可靠性考虑,必须实现某种应答确认机制。因此两个邻接路由器中的一方会成为Master,另一方成为Slave。Slave一方总是使用Master一方发出的序列号来发送DD(Database Description)分组。通过这种方式实现应答确认机制。

DD分组基本构成形式如下:

2004-5-13 内部资料,请勿扩散 第19页, 共44页

OSPF Version 3概论

OSPFv3分组头 DD分组内容 (Type=2)

DD分组内容的各字段按顺序说明如下: 保留位 1字节。 Options

3字节。在“Options字段”一节中已经分析过了,不再赘述。 Interface MTU

2字节。在不分段的情况下,能发出本接口的最大的IPv6分组大小。virtual link的MTU应该设置为0。

DD flag

2字节。其中前13位未用。后三位依次如下:

? ? ?

I位:设置为1时,表示这个分组是一系列Database Description分组中的第一个。 M位:设置为1时,表示这个分组后面还有Database Description分组。 MS位:设置为1时,表示这个路由器是master,否则是slave。

DD sequence number

用于DD分组的按序列发送。在初始值的基础上,随着DD的发送逐渐增加,直到所有的DD都发送完毕。

LSA头

每个20字节,可以有若干个。链路状态数据库中的每个LSA都通过其LSA头来描述。它包含有唯一标识一个LSA及其当前实例的所有必要信息。LSA头格式在下一章中讲解。

可见Database Description分组的Options字段挪动位置并扩大了。有更多的选项位可用。在Database Description分组中必须正确设置的位如下:当且仅当路由器基于MOSPF转发组播数据时,设置MC位;当且仅当路由器希望压制该接口上此后的Hello时,设置DC位,这一位应用在按需拨号电路上。其它未定义的位应该清零。

2004-5-13 内部资料,请勿扩散 第20页, 共44页

OSPF Version 3概论

器根据目标的路径,从Link-LSA中把Link-local Address取出来作为相应的下一跳。

区域间路由计算

和OSPFv2的计算方法基本相同。在区域间仍然运行类似举例向量的路由算法。

首先需要确保到ABR的路径是存在的。之后路由器从inter-area-prefix-LSA中取出前缀,加挂在其所参考的相应的ABR上,路由的metric值等于路由器到ABR的cost加上前缀的cost。

如果一个前缀参考了多个ABR,那么需要通过比较其metric值来决定最佳路由,具有最小metric值的路径入选。如果metric是相等的,就把它们都加入路由表,执行等代价负载均衡。

这里也需要执行下一跳计算。计算方法和区域内路由计算相同。

如果一个路由器是ABR,那么它不会用相邻区域的inter-area-prefix-LSA计算路由。因为它实际上已经有相应的区域内路由了。

自治系统外部路由计算

和OSPFv2的计算方法基本相同。

首先需要确保到ABR的路径是存在的。之后路由器从inter-area-router-LSA中取出ASBR信息,把这个ASBR关联在其所参考的相应的ABR上。这样就确保了ASBR的可达性。

之后,路由器从AS-external-LSA中取出前缀信息,把这个前缀关联到相应的ASBR上。这样到自治系统外部的前缀的路径就生成了。

路由的metric值计算则根据其Metric类型来确定。类型2路由保持其外部Metric不变;类型1则需要和内部路径的cost累加起来。

此外部路由的下一跳计算和OSPFv2有所区别。在OSPFv2中是把AS-external-LSA 的Forwarding address字段和0.0.0.0相比较,来判断是否使用这个转发地址。而在OSPFv3中是根据AS-external-LSA中的选项决定,当F位为1时,用forwarding address作为下一跳,否则就和区域内路由计算一样。

路由的重新计算

当网络状况出现某种变化时,到一个或者多个目标的路由也会发生变化,此时路由器必须重新进行

2004-5-13 内部资料,请勿扩散 第41页, 共44页

OSPF Version 3概论

相应的计算。

路由器如何知道网络状况发生变化了呢?实际上任何变化总有一个路由器会察觉。察觉变化的路由器会修改相应的LSA,并把它泛滥出去,这样所有其它的路由器就会发现这个变化。

因此当路由器收到一个LSA,并确认它是正确的之后,在把LSA存入LSDB时,必须执行一个检查,以判断这个LSA的内容是否被改变了。如果一个LSA的内容被改变了,则根据LSA的LS类型不同,对路由表的不同部分重新计算。

当发生改变的是Router-LSA、Network-LSA、Intra-Area-Prefix-LSA或Link-LSA时,必须重新计算最短路径树和整个路由表。

当发生改变的是Inter-Area-Prefix-LSA时,必须重新计算这个LSA所描述的相应的路由。 当发生改变的是Inter-Area-Router-LSA时,需重新计算这个LSA所描述的相应的路由器的路径,必要时还需要重新计算相关的外部路由。

当发生改变的是AS-external-LSA时,则需重新计算这个LSA所描述的相应路由。

我们看到,不是所有的变化都引起全部路由的重新计算,OSPF是根据需要进行部分计算的。

Virtual Link

OSPFv3的Virtual link定义基本不变,但是也做出了一些变化如下述。

OSPFv2中定义,AS-external-LSA不能通过virtual link来进行传递。而在OSPFv3中,这个定义被推广了,——任何具有AS泛滥范围的LSA永远不会通过virtual link进行泛滥。

此外,对virtual link的OSPF协议分组的源地址,必须使用IPv6的site-local或global scope地址,而不像其它接口类型使用link-local地址。

同样地, virtual link邻居的IPv6地址也必须是site-local或global scope地址。

为了在路由计算时能够查找到virtual link邻居的IPv6地址,virtual link的端点路由器必须在virtual link的transit区域中的一个Intra-Area-Prefix-LSA中公告其virtual link的IPv6接口地址。

如同所有其它的OSPFv3接口一样,路由器为virtual links分配一个本机唯一的Interface ID。

2004-5-13 内部资料,请勿扩散 第42页, 共44页

OSPF Version 3概论

这个ID通过Hello分组跨越virtual link发送,也同时包含在router-LSA中。

连接同一个链路的多个接口

在IPv6的OSPF中,一个路由器可能有多个接口连接到同一个链路上。所有这些接口都可以接收和传送数据。然而只有一个接口发送和接收OSPF控制数据。

因为每个接口有唯一的Interface ID,所以如果路由器接收到Router ID等于自己,但Interface ID不同的Hello分组,它就可以判断自己的两个接口连接到同一个链路上了。这时路由器只保留其中一个接口作为主控接口,用于发送和接收OSPF控制数据。选择接口的标准没有做规定。可以自由实现。

但所有这些接口都在router-LSA中进行描述。此外,还要为这里的每个接口建立一个Link-LSA。这样所有的接口都可以纳入OSPF的路由计算中。

如果路由器通过非主控接口侦听不到自己的Hello,说明主控接口出现故障了,这时用另一个接口替代它,并重新建立所有的邻接关系。

通过本文的讨论我们看到,OSPFv3虽然是在OSPFv2的基础上改进而来的,但已经脱胎换骨,具备了众多优良特性。在未来的IPv6网络路由中会起到重要作用。

2004-5-13 内部资料,请勿扩散 第43页, 共44页

OSPF Version 3概论

参考文献

RFC 2460 Internet Protocol, Version 6 (IPv6) Specification S. Deering, R. Hinden [ December 1998 ]

RFC 2373 IP Version 6 Addressing Architecture R. Hinden, S. Deering [ July 1998 ] RFC 2740 OSPF for IPv6 R. Coltun, D. Ferguson, J. Moy [ December 1999 ] RFC 2328 OSPF Version 2 J. Moy [ April 1998 ]

RFC 1519 Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy V. Fuller, T. Li, J. Yu, K. Varadhan [ September 1993 ]

RFC 1745 BGP4/IDRP for IP---OSPF Interaction K. Varadhan, S. Hares, Y. Rekhter [ December 1994 ]

RFC 1584 Multicast Extensions to OSPF J. Moy [ March 1994 ]

RFC 3101 The OSPF Not-So-Stubby Area (NSSA) Option P. Murphy [ January 2003 ] RFC 1793 Extending OSPF to Support Demand Circuits J. Moy [ April 1995 ]

RFC 2461 Neighbor Discovery for IP Version 6 (IPv6) T. Narten, E. Nordmark, W. Simpson [ December 1998 ]

Routing TCP/IP Volume I Cisco Press, Jeff Doyle [ 1998 ]

2004-5-13 内部资料,请勿扩散 第44页, 共44页

OSPF Version 3概论

Link State Request分组

在所有的DD交换完之后,如果路由器发现自己的LSDB中缺少一些LSA,它需要用LSR(Link State Request)分组来向邻居请求所需要的LSA。

LSR分组基本构成形式如下:

OSPFv3分组头 LSR分组内容 (Type=3)

LSR分组内容中只包含了若干LSA的描述。每个描述的内容依次为:

保留位

2字节。 LS Type

2字节。该LSA的LS Type。 Link State ID

4字节。该LSA的Link State ID Advertising Router

4字节。该LSA的Advertising Router

路由器就是通过LS type和Link State ID和Advertising Router三个字段来声明所请求的LSA。但这些信息只是唯一地标识了一个LSA,而不是LSA的一个实例。所以LSR中的请求描述总是代表请求最新的实例。

Link State Update分组

LSA的传递最终是通过LSU(Link State Update)来完成的。每个LSU分组都包含一个或多个LSA。在支持广播的网络上,LSU是通过组播发送的。每个LSA都需要应答,以确保其正确的收到。应答是通过LSAck(Link State Acknowledgment)分组来进行的。如果某个LSA传输中出现了问题,需要重新传输,则路由器重传LSA所使用的LSU分组通过单播发送,以节省网络资源。

2004-5-13 内部资料,请勿扩散 第21页, 共44页

OSPF Version 3概论

LSU分组基本构成形式如下:

OSPFv3分组头 LSU分组内容 (Type=4)

LSU分组内容依次为: # LSAs

4字节。表示这个LSU内总共有多少个LSA。 LSA

可以有若干个。每个LSA的长度根据其类型决定。所有LSA依次排列。

Link State Acknowledgment分组

OSPF的路由计算基础是所有路由器的LSDB保持同步。要同步就要在路由器之间发送LSA。为了确保LSA的发送正确无误,需要使用LSAck(Link State Acknowledgment)对接收到的LSU进行确认。

LSAck分组基本构成形式如下:

OSPFv3分组头 LSAck分组内容 (Type=5)

LSAck分组内容格式和DD分组完全相同,仅仅包括了所需应答的LSA的头部。

根据具体情况的不同,LSAck分组的目的地址可以是组播地址AllSPFRouters、AllDRouters或单播地址。(详情参考RFC2328)

LSA

OSPFv3对于LSA做出了众多修改,包括: ?

LSA头有轻微改变,LS type字段扩展了,Options字段移到适当的LSA body中;

2004-5-13 内部资料,请勿扩散 第22页, 共44页

OSPF Version 3概论

? ?

Router-LSA、network-LSA和AS-external-LSA的格式也变了;

type 3和type 4 summary-LSA的名字分别变成inter-area-prefix-LSA和inter-area-router- LSA;

? ?

添加了新的LSA类型,分别是Link-LSA和Intra-Area-Prefix-LSA; Type of Service (TOS)字段删除了。

具体说明见以下各小节。

LSA头

OSPFv3的LSA头仍然保持20字节,但是内容变化了。在LSA 头中,OSPFv2的LS age、Advertising Router、LS Sequence Number、LS checksum和length字段都没有变化,但是部分字段发生变化。 Options字段从LSA头中删除了,转移到router-LSA、network-LSA、inter-area-router-LSA、and link-LSA的body中。长度从8位扩展为24位,并且一些位的定义有变化。

LSA头的各个字段按顺序说明如下: LS age

2字节。表示从LSA建立到现在的时间,单位为秒。 LS type

2字节。表示此LSA的类型。其中前3位标识泛滥范围以及对未知LSA类型的处理方法。 Link State ID

4字节。与LS type和Advertising Router字段一起组成了一个LSA的唯一标识。 Advertising Router

4字节。建立这个LSA的路由器的Router ID。对于Network-LSA来说就是链路的DR。 LS sequence number

2字节。用于检测一个LSA是否最新的。 LS checksum

2字节。负责对整个LSA的信息的校验。校验内容包括LSA头,但不包括LS age字段。 length

2004-5-13 内部资料,请勿扩散 第23页, 共44页

OSPF Version 3概论

2字节。表示整个LSA的长度(包括20个字节的LSA头)

LS type

比较重要的一个字段是LS type字段,长度从8位 变成16位。各位的定义如图所示: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |U |S2|S1| LSA Function Code | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

其中第1位为U位,表示对未知LSA类型的处理方法;紧接着2位为S2和S1位,标识LSA的泛滥范围。前3位的定义如下表所示:

位名称 U位 位取值 0 含义 把此LSA当作具有链路本地泛滥范围来对待,从而只能泛滥到本地链路上; 1 把此LSA当作类型已知的LSA来处理,也就是存储下来并泛滥出去。 S2和S1位 00 01 10 11

链路本地泛滥范围 区域泛滥范围 AS泛滥范围 保留 Link State ID

虽然长度保持不变。但是不再具有任何编址性语义。

例如一个IPv6路由器可以建立多个AS-external-LSA,给它们分配Link State ID时,第一个可以分配1.1.1.1,第二个分配2.2.2.2,等等。IPv6的Link State ID仅仅用于区分由一个路由器建立的多个LSA。

对于network-LSA,Link State ID设置成DR在这个链路上的接口的ID。

当路由器为一个链路建立Link-LSA时,它的Link State ID设置为这个路由器在这个链路上的接

2004-5-13 内部资料,请勿扩散 第24页, 共44页

OSPF Version 3概论

口的ID。

主要的LSA类型和LS Type、Link State ID的对应关系表如下: LSA类型 Router-LSA Network-LSA Inter-Area-Prefix-LSA Inter-Area-Router-LSA AS-External-LSA Link-LSA Intra-Area-Prefix-LSA

关于Group-Membership-LSA和Type-7-LSA请参考相关RFC。

Advertising Router LS Type值 泛滥范围 每个路由器都可以 DR ABR ABR ASBR 每个路由器都可以 每个路由器都可以 0x2001 0x2002 0x2003 0x2004 0x4005 0x0008 0x2009 区域 区域 区域 区域 AS 链路本地 区域 Link State ID 路由器的Router ID DR的Router ID 任意ID 任意ID 任意ID 路由器到此链路的接口ID 任意ID Prefix Options

在某些LSA中需要公告IPv6前缀信息,这些信息包含一个8位的PrefixOptions 字段,用来表达这个前缀的一些特性,以便在各种不同的路由计算时做相应的判断和处理。例如希望在特定情况下忽略一个前缀的计算。

由LSA公告的每个前缀都拥有一个自己的PrefixOptions 字段。 PrefixOptions字段格式如下:

0 1 2 3 4 5 6 7 +--+--+--+--+--+--+--+--+ | | | | | P|MC|LA|NU| +--+--+--+--+--+--+--+--+ NU位

非单播位。如果设置为1,则这个前缀不会纳入IPv6单播路由计算中。 LA位

本地地址位。如果设置为1,则这个前缀是路由器的一个接口地址。

2004-5-13 内部资料,请勿扩散 第25页, 共44页

OSPF Version 3概论

MC位

组播位。如果设置为1,则这个前缀应该纳入组播计算中,否则不纳入组播计算。 P位

传播位。如果一个NSSA区域的前缀需要被ABR传播出去,就需要设置这一位。

Router-LSA

LS类型值为0x2001,具有区域泛滥范围。

在一个区域中,一个路由器可以建立一个或多个Router-LSA。每个Router-LSA包含若干链路描述(link description),每个链路描述都描述了路由器的一个接口信息。一个区域的所有Router-LSA加在一起构成一个集合,能够描述区域内所有路由器及其OSPF接口。当使用多个Router-LSA时,通过Link State ID字段加以区分。

Router-LSA的基本构造如下图: 标准LSA头 LS Type=0x2001

其中Flag和Options字段构成如下图:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| 0 |W|V|E|B| Options | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Flag部分中定义了最后4位,用来表示路由器的能力(capability)。说明如下: W位

为1时,表示这个路由器是一个组播“通吃者”(wild-card receiver)。在运行MOSPF时,作为通吃者的路由器接收所有组播组的数据报。这种特性应用于MOSPF的区域间组播路由和AS间组播路由上。

V位

为1时,表示这个路由器是跨越本区域的一个virtual link的一个端点。这个virtual link必须是已经建立full邻接关系的。

Flag 1字节 Options 链路描述1 3字节 链路描述2 …… 链路描述n 2004-5-13 内部资料,请勿扩散 第26页, 共44页

OSPF Version 3概论

E位

为1时,表示这个路由器是一个ASBR。 B位

为1时,表示这个路由器是一个ABR.

Router-LSA的Options字段在上一章中已经详细说明过,这里不再赘述。对于一个IPv6路由器来说,应该设置如下:

? ? ? ? ? ? ?

之后,需要在这个router-LSA上加挂link description。路由器在这个区域中的每个接口都通过加挂一个link description来描述。每个link description有16字节长,如下图: Type 1字节

各字段介绍如下: Type

所描述的接口类型,也就是链路的类型。目前的定义有4种如下:

类型值 1 2 3 说明 点到点链路,直接连接到另一个路由器 接口连接到一个transit网络上 保留 保留未用 Metric 1字节 2字节 Interface ID 4字节 Neighbor Interface ID Neighbor Router ID 4字节 4字节 V6位:设置为1

E位:当且仅当所属区域为stub区域时设置为0。 MC位:当且仅当路由器运行MOSPF时设置为1。 N位:当且仅当所属区域为NSSA区域时设置为1。 R位:设置为1。

DC位:当且仅当路由器可以正确处理LSA的LS age 字段中出现的DoNotAge位的时候设置为1。 所有未定义的位都应该清零。

2004-5-13 内部资料,请勿扩散 第27页, 共44页

OSPF Version 3概论

4

Metric

Virtual link 从此接口发出数据时的代价(cost)。 Interface ID

此接口的Interface ID。实际上是任意值,只要能唯一标识一个接口即可。 Neighbor Interface ID

对于点到点类型和virtual link类型,是邻居的接口的Interface ID;对于transit类型,是其DR的接口的Interface ID。这些ID是通过邻居发送的Hello分组获得。

Neighbor Router ID

对于点到点类型和virtual link类型,是邻居的Router ID;对于transit类型,是其DR的Router ID。

对于不同的接口类型,需要添加的link description数量和内容也有所区别。值得注意的是在Point-to-MultiPoint接口上,需要为每个full的邻居添加一个单独的类型1的link description (点到点),Neighbor Interface ID字段设置为邻居在其Hello分组中所公告的Interface ID,Neighbor Router ID 字段设置为邻居的Router ID。而virtual link的cost是在路由表计算过程中计算的。

但是,处于\或\状态的接口不进行描述。没有任何full邻居的接口也不描述,也就是说Router-LSA不描述stub网络。主机路由也不再出现在 router-LSA中,而是包含在intra-area-prefix-LSA中。

从这里我们可以看到,一个Router-LSA所描述的,实际上是“一个路由器,以及此路由器是通过哪些链路连接到哪些邻居的”。它只包含拓扑计算的信息。

还会有另外一种情况——假设路由器A通过接口I连接到网络N,而A在网络N上没有邻居,那么A不会在其router-LSA中描述I。如果另一个路由器B被加入网络N,则A必须公告一个新的link description,因为A已经和B在N上建立了full的邻接关系。这时有两种实现办法。一种办法是,重新建立前边的router-LSA,但是这次加挂新的link description。另一种办法是,建立另一个单独的router-LSA,使用另一个Link State ID来描述到N网络的连接。

2004-5-13 内部资料,请勿扩散 第28页, 共44页

OSPF Version 3概论

Network-LSA

LS类型值为0x2002,泛滥范围为区域范围。

每个具有2个或更多路由器的broadcast 或NBMA网络都需要建立一个Network-LSA。Network-LSA的建立由DR来完成。一个Network-LSA列出了这个链路上所有相连的路由器。

Network-LSA的基本结构如图: 标准LSA头 LS Type=0x2002

Options字段前面已经说明过,不再赘述。

其后所加挂的一系列Attached Router实际上是本链路所连接的所有路由器的Router ID。 可见OSPFv3的Network-LSA已经不包含网络掩码。以前在IPv4 network-LSA中的所有地址信息都转由intra-Area-Prefix-LSA携带。

另外比较重要的是,network-LSA的Options字段设置成与这个链路相关联的所有link-LSA的Option字段的逻辑或。这样,在这个网络链路上,只要有一个路由器希望宣告某种能力,这种能力就会被宣告出来。也就是说,路由器能力的宣告不会受到DR能力的限制。这大大增强了OSPF的扩展性和适应性。

保留未用 1字节 Options Attached Router 1 Attached Router 2 …3字节 4字节 4字节 … Attached Router n 4字节 Link-LSA

LS type值为0x0008,具有link-local泛滥范围。

一个路由器为每个相连的,并且是有两个以上路由器的链路单独建立一个Link-LSA。 Link-LSA有三个作用: ? ? ?

向链路上的所有其它路由器通告本路由器的link-local地址 向链路上的所有其它路由器通告链路上关联的所有IPv6前缀 路由器可以通过Network-LSA 来传递Options字段的选项信息。

基本格式如下图:

2004-5-13 内部资料,请勿扩散 第29页, 共44页

OSPF Version 3概论

Link-loc标准LSA头 Rtr Pri LS 1字节 Type=0x0008 3字节 e Address 16字节

Rtr Pri

本接口的优先级。 Options

路由器“期望”在此链路的Network-LSA中设置的Options字段值。 Link-local Interface Address 此接口的链路本地地址。 # prefixes

在LSA中包含的IPv6前缀数量。

紧接着就是若干个前缀描述。本链路上的每个IPv6前缀都要在此描述。每个描述的格式如下: PrefixLength 1字节

PrefixLength

标识IPv6前缀的长度。而不使用掩码。 PrefixOptions

前边已经有详细说明。 Address Prefix

一个IPv6地址前缀。长度是0、4、8、12或16字节,根据PrefixLength的值调整,但保持32位的整数倍。

PrefixOptions 1字节 保留未用 2字节 Address Prefix 长度可变 s Interfac4字节 Optional # prefixes 前缀描述1 …… 前缀描述n 2004-5-13 内部资料,请勿扩散 第30页, 共44页

OSPF Version 3概论

Intra-Area-Prefix-LSA

intra-area-prefix-LSA的LS类型为0x2009。具有区域泛滥范围。 基本格式如下图:

Referenced Referenced 标准LSA头 LS Type=0x2009 # prefixes LS type 2字节 2字节 4字节

# prefixes

在LSA中包含的IPv6前缀数量。必要的话,可以通过多个intra-area-prefix-LSA来携带前缀,这样可以控制LSA的长度。

Referenced LS type

表明这个LSA是参考一个Router-LSA,还是一个Network-LSA。1表示参考一个router-LSA,2表示参考一个Network-LSA。

Referenced Link State ID

当这个LSA是参考一个Router-LSA时,设置为0。当这个LSA是参考一个Network-LSA时,

设置为该链路的DR的Interface ID。

Referenced Advertising Router

当这个LSA是参考一个Router-LSA时,设置为这个路由器的Router ID。当这个LSA是参考一个Network-LSA时,设置为该链路的DR的Router ID。

此后紧接着是若干IPv6前缀描述。每个区域内前缀,只要它和这个链路或者路由器相关联,都要在此进行描述。这个描述和Link-LSA中的前缀描述相同,不再赘述。

一个Intra-area-prefix-LSA具有两个功能之一。一个是,通过引用一个network-LSA的方式,将一系列地址前缀与一个transit 网络链路关联起来。另一个是,通过引用一个router-LSA的方式,将一系列地址前缀与一个路由器关联起来。Stub链路的前缀是与其相连的路由器相关联的。

一个路由器可以在一个区域中建立多个intra-area-prefix-LSA,这些LSA通过它们的Link State

4字节 ID Router 述1 Link State Advertising 前缀描…… 前缀描述n Referenced 2004-5-13 内部资料,请勿扩散 第31页, 共44页

OSPF Version 3概论

ID来进行区分。每个intra-area-prefix-LSA包含若干个前缀描述。

一个链路的DR负责为这个链路建立一个或多个intra-area-prefix-LSA,以便向区域内公告这个链路的所有前缀。

设路由器A是链路L的DR,且A通过接口I连接到L。则A需要从自己的接口I的数据结构中检查每一个与链路L相关的Link-LSA。如果Link-LSA的公告路由器与DR是full邻接的,则把Link-LSA中列出的前缀拷贝到intra-area-prefix-LSA中去。Options 字段中的NU位 and/or LA位被置1的前缀不应该拷贝,link-local地址也不拷贝。每个前缀都通过一个前缀描述字段来描述。

前缀字段中具有相同的PrefixLength和Address Prefix的多个前缀被认为是重复的。此时它们的 PrefixOptions字段应该以逻辑或的方式来融合,得出的结果是一个唯一的前缀,然后再拷贝到intra-area-prefix-LSA中。这里所有前缀的Metric字段设置为0。

同时路由器A也要为自己建立intra-area-prefix-LSA,来公告它自己的前缀,以及相连的stub网络的前缀:

这里路由器A首先检查自己各个接口的状态。如果接口状态为 Down,则该接口的前缀不发送。 如果这个接口在A的router-LSA以类型2链路来描述,也就是说是一个transit 网络链路时,该接口的前缀不发送 (因为这些前缀应该在这个链路的intra-area-prefix-LSA之中)。

如果接口类型是Point-to-MultiPoint,或者接口状态是Loopback,或者接口连接到一个没有前缀的点到点链路上,那么相应的前缀描述字段描述的就是这个接口关联的site-local地址和global scope IPv6地址,其PrefixOptions字段的LA位设置为1,PrefixLength为128,Metric为0。

否则,相应的前缀描述字段描述的就是这个链路的site-local前缀和global前缀。 属于本区域的直接连接的主机的IPv6前缀也需要加入intra-area-prefix-LSA

如果A上配置了一个virtual link穿过这个区域,A需要为这个virtual link生成一个前缀描述项。这里A把自己的site-local或global scope IPv6接口地址之一加入LSA,设置PrefixOptions的LA位,并设置PrefixLength为128, Metric为0。这个信息会用于以后的路由计算,以便virtual link 两端的路由器能发现对方的IPv6地址。

2004-5-13 内部资料,请勿扩散 第32页, 共44页

OSPF Version 3概论

Inter-Area-Prefix-LSA

LS类型值为0x2003,具有区域泛滥范围。

在IPv4中,inter-area-prefix-LSA称为type 3 summary-LSA。每个inter-area-prefix-LSA描述来自区域外的,但是属于自治系统内部的一个前缀。

基本格式如下:

标准LSA头 LS Type=0x2003

Metric

这条路由的cost。描述区域边界汇总路由时,设置为所有被汇总的子网路由中最大的cost。 前缀描述

用来描述一个区域间的IPv6前缀。格式已经在前面说明过,不再赘述。

值得注意的是,inter-area-prefix-LSA的Link State ID不再有编址性语义。而仅仅用来区分同一个路由器建立的多个inter-area-prefix-LSA。

由于描述的是一个单播路由,PrefixOptions 的NU位应该被清零。MC位则依据是否运行MOSPF,以及如何运行来设置

Link-local地址决不能在inter-area-prefix-LSA里公告。

保留未用 12位 Metric 20位 前缀描述 长度不定 Inter-Area-Router-LSA

LS类型值为0x2004,具有区域泛滥范围。

在IPv4中,Inter-area-router-LSA称为type 4 summary-LSA。

Inter-area-router-LSA由ABR建立,用来描述到其它区域的路由器的路由。每个Inter-area-router-LSA描述一条路由。

基本格式如下图:

2004-5-13 内部资料,请勿扩散 第33页, 共44页

OSPF Version 3概论

标准LSA头 LS Type=0x2004

Options

保留未用 1字节 Options 3字节 保留未用 1字节 Metric 3字节 Destination Router ID 4字节 应注意,这里Options字段描述的不是源路由器的能力,而是目的路由器所支持的能力,所以此字段值应该等于目的路由器的router-LSA的Options字段值。具体定义参见上一章的说明。

Metric

这条路由的cost。 Destination Router ID

所描述的目的路由器的Router ID。

不难发现,目的路由器的Router ID如现在转移到LSA的body中了。Inter-area-router-LSA的Link State ID不再是目的路由器的OSPF Router ID,而仅仅用来区分同一个路由器建立的多个inter-area-router-LSA。

AS-external-LSA

LS类型值为0x4005,具有AS泛滥范围。

每个AS-external-LSA描述到达自治系统外部的一个前缀的路径。 基本格式如下图:

External 标准LSA头 Flag Metric 3字节 前缀描述 长度不定 Forwarding Address Route Tag LS Type=0x4005 1字节 Flag

定义如图:

+-+-+-+-+-+-+-+-+ | |E|F|T| +-+-+-+-+-+-+-+-+

其中定义的三位分别是:

16字节 可选 4字节 可选 4字节 可选 Link State ID Referenced 2004-5-13 内部资料,请勿扩散 第34页, 共44页

OSPF Version 3概论

? E位:外部路由的Metric类型。如果设置为1,表示此为2类外部路由,其Metric不随着路由的传递而增长。如果设置为0,表示此为1类外部路由,其Metric随着路由的传递而增长。

? ? Metric

F位:如果设置为1,则表示后面的Forwarding Address可选字段存在。 T位:如果设置为1,则表示后面的External Route Tag可选字段存在。

此路由的cost。 前缀描述 如图所示:

PrefixLength 1字节

其中的PrefixLength、PrefixOptions和Address Prefix三个部分的位置和定义与前面的说明

相同。唯一的区别在于,前面所保留未用的16位被定义为Referenced LS type。如果Referenced LS type非零,则说明有一个此种类型的LSA与此LSA相关联。

Forwarding address

可选的128位Pv6地址。当前面的F位为1时存在。表示到达目的的数据应该转发到这个地址。在公告路由器不是最优的下一跳的时候可以使用。

External Route Tag

可选的标记位。可以用于ASBR之间的通信。一个比较常见的例子是,在OSPF自治系统的两个边界路由器上进行路由分发时,通过对引入的路由进行标记,可以很方便地进行路由过滤。

Referenced Link State ID

当设置了前面的Reference LS Type时存在。 如果存在,说明此条外部路由有一些相关信息需要参考另外一个LSA。被参考的LSA由以下字段值确定:

? ? ?

其LS type 等于此AS-external-LSA 的Referenced LS Type;

其Link State ID 等于此AS-external-LSA 的Referenced Link State ID; 其Advertising Router等于此AS-external-LSA 的Advertising Router。

PrefixOptions 1字节 Referenced LS type 2字节 Address Prefix 长度可变 2004-5-13 内部资料,请勿扩散 第35页, 共44页

OSPF Version 3概论

这种参考能力是为未来的扩展准备的,目前并没有使用。

上述三个可选项可能不同时出现,但是只要出现,其次序总是确定的——Forwarding address总是在最前头,External Route Tag次之,Referenced Link State ID在最后。

AS-external-LSA的Link State ID不再具有任何编址性语义。仅仅用来区分同一个路由器建立的多个AS-external-LSA。Network Mask也取消了,而代之以PrefixLength。

Link-local地址不能在AS-external-LSA中公告。

自身建立的LSA

比OSPFv2的定义变得简化了。在OSPFv3中,Advertising Router 等于本路由器的Router ID的LSA,就是自身建立的LSA。

协议运作

选举DR和BDR

对于Designated Router和Backup Designated Router的选择,选举算法不变。只是现在是用Router ID在OSPF Hello分组中指出,而不再像原来一样使用接口地址。

LSDB

OSPF最短路径优先算法的基础是LSDB。LSDB一致的OSPF路由器才能做出一致的路径选择。每个OSPF路由器都维护着多个LSDB:

?

链路LSDB存储具有链路本地泛滥范围的LSA。

2004-5-13 内部资料,请勿扩散 第36页, 共44页

OSPF Version 3概论

? ?

区域LSDB存储具有区域泛滥范围的LSA。 AS LSDB存储具有AS泛滥范围的LSA。

在每个区域内路由器上,只维护本区域的区域LSDB;而在ABR上为每个相连的区域维护一个单独的区域LSDB。

为了把LSA加入数据库,首先需要检查一个LSA的LS类型,以及其属于哪个区域或链路。通过这些信息可以获得一个LSA列表,其中的LSA都具有相同的LS类型,然后可以基于LSA的Link State ID和Advertising Router进一步搜索。

在OSPFv3中通过LS type、 Link State ID和Advertising Router三个字段来联合标识一个特定的LSA。对于同一个LSA的两个实例,通过LS Sequence Number来确定哪个是最新的。

最终是把一个LSA的唯一的最新的实例加入相应的LSDB中。当向LSDB装入新的LSA实例时,任何旧的LSA实例都必须删除。

链路LSDB

在一个链路上建立或泛滥的具有link-local泛滥范围的LSA,都包含在相应的链路LSDB中。例如link-LSA。

另外对LS类型为未知的LSA有特殊处理。所有LS类型未知并且U位设置为0的LSA,都包含在相应的链路LSDB中(也就是接收这个LSA的接口所在的链路)。

区域LSDB

所有具有区域泛滥范围的LS类型已知的LSA都包含在区域LSDB中。其中包括router-LSA、network-LSA、inter-area-prefix-LSA、inter-area-router-LSA和intra-area-prefix-LSA。

LS类型未知,且U-bit 设置为1,且为区域泛滥范围的LSA也加入区域LSDB。

IPv6路由器把group-membership-LSA加入区域LSDB来实现MOSPF。Type-7-LSA加入NSSA区域的LSDB。

2004-5-13 内部资料,请勿扩散 第37页, 共44页

OSPF Version 3概论

自治系统LSDB

所有LS类型为可知并且具有AS泛滥区域的 LSA均加入自治系统LSDB,而属于某个特定区域或链路。这个定义实际上只影响到AS-external-LSA。

LS类型未知,并且U-bit设置为1,且具有AS泛滥区域的LSA也加入自治系统LSDB。

不同LSA类型与LSDB的对应关系如表所示:

泛滥范围 链路本地 LS类型 已知 未知 未知 已知 未知 未知 已知 未知 未知 U位 -- 0 1 -- 0 1 -- 0 1 加入的LSDB 链路 链路 链路 区域 链路 区域 AS 链路 AS 区域 AS

LSA的泛滥

与OSPFv2的泛滥机制相比,大多数算法没有变化。

然而,OSPFv3新增了一个链路本地泛滥范围,并且修改了对于未知LSA类型的处理,导致了泛滥算法的一些改变。这些变化下面详细说明。

同时,在IPv6中LSA存在一个识别与否的问题,IPv6的LSA的内容也有所不同,所以将LSA装入OSPF数据库时也会导致一些不同。

接收LSU

Link State Updates的接收和发送必须考虑LSA的泛滥范围和 U位的设置。

我们前面讨论过,IPv6允许拥有未知LS类型的LSA。如果一个未知类型的LSA的泛滥范围被标记为“当作类型已知的LSA来处理,存储下来并泛滥出去”,不加以控制就泛滥到stub区域内,可能会使stub区域内路由器的LSDB过大,以至于超出其区域内路由器的处理能力极限。

2004-5-13 内部资料,请勿扩散 第38页, 共44页

OSPF Version 3概论

为了避免这种情况,OSPFv3针对 stub区域做出了相应规定。即当一个LS类型为未知的LSA要想被泛滥进入或者通过一个stub区域,必须同时满足两个条件:一是这个LSA具有区域泛滥范围或者链路本地泛滥范围,二是这个LSA的U位设置为0。

因此接收LSU的过程变化了:

一个路由器如果在stub区域的接口上收到一个LSU,需要检查LSA的LS类型。如果是LS Type是未知类型的,并且LSA泛滥范围为AS范围或U位设置为1,则丢弃这个LSA,转而检查下一个LSA。在OSPFv2中相应的行为是不向STUB区域泛滥AS-external-LSA,这里是把这个行为推广了。

否则如果LSA的泛滥范围设置为“11”,则丢弃之,转而检测下一个LSA。

发送LSU

对于OSPFv2和OSPFv3,发送LSU的步骤相同。但是在选择一个LSA合法泛滥接口的原则上有所不同。 选择因素之一是LSA的泛滥范围。对于具有区域泛滥范围的LSA,需要考查其所关联的区域。对于具有链路本地泛滥范围的LSA,需要考查其所关联的接口。

另一个因素是这个LSA是否具有认可的LS类型。

第三个因素是LS类型中U位的设置。如果U位为0,未知的LS类型当作具有链路本地范围。如果为1,未知的LS类型被存储并泛滥,就如同它们已经被识别一样。

具体来说有以下几种情况:

LSA的LS类型为已知

这种情况下,合法接口的选择依据LSA的泛滥范围决定。如果范围是AS,合法接口就是除virtual

link之外的所有接口。(AS-external-LSA不能泛滥进入stub区域)。如果范围是区域,合法接口就是连接到此区域的所有接口。如果范围是链路本地,那么就只有一个合法接口,也就是连接到此LSA相关链路的那个接口,也就是接收到这个LSA的接口。

LSA的LS类型为未知,并且LS类型中的U位为0

这种情况下,只有一个合法接口,也就是接收到这个LSA的接口。 LSA的LS类型为未知,并且LS类型中的U位为1

这种情况下,和第一种情况一样,依据LSA的泛滥范围选择合法接口。但是在这种情况下,任

2004-5-13 内部资料,请勿扩散 第39页, 共44页

OSPF Version 3概论

何连接到stub区域的接口不能成为合法接口。原因参见上一小节。

上述判断之外,有时候还需要做出进一步的决策。例如,在一个广播链路上,路由器A和B形成了邻接关系。路由器A支持MOSPF,而路由器B不支持MOSPF。则A可以通过交换协议分组得知这一点。那么现在A对于group-membership-LSA如何处理呢?是否应该泛滥给B呢?这时要根据A和B的相对地位来决策。如果B是这个链路上的DR或BDR,那么A将group-membership-LSA泛滥给B。如果路由器B不是DR或BDR,则A不把group-membership-LSA泛滥给B。这种方法解决了OSPF的扩展问题,也就是说要在broadcast和NBMA网络上泛滥新的LSA类型,不一定要求DR支持扩展。

路由计算

前述三种LSDB的划分也使OSPF路由计算分为三步。

区域内路由计算

OSPFv3和OSPFv2中的区域内计算方法是基本相同的,在一些处理上更加简洁明了。

最短路径算法分为两个阶段。首先是运行Dijkstra 算法,然后是把stub链路作为叶子添加到树上。 在整个拓扑图中,每个路由器就是一个节点,由其router-LSA来描述;每个transit链路也是一个节点,由其network-LSA来描述。每个路由器节点通过其Router ID标识,每个transit链路节点由其DR的Interface ID和Router ID联合标识。另外router-LSA和network-LSA还描述了节点及其相邻节点的连接关系。这样所有的router-LSA和network-LSA就描述了所有的节点和非stub网络。

依据这样一张拓扑图,一个路由器以自己的Router-LSA为起始点,运行Dijkstra 算法,可以得到一棵最短路径树。实际上到任何一个路由器和Transit链路的最短路径就已经得到了。

我们应该注意到,在计算最短路径树的过程中只使用了拓扑信息,并没有考虑任何前缀信息。所以接下来需要利用这棵最短路径树计算到每个前缀的路由。这时候,路由器从intra-area-prefix-LSA取出前缀信息,根据其所参考的router-LSA或network-LSA,把这些前缀挂在最短路径树总相应的节点上。此时到每个前缀的路径都十分清楚了。

但是在路由表中,每条路由都需要一个下一跳地址。因此还有一个步骤——下一跳计算。此时路由

2004-5-13 内部资料,请勿扩散 第40页, 共44页

本文来源:https://www.bwwdw.com/article/6k3h.html

Top