首页 OSPF协议V2

OSPF协议V2

举报
开通vip

OSPF协议V2OSPF协议V2 OSPF协议(Version 2) 目 录 OSPF协议(Version 2) ....................................................................... 0 1. 介绍 ................................................................................................................................

OSPF协议V2
OSPF协议V2 OSPF协议(Version 2) 目 录 OSPF协议(Version 2) ....................................................................... 0 1. 介绍 ............................................................................................................................................. 5 1.1 协议概述................................................................................................................................. 5 1.2 常用术语的定义 ..................................................................................................................... 6 1.3 链路状态路由技术的简短历史 ........................................................................................... 7 1.4 本文档的组织 ........................................................................................................................ 8 1.5 感谢 ......................................................................................................................................... 8 2. 链路状态数据库:组织和计算 .................................................................... 8 2.1 路由器和网络的表示 .......................................................................................................... 8 2.1.1 非广播网络的表示 ........................................................................................... 10 2.1.2 一个链路状态数据库的例子 ........................................................................ 11 2.2 最短路径树 ........................................................................................................................... 13 2.3 使用外部路由信息 .............................................................................................................. 15 2.4 等代价多路径 ....................................................................................................................... 16 3. 划分AS为区域 ................................................................................................................ 16 3.1 自治系统的主干网 ............................................................................................................. 17 3.2 区域间路由 ......................................................................................................................... 17 3.3路由器分类 ............................................................................................................................ 17 3.4 一个简单的区域配制 ......................................................................................................... 18 3.5 IP子网支持 ....................................................................................................................... 23 3.6. Supporting stub areas(支持stub areas) ....................................................................... 23 3.7. Partitions of areas(区域的分割) ........................................................................ 25 4. Functional Summary(功能概览)................................................................ 26 4.1. Inter-area routing(区域间路由) ................................................................................... 26 4.2. AS external routes(AS 外路由) .................................................................................. 27 4.3. Routing protocol packets(路由协议包) ...................................................................... 27 4.4. Basic implementation requirements(基本的实现要求) ........................................ 28 4.5. Optional OSPF capabilities(可选的OSPF功能) ....................................................... 29 5. Protocol Data Structures(协议数据结构) ........................................... 30 6. The Area Data Structure(区域数据结构) ............................................ 31 7. Bringing Up Adjacencies(建立邻接关系) ................................. 33 7.1. The Hello Protocol(Hello 协议) ................................................................................. 33 1 7.2. The Synchronization of Databases(同步数据库) ....................................................... 33 7.3 The Designated Router(指派路由器) ........................................................................ 34 7.4. The Backup Designated Router(备用指派路由器) ............................................ 34 7.5. The graph of adjacencies(邻接图表) .......................................................................... 35 8. Protocol Packet Processing(协议包处理) ........................................... 36 8.1. Sending protocol packets(发送协议包) ...................................................................... 36 8.2. Receiving protocol packets(接收协议包)................................................................... 37 9. The Interface Data Structure(接口数据结构) .............................. 38 9.1 接口状态(Interface states) .............................................................................................. 41 9.2 引发接口状态转移的事件(Events causing interface state changes) .......................... 42 9.3 接口状态机(The Interface state machine) .................................................................. 43 9.4 选举Designated Router(Electing the Designated Router) ........................................... 45 9.5 发送Hello packet(Sending Hello packets) ................................................................. 46 9.5.1 NBMA网络中发送Hello packet(Sending Hello packets on NBMA networks) ............................................................................................................................................... 47 10. 邻居数据结构(The Neighbor Data Structure) ................................. 48 10.1 邻居状态(Neighbor states) ........................................................................................... 49 10.2 引起邻居状态转移的事件(Events causing neighbor state changes) ........................ 52 10.3 邻居状态机(The Neighbor state machine) .................................................................. 53 10.4 是否成为Adjacency(Whether to become adjacent) ................................................... 57 10.5 接收Hello Packet(Receiving Hello Packets) .............................................................. 57 10.6. 接收数据库描述包 ............................................................................................................ 58 10.7 接收链路状态请求包 ......................................................................................................... 60 10.8 发送数据库描述包 ............................................................................................................. 60 10.9 发送链路状态请求包 ......................................................................................................... 61 10.10 举例 .................................................................................................................................... 61 11( 路由表结构 ................................................................................................................... 63 11.1 路由表查找 (Routing table lookup) .......................................................................... 65 11.2 无区域的路由表实例 ......................................................................................................... 65 11.3 有区域的路由表实例 ......................................................................................................... 66 12(链路状态广播(LSAs) ............................................................................................... 68 12.1 LSA头部 ........................................................................................................................... 68 12.1.1 LS经历时间 ..................................................................................................... 68 12.1.2 选项(Options) ............................................................................................ 69 12.1.3 LS类型 .............................................................................................................. 69 12.1.4 链路状态ID ..................................................................................................... 69 12.1.5 广播路由器(Advertising Router)......................................................... 70 12.1.6 LS序列号 ......................................................................................................... 70 12.1.7 LS checksum ..................................................................................................... 70 2 12.2. 链路状态数据库(The link state database)................................................................ 71 12.3. 服务类型描述(Representation of TOS) ................................................................... 71 12.4 发布LSAs ......................................................................................................................... 72 12.4.1 路由器LSAs( Router-LSAs) ................................................................. 73 12.4.1.1 描述点到点接口 .................................................................................... 75 12.4.1.2 描述广播和NBMA接口 ................................................................... 75 12.4.1.3 描述虚链路 ............................................................................................. 76 12.4.1.4 描述点到多点接口 ............................................................................... 76 12.4.1.5 路由器的例子 ........................................................................................ 76 12.4.2 网络LSA ............................................................................................................. 78 12.4.2.1 网络LSA的例子 .................................................................................. 78 12.4.3. 摘要LSA(Summary-LSAs) .......................................................................... 78 12.4.3.1 发起摘要LSA进入stub areas(Originating summary-LSAs into stub areas)....................................................................................................... 80 12.4.3.2 摘要LSA的例子(Examples of summary-LSAs) .............. 80 12.4.4. AS外部LSA(AS-external-LSAs) .............................................. 81 12.4.4.1 AS外部LSA的例子(Examples of AS-external-LSAs)81 13. 扩散流程(The Flooding Procedure) ........................................................ 83 13.1 决定哪一个LSA更新一些(Determining which LSA is newer) .............................. 84 13.2 数据库中安装LSA(Installing LSAs in the database) ................................................ 85 13.3 扩散流程的下一步(Next step in the flooding procedure) ...................................... 85 13.4 接收自发起LSA(Receiving self-originated LSAs) ................................................... 87 13.5 发送链路状态确认包(Sending Link State Acknowledgment packets) .......................... 87 13.6 回送LSA(Retransmitting LSAs) ................................................................................. 88 13.7 接收链路状态确认(Receiving link state acknowledgments) ................................. 89 14. 老化链路状态数据库(Aging The Link State Database) ......... 89 14.1 LSA的早熟老化(Premature aging of LSAs)............................................................ 90 15. 虚链路(Virtual Links) ..................................................................................... 90 16. 路由表计算(Calculation of the routing table) ............................ 91 16.1 计算域内最短路径树 ........................................................................................................ 92 16.1.1 下一跳的计算.......................................................................................... 94 16.2 域间路由计算 .................................................................................................................... 95 16.3检查transit区域的summary-LSA ................................................................................. 96 16.4计算AS的外部路由 ........................................................................................................... 97 16.4.1 外部路径选择 ....................................................................................... 98 16.5递加更新,summary-LSA .................................................................................................. 99 16.6递加更新,AS-external-LSA .......................................................................................... 99 16.7路由表变化时产生的事件 ................................................................................................ 99 16.8 等价多路径 ..............................................................................................................100 附录: .................................................................................................................................................101 3 A:OSPF数据格式 ...................................................................................................................101 A.1 OSPF包封装 ..............................................................................................................101 A.2 Options ......................................................................................................................103 A.3 OSPF的包格式 ..........................................................................................................104 A.3.1 OSPF包头 .......................................................................................................104 A.3.2 Hello包 ............................................................................................................105 A 3.3数据库描述包 ..................................................................................................106 A3.4链路状态请求包 ..............................................................................................107 A 3.5链路状态更新包(Type=4) ..............................................................................107 A.4 LSA formats ...............................................................................................................108 A.4.1 LSA头格式 .....................................................................................................109 A 4.1路由器头 ..........................................................................................................109 A.4.2 Router-LSAs .................................................................................................... 110 A.4.3 Network-LSAs ................................................................................................. 112 A.4.4 Summary-LSAs ............................................................................................... 112 A.4.5 AS-External-LSAs ........................................................................................... 113 B. Architectural Constants ......................................................................................................... 114 C. Configurable Constants ......................................................................................................... 115 C.1全局变量...................................................................................................................... 115 C.2 Area Parameters ........................................................................................................... 116 C.3 路由接口参数 ............................................................................................................ 116 C.4 虚链路参数 ................................................................................................................ 117 C.5.NBMA 网络参数 ....................................................................................................... 117 C.6.点到多点网络参数 ..................................................................................................... 118 C.7.主机路由参数 ............................................................................................................. 118 D. Authentication(略) ................................................................................................................. 118 E.分配Link State ID的一种算法 ............................................................................................ 118 F.到相同网络的多接口 ............................................................................................................120 References ...........................................................................................................................................121 注解......................................................................................................................................................123 4 1. 介绍 该文档是Open Shortest Path First(OSPF)(最短路径优先)TCP/IP因特网路由协议的协议规程。OSPF属于内部网关协议(Interior Gateway Protocol,IGP)。这说明OSPF只在一个单一的自治系统(Autonomous System)内的路由器间发布路由信息。OSPF协议基于链路状态或SPF技术,与基于Bellman,Ford算法的因特网路由协议不同。 OSPF协议由IETF(Internet Engineering Task Force)的OSPF工作组发展的。其为TCP/IP的网络的环境而 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 的,包括显式支持CIDR(Classless Inter-Domain Routeing和标记从外部获得的路由信息。OSPF同时提供路由更新的认证,使用IP Multicast来发送/接收更新信息。另外,为能在引入少量的路由协议信息的同时对拓扑的改变做快速反映,这方面OSPF也做了很多工作。 1.1 协议概述 OSPF仅根据IP数据包头部的IP地址来路由IP Packets。IP Packets都照原样路由――即它们在自治系统中传输的时候不以任何其它协议封装(encapsulated)。OSPF是一个动态路由协议。它能快速 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 到在AS中拓扑改变,并在一定时间会聚以后计算新的无回路路径。这个会聚时间很短,需要的路由信息交换也少。 在链路状态路由协议中,每个路由器保持一个数据库描述了自治系统的拓扑。这个数据库称为链路状态数据库。每个参与的路由器有一个相同的数据库。数据库中的每个单独的piece是一个特定路由器的本地状态(如路由器的可使用接口和可达邻居)。路由器在自治系统中以扩散(flooding)的方式发布它的本地状态。 所有路由器运行同样的算法,各自的运行是并行的。根据这个链路状态数据库,每个路由器以自己为根构造最短路径的树。这个最短路径树包括了到自治系统中每个目的地的路径。外部获得的路由信息以叶子的形式出现在树上。 当到一个目的地的几个等代价的路径存在时,数据量在它们中等量分布。路径的代价以一个无量纲的度量来描述。 OSPF允许sets of networks(多个网络)组成一起。这种组合成为一个区域(area)。在这个区域内的拓扑结构对于自治系统中的其它路由器是隐藏的。这样信息隐藏使得路由信息交换大量减少。同时,在这个区域内的路由仅由区域的内部拓扑决定。一个区域是一个IP Subnetted网络的概括。 OSPF可以灵活的配置IP子网(Subnet)。每个相同IP网络号(IP network number)的不同子网可以有不同的大小(即不同的掩码,mask)。这通常指的是可变长子网划分。一个Packet按照最佳匹配(即最长或最特定)来路由。主机路由可认为是子网掩码为全“1”的子网。(0xffffffff) 所有OSPF的路由协议交换都需要认证。这意味着自治系统中只有被信任的路由器才能参与路由。可以使用不同的认证方式,实际上,每个IP子网可以配置不同的认证方式。 外部获得的路由数据(从外部网关协议,如BGP获得的)在自治系统中进行广播。这些外部获得的数据与OSPF协议的链路状态数据是分开的。每个外部路由可以被广播路由器(Advertising Router)加以标记(tagged),这样可以允许其它信息在自治系统边界之间传送。 5 1.2 常用术语的定义 这部分定义了OSPF协议中术语的特定含义。对Internet Protocol Suite不太熟的读者可以参看【Ref13】。 Router(路由器) 第三层的IP Packet Switch(交换器)。以前的文献中称为Gateway(网关)。 Autonomous System(自治系统) 一组路由器,用一个共同路由协议来交换路由信息。简称为AS。 Interior Gateway Protocol(内部网关协议) 在一个自治系统内路由器使用的路由协议。简称IGP。每个自治系统有一个单一的IGP。不同的自治系统可以运行不同的IGP。 Router ID(路由器ID) 对每个运行OSPF的路由器,分配一个32bit的数值。该数值在自治系统中唯一标识了这个路由器。? Network(网络) 在该文档中指的是一个IP Network/Subnet/Supernet(网络/子网/超网)。对于一个物理网络可以被分配多个IP网络/子网号。我们认为这些是单独的网络。点对点的物理网络是一个例外――它们被认为是一个单一的网络,无论给它分配多少IP Network/Subnet号。 Network mask(网络掩码) 一个32bit的数值,表示了在一个IP network/subnet/supernet中的IP地址的范围。在这个协议中以16进制的数值来表示网络掩码。 例如,一个C类IP网络的网络掩码是0xffffff00。这样的一个掩码经常在其它文档中以255.255.255.0的形式表示。 Point-to-point networks(点到点网络) 一对路由器组成的网络。一个56Kb的串行线是一个点到点网络的例子。 Broadcast networks(广播网络) 是一个支持多个路由器,且能够将一个物理消息传送到各个所连接的路由器的网络。在这样的网络上通过使用OSPF Hello协议来动态发现邻居路由器。Hello协议本身利用了广播的能力。如果具有多播能力,OSPF协议更近一步利用了多播的能力。在广播网络上的每对路由器可以直接进行通信。以太网是一个广播网络的例子。 Non,broadcast networks(非广播网络) 支持多个路由器(多于两个)的网络,没有广播功能。在这样的网络上邻居路由器通过使用OSPF Hello Protocol来维持。然而,由于没有广播能力,需要某些配置来帮助发现邻居。在非广播网络上,OSPF协议数据包通常通过多播发送到每个邻居路由器。同样,X.25公共数据网(PDN)是一个非广播网络的例子。 OSPF在非广播网络上以两种模式中的一种运行。第一种,称为非广播多接入(Non,Broadcast multi,access)或NBMA,模拟OSPF在广播网络上的操作。第二种模式,成为点到多点(Point,to,MultiPoint),将非广播网络看作点到点链路(link)的集合。非广播网络成为NBMA网络或点到多点网络,取决于OSPF在网络上的操作模式。 Interface(接口) 在路由器和它一个所连网络之间的连接。接口具有与它相关的状态信息,这些从下层的协议和路由协议本身获得。一个网络的接口具有一个单一的IP地址和掩码(除非网络是一个unnumberred点到点网络)。一个接口有时候指的是一个连接。 6 Neighboring routers(邻居路由器) 两个对一个共同网络接口的路由器。邻居关系通过OSPF的Hello协议来维持和动态发现。 Adjacency(邻接) 两个邻居路由器之间为了交换路由信息形成的关系。不是每对邻居路由器能成为邻接关系。 Link State Advertisement(链路状态广播) 描述本地路由器或网络状态的单位数据。对于一个路由器,这包括路由器接口和邻接的状态。每个链路状态广播在路由区域中进行扩散。收集到所有路由器和网络的链路状态广播后就形成了协议的链路状态数据库。在这篇文档中,链路状态广播简写为LSA。 Hello Protocol(握手协议) OSPF协议的一部分,用来建立和维持邻居关系。在广播网络中Hello协议还可以用来动态发现邻居路由器。 Flooding(扩散) OSPF协议中的一部分,用来发布和同步OSPF路由器间的链路状态数据库。 Designated Router(代表路由器) 每个具有至少两个连接的路由器的广播和NBMA网络有一个代表路由器。这个代表路由器为这个网络选举产生LSA,并具有其它特殊的职责。代表路由器通过Hello协议选举产生。 代表路由器的概念可以减少在广播或NBMA网络中所需要的邻接的数量。这也减少了路由信息交换量和链路状态数据库的大小。 Lower,level protocol(低层协议) 下层的网络接入协议,为IP层提供服务,即也为OSPF协议服务。例如X.25PDN中的X.25 packet,以太网中的以太网数据链路层。 1.3 链路状态路由技术的简短历史 OSPF是一个链路状态路由协议。这种协议也称为基于SPF的或分布式数据库协议。这部分简短介绍一下链路状态技术发展中对OSPF协议的一些影响。 第一个链路状态协议在ARPANET数据交换网络中引入。该协议在【Ref3】(The New Routing Algorithm for the ARPANET)中有描述。它形成了所有其它链路状态协议的一个起始点。同类的ARPANET环境,即单一厂商的通过同步串行线相连的数据包交换器(packet switch),简化了初始协议的设计和实现。 对这个协议的改进在【Ref4 "Fault-Tolerant Broadcast of Routing Information",】中提出。这些改进针对着提高路由协议的容错性,在LSA中增加了Checksum。这篇Paper还包含了减少链路状态协议中路由协议开销的方法。这通过增大LSA的发送间隔的数量级来实现。 一个链路状态算法也被提议用来作为ISO IS,IS路由协议。这个协议在【Ref2-"Information processing systems -- Data communications -- Intermediate System to Intermediate System Intra-Domain Routing Protocol"】中描述。这个协议包括了在广播网络上减少数据和路由交换的方法。这通过为每个广播网络选举代表路由器来实现,又代表路由器为网络发出LSA。 IETF的OSPF工作组在这个工作上近一步开发了OSPF协议。代表路由器的概念进一步的增强以减少路由信息交换。多播能力的利用减少了路由带宽。区域的路由方案允许信息 7 的隐藏、保护和减少。最终,算法根据TCP/IP的网络进行了特定修改。 1.4 本文档的组织 本协议的前三部分对协议的性能和功能做了整体性的概述。4-16部分细致解释了协议 的机制。数据格式,协议常量和配置项目在附录中规定。 在文字中象HelloInterval这样的标签指的是协议常量。它们可或不可被配置。与体系结 构有关的常量在附录B中总结。可配置的常量在附录C中总结。 协议细节根据数据结构来呈现。这是为了让解释更加精确。协议的实现必须支持文档中 所描述的功能,但不必全都采用协议中出现的数据结构。 1.5 感谢 The author would like to thank Ran Atkinson, Fred Baker, Jeffrey Burgan, Rob Coltun, Dino Farinacci, Vince Fuller, Phanindra Jujjavarapu, Milo Medin, Tom Pusateri, Kannan Varadhan, Zhaohui Zhang and the rest of the OSPF Working Group for the ideas and support they have given to this project. The OSPF Point-to-MultiPoint interface is based on work done by Fred Baker. The OSPF Cryptographic Authentication option was developed by Fred Baker and Ran Atkinson. 2. 链路状态数据库:组织和计算 下面这些部分描述了OSPF链路状态数据库的组织和在这个数据库上的路由计算,用来 产生路由器的路由表。 2.1 路由器和网络的表示 自治系统的链路状态数据库描述了一个有向图。这个图的结点由路由器和网络组成。当 两个路由器通过点到点的物理网络连接时,在图中有一个边连接两个路由器。当有一个边连 接路由器和网络时表示那个路由器具有到网络的接口。网络可以是Transit或Stub网络。 Transit网络是那种可以传送本地产生或不是本地产生的数据的网络。一个Transit网络在图 中以一个具有incoming和outgoing边的结点(Vertex)表示。一个Stub网络结点(Vertex)仅具 有incoming边。 每个网络结点(node)的neighborhood取决于网络的类型(点到点,广播,NBMA或点到 多点)和具有到这个网络的接口的路由器的数量。三种情况在图1a中描述。长方形表示路 由器,圆形和椭圆形表示网络。路由器的命名以RT开头,网络名以N开头。路由器接口命 8 名以I开头。路由器间的线表示点到点网络。图的左边是网络和它们连接的网络,右边是相应的图。 **FROM** |RT1|RT2| +---+Ia +---+ * ------------ |RT1|------|RT2| T RT1| | X | +---+ Ib+---+ O RT2| X | | * Ia| | X | * Ib| X | | Physical point-to-point networks **FROM** +---+ * |RT7| * |RT7| N3| +---+ T ------------ | O RT7| | | +----------------------+ * N3| X | | N3 * Stub networks **FROM** +---+ +---+ |RT3| |RT4| |RT3|RT4|RT5|RT6|N2 | +---+ +---+ * ------------------------ | N2 | * RT3| | | | | X | +----------------------+ T RT4| | | | | X | | | O RT5| | | | | X | +---+ +---+ * RT6| | | | | X | |RT5| |RT6| * N2| X | X | X | X | | +---+ +---+ Broadcast or NBMA networks Figure 1a. 网络图的组成 网络和路由器以结点的形式表示。当且仅当A列和B行的交叉处用X来标记时,有一条边从结点A到B。 图1a的最上面示意的是两个路由器通过点到点链路连接。在产生的链路状态数据库中,两个路由器结点用一对边直接相连,各取一个方向。到点对点网络的接口可以不必分配IP地址。当分配了接口地址时,它们采用stub连接的模式,每个路由器广播一个stub连接到 9 另外一个的路由器接口地址。另外也可以给点对点网络分配一个IP子网。在这种情况下,每个路由器广播一个到IP子网的stub连接,而不是广播对方的接口地址。 图1a的中间示意了一个网络仅有一个路由器(即一个stub网络)。在这种情况下,在链路状态数据库的图中网络以stub连接的end(宿端)出现。 当多个路由器连接到一个广播网络时,链路状态数据库中呈现出所有路由器与网络存在双向连接。在Figure 1a的底部示意。 每个图中的网络(Stub或Transit)具有一个IP地址和相应的网络掩码。掩码表示了网络中的结点数。与路由器直接相连的主机(被称为主机路由)在图中以Stub网络形式出现。对于一个主机路由的网络掩码总是0xffffffff,表示一个单一结点。 2.1.1 非广播网络的表示 如前所述,OSPF在非广播网络中以两种模式之一运行:NBMA或点到多点。模式的选择决定了Hello协议和(Flooding)扩散在非广播网络中的工作方式,及链路状态数据库中的网络表示方式。 在NBMA模式中,OSPF模拟在一个广播网络中的行为:为NBMA网络选出一个代表路由器,代表路由器为NBMA网络发出LSA。广播网络和NBMA网络的图的表示是一样的。在Figure 1a的中部示意。 NBMA模式是OSPF在非广播网络上的最有效运行方式,不仅指链路状态数据库的大小,也指路由信息的交换量。然而,其具有一个明显的限制:它需要所有连接到NBMA网络中的路由器能够直接通信。这个在某些网络中可以做到。如ATM子网,使用SVC连接。但在其它非广播网络中常做不到。如仅有PVC的Frame Relay网络。在这些不是所有路由器都可以通信的网络中,可以分成一些逻辑子网,路由器在每个逻辑子网内可以直接通信,可以对每个子网以NBMA网络运行【Ref5 "Internet Protocol"】。这需要一些额外的管理开销,易于错误配置。可能在这样的网络用点到多点的模式会好一些。 在点到多点模式中,OSPF以点对点连接的方式来对待所有非广播网络中路由器与路由器之间的连接。不为网络选举代表路由器,也没有为网络产生的LSA(网络LSA)。事实是,点到多点网络的结点不在链路状态数据库的图中出现。(图中没有点到多点的形式,) Figure 1b示意了点到多点网络的链路状态数据库表示。在图的左边,是一个点到多点网络,假设所有的路由器可以直接通信,除了RT4和RT5。I3到I6表示点到多点网络中路由器的IP接口地址。在链路状态数据库的图形表示中,可以直接通信的路由器有双向的边,同时每个路由器具有一个到自己IP接口地址的stub连接。 在一些非广播网络中,点到多点模式和(如反向ARP[Ref 14] " Address Resolution Protocol")链路层的协议的使用,可以允许OSPF邻居的自动发现,即使没有可用的广播支持。 10 **FROM** +---+ +---+ |RT3| |RT4| |RT3|RT4|RT5|RT6| +---+ +---+ * -------------------- I3| N2 |I4 * RT3| | X | X | X | +----------------------+ T RT4| X | | | X | I5| |I6 O RT5| X | | | X | +---+ +---+ * RT6| X | X | X | | |RT5| |RT6| * I3| X | | | | +---+ +---+ I4| | X | | | I5| | | X | | I6| | | | X | Figure1b 网络图的组成 点到多点网络 所有的路由器可以直接通信,除了RT4和RT5。I3到I6表示点到多点网络中路由器的IP接口地址。 2.1.2 一个链路状态数据库的例子 图2示意了一个简单的自治系统。加H1标签的矩形表示一个主机,与RT12有一个SLIP连接。因此RT12会广播(advertise)一个主机路由。路由器之间的连线表示物理点到点网络。连接RT6和RT10的是被分配接口地址的唯一的一个点到点网络。路由器RT5和RT7具有到其它自治系统的连接。为这些路由器展示了一些BGP的路由。 每个路由器接口的output端有一个代价值。这个代价值是系统管理员可以配置的。这个值越低,越可能用来转发数据。外部获得的路由数据也有代价值。(如从BGP获得的路由)。 Figure2产生的有向图在Figure3中描述。Arcs被加以相应路由器输出接口的代价值作为标签。没有代价标签的Arcs的代价为0。注意从网络到路由器的Arcs通常代价为0(反方向不为0)。然而这是有意义的。注意到外部获得的路由数据在图中以Stub形式出现。 链路状态数据库是由路由器产生的LSA拼凑成的。在相应的图形表示中,每个路由器或Transit网络的向邻居扩散一个单独的LSA。Figure4图形化显示了LSA。路由器RT12有到两个广播网络的接口和一个到主机的SLIP线。网络N6是一个广播网络,有三个相连的路由器。从网络N6到它相连的路由器的所有连接的代价是0。网络N6的LSA由相连的一个路由器产生,即被选举成为代表的路由器。 11 Figure2 一个自治系统的例子 12 2.2 最短路径树 当OSPF的区域配置好以后,自治系统中每个路由器有相同的链路状态数据库,有一个相同的图形表示。一个路由器以自己为根计算最短路径树来产生路由表。显然,最短路径树取决于进行计算的路由器。在我们的例子中,路由器RT6的最短路径树在Figure5中刻划。 这个树给出了到任何目的网路或主机的路径。然而,在转发中只用下一跳的信息。注意到任何路由器的最佳路径也被计算出来。对于外部数据的处理,(we note the next hop and 13 distance to any router advertising external routes)我们 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 下一跳和到任何广播外部路由的路由器的距离。最后产生的路由表在Table2中给出。注意对于(分配了IP地址的)Numbered点到点网络的每一端有一个单独路径。(在这个例子中,RT6和RT10之间的串行线)。 到其它AS的网络的路由在Figure5中的最短路径树中以dashed lines出现。 (到N12,N15的路由是外部信息,在2.3中讨论) 14 2.3 使用外部路由信息 在树创建以后外部路由信息被examined。这个外部路由信息从其它路由协议如BGP产生,或是静态配置。默认路由也可以作为自治系统中外部路由信息的一部分。 外部路由信息在AS中不改变的进行扩散。在我们的例子中,自治系统中的所有路由器都知道RT7有两个外部路由,具有度量2和度量9。 OSPF支持两种外部度量。类1是外部度量用OSPF接口代价的相同单位表示,类2是高一数量级。类2的度量比AS内部的任何路径的代价要大。使用类2外部度量假设了在自治系统间的路由是路由一个数据包的主要代价,消除了将外部代价转换到内部链路状态度量的需要。 作为类1外部度量处理的例子,假设Figure2中的RT7和RT5广播类1外部度量。对每个被广播的外部路径,From RT6来(到被广播的外部路由)的总代价是(RT5\RT7)广播的外部路由代价和从RT6到广播路由器(Rt5/RT7)的距离的和(RT6 to RT5+RT5 advtising arcs)。当两个路由器广播同样的外部目的地时,RT6选择提供最小总代价的广播路由器。于是RT6将到外部目的地的下一跳设为用来路由到选定广播路由器的下一跳。 在Figure2中,RT5和RT7都广播一个外部路径到目的网络N12。RT7是首选的,因为它广播的N12到RT6的距离是10(8,2),比RT5的14(6,8)好。Table3显示了当外部路由被examined后加入路由表的路径: 15 类2外部度量的处理更简单。广播最小外部度量的AS边界路由器被选中,不考虑到AS边界路由器的内部距离。假设在我们的例子中RT5和RT7都广播类2外部路径,那么所有到网络N12的数据量被转发到RT7,因为2<8。当几个等代价的类2路由存在时,内部距离被用来打开这个结。 类1和类2度量可以在AS中同时出现。在这种情况下,类1外部路由总是优先。 这个部分假设了目的地址是在外部(外部目的地址)的数据包总是通过AS广播边界路由器来路由。这并不总是如此。例如,假设Figure2中有一个连接到网络N6的路由器RTX,且RTX不参予OSPF的路由,但与AS边界路由器RT7交换BGP信息。那么,RT7将不再为所有目的地经(可能路由到)RTX的路由广播OSPF外部路由。一个额外的跳有时引入进来,如果这些目的地址总是需要先路由到RT7(广播路由器)。 为解决这个问题,OSPF协议允许AS边界路由器在它的AS,external,LSA确定一个“转发地址”。在上面的例子中,RT7将为那些直接路由到RTX的目的地址确定RTX的IP地址为“转发地址”。 “转发地址”还有其它应用。它可使自治系统中的路由器充当“路由服务器”。例如,Figure2中的RT6可以充当路由服务器,通过静态配置和外部路由协议获得外部路由信息。RT6然后开始广播它是AS边界路由器,发出一些OSPF的AS,external,LSA。在每个AS,external,LSA中,RT6将通过适当设定LSA的转发地址域来确定正确的自治系统的出口点。 2.4 等代价多路径 上面的讨论只考虑了到目的地只有一个路径,是一个简化的情况。实际上,如果有多条到目的地的等代价路径,它们也都被发现和使用。这不需要在算法上有概念性的改变,这部分讨论将在后面具体讨论。 有了等代价多路径,一个路由器可能有多个可用的下一跳。 3. 划分AS为区域 OSPF允许一些邻接的区域和主机组合在一起。这样一个组,与那些具有到所包含的网络有接口的路由器一起(together with the routers having interfaces to any one of the included networks) 称为区域。每个区域运行一个基本的链路状态算法的copy。这意味着每个区域有自己的链路状态数据库和相应的图。 16 区域内的拓扑结构在区域外是不可见的。反过来,区域内的路由器对区域外的拓扑细节不了解。与自治系统作为一个链路状态域相比,这种隔离可使协议大量减少路由交换信息。 引入区域后,AS内路由器不是都具有相同的链路状态数据库。一个路由器实际上在它所连接的区域中有一个数据库。连接到多个区域的路由器成为区域边界路由器。两个属于一个区域的路由器有相同的链路状态数据库。 在自治系统内的路由在两个级别进行,这取决于是否数据包的源和目的地地址是否在一个区域内。在区域内的路由,数据包仅根据在区域内获得的信息来路由,没有区域外获得的信息可利用。这保护了区域内的路由不被注入的坏的路由信息的影响。我们在3.2中讨论区域内路由。 3.1 自治系统的主干网 OSPF主干网是一个特殊的OSPF区域0(经常写为区域0.0.0.0,因为OSPF区域ID经常以IP地址的格式使用)。这个主干网包含了所有的区域边界路由器。主干网负责在非主干网的区域间分发路由信息。主干网必须是邻接的。但它不必是物理上邻接的。主干网的邻接可以通过虚链路的配置来建立、维持。 虚链路可以在任何两个主干路由器之间配置,这些主干路由器具有到一般非主干区域的接口。虚链路属于主干网。协议以Unnumbered(未分配IP地址的)点到点主干网络来对待两个以虚链路连接的路由器。在主干网的图中,两个这样的路由器用弧形连接(joined by arcs),它们的代价是两个路由器间的区域内距离。在虚链路上的路由协议交换仅使用区域内路由。 3.2 区域间路由 在两个非主干区域间路由需要使用主干区域。数据包经过的路径可被分成3个邻接段:一个是区域内路径,从源端到区域边界路由器,一个主干路径,从源区域到目的区域,另一个区域内路径到目的地址。算法就是找出这样具有最小代价的路径。 从另一个角度看,区域内路由可以刻划为星型配置的自治系统,用Backbone当hub,用non,Backbone当spokes。 主干网的拓扑指示了在区域间的主干网路径。主干网的拓扑可以通过增加虚链路来增强。 3.3路由器分类 在介绍区域以前,具有特殊功能的唯一路由器是如图2 所示的Router RT5能广播外部路由信息的。当AS分成OSPF区域时,路由器进一步按功能分如下四个交类: 内部路由器: 一个与同一区域的所有网络完全连接的路由器,这些路由器运行基本路由算法的一个拷贝。 区域边界路由器: 一个与多个区域相连接的路由器,区域边界路由器运行基本路由算法的多个拷贝,每个区域一个,区域边界路由器浓缩所连区域的拓朴信息并发布到骨干网,骨干网再发布到其他区域。 17 骨干路由器: 到骨干区域有一个接口的路由器,包括所有与多个区域有接口的路由器,但不必是区域边界路由器 AS边界路由器可以同其他AS系统交换路由信息的路由器。 3.4 一个简单的区域配制 图6示,第一个区域包含N1-N4及所连接的路由器RT1-RT4;第二个区域是N6-N8及RT7,RT8,RT10,RT11;第三个区域由N9-N11、主机H1,及RT9、RT11、RT12.第三Area被配置成网络N9-N11及主机H1组成一个路由,(详细见3.5) .RT1、RT2,RT5,RT6,RT8,RT9,RT12是内部路由器;RT3,RT4,RT7,RT10,RT11区域边界路由器;RT5,RT7是AS边界路由器 图7是区域1的链路状态数据库的结果,数据完全描述区域内的路由。 它也表示为RT1和RT2路由器描述了整个因特网上的全部情况,这是区域边界路由器RT3和RT4的工作,它为区域1广播全部区域外的目标地点,同时图7中还指出了STUB;RT3和RT4还广播了AS边界路由器RT5和RT7的位置,最后来自RT5和RT7的AS,External,LSA将在整个AS及整个区域1中泛滥,这些LSA(包括在Area 1的数据)产生到N12-N15的路由。 路由器RT3和RT4必须总结区域1的拓朴给主干网,这些主干Backbone LSA如表4所示,它们总结了区域1中所包含的网络(N1-N4)和从RT3、RT4到达的距离。 图8所示是主干网的链路状态数据库,图示的是主干路由器,RT11是主干路由器,他属于两个区域,为了建立主干路由器的连接,一条RT10和RT11间的虚连接必须配置。 区域边界RT3,RT4,RT7,RT10,RT11浓缩它们连接的非主干区域,至主干,图8中有STUB,记住第三AREA被配置成浓缩的N9-N11和主H1进一个路由,它为N9-N11产生一个DASHED LINE,如图8所示。RT5、RT7是AS界路由器,它们信息源自也如8示的STUB。 18 . + . . | 3+---+ . N12 N14 . N1|--|RT1|\ 1 . \ N13 / . | +---+ \ . 8\ |8/8 . + \ ____ . \|/ . / \ 1+---+8 8+---+6 . * N3 *---|RT4|------|RT5|--------+ . \____/ +---+ +---+ | . + / \ . |7 | . | 3+---+ / \ . | | . N2|--|RT2|/1 1\ . |6 | . | +---+ +---+8 6+---+ | . + |RT3|------|RT6| | . +---+ +---+ | . 2/ . Ia|7 | . +---------+ . | | .Area 1 N4 . | | ........................... | | .......................... | | . N11 . | | . +---------+ . | | . | . | | N12 . |3 . Ib|5 |6 2/ . +---+ . +----+ +---+/ . |RT9| . .........|RT10|.....|RT7|---N15. . +---+ . . +----+ +---+ 9 . . |1 . . + /3 1\ |1 . . _|__ . . | / \ __|_ . . / \ 1+----+2 |/ \ / \ . . * N9 *------|RT11|----| * N6 * . . \____/ +----+ | \____/ . . |1 . . + |1 . . +--+ 10+----+ . . N8 +---+ . . |H1|-----|RT12| . . |RT8| . . +--+SLIP +----+ . . +---+ . . |2 . . |4 . . | . . | . . +---------+ . . +--------+ . . N10 . . N7 . . . .Area 2 . .Area 3 . ................................ .......................... Figure 6: A sample OSPF area configuration 19 Network RT3 adv. RT4 adv. _____________________________ N1 4 4 N2 4 4 N3 1 1 N4 2 3 Table 4: Networks advertised to the Backbone by Routers RT3 and RT4. |RT|RT|RT|RT|RT|RT| |1 |2 |3 |4 |5 |7 |N3| ----- ------------------- RT1| | | | | | |0 | RT2| | | | | | |0 | RT3| | | | | | |0 | * RT4| | | | | | |0 | * RT5| | |14|8 | | | | T RT7| | |20|14| | | | O N1|3 | | | | | | | * N2| |3 | | | | | | * N3|1 |1 |1 |1 | | | | N4| | |2 | | | | | Ia,Ib| | |20|27| | | | N6| | |16|15| | | | N7| | |20|19| | | | N8| | |18|18| | | | N9-N11,H1| | |29|36| | | | N12| | | | |8 |2 | | N13| | | | |8 | | | N14| | | | |8 | | | N15| | | | | |9 | | Figure 7: Area 1's Database. Networks and routers are represented by vertices. An edge of cost X connects Vertex A to Vertex B if the intersection of Column A and Row B is marked with an X. 20 **FROM** |RT|RT|RT|RT|RT|RT|RT |3 |4 |5 |6 |7 |10|11| ------------------------ RT3| | | |6 | | | | RT4| | |8 | | | | | RT5| |8 | |6 |6 | | | RT6|8 | |7 | | |5 | | RT7| | |6 | | | | | * RT10| | | |7 | | |2 | * RT11| | | | | |3 | | T N1|4 |4 | | | | | | O N2|4 |4 | | | | | | * N3|1 |1 | | | | | | * N4|2 |3 | | | | | | Ia| | | | | |5 | | Ib| | | |7 | | | | N6| | | | |1 |1 |3 | N7| | | | |5 |5 |7 | N8| | | | |4 |3 |2 | N9-N11,H1| | | | | | |11| N12| | |8 | |2 | | | N13| | |8 | | | | | N14| | |8 | | | | | N15| | | | |9 | | | Figure 8: The Backbone's database. Networks and routers are represented by vertices. An edge of cost X connects Vertex A to Vertex B if the intersection of Column A and Row B is marked with an X. Backbone可使Summary信息在Area间进行交换,所有的Area边界路由器(hears)所有other Area界路由器,然后通过检测LSA集合形成一个到Area域外的所有Network的图。并在每 个广播路由器中add in Backbone 距离 再如RT3、RT4的例子,处理程序如下:首先为Backbone计算SPF,这时给出了至所有other AREA border routers的距离,同时注意到networks(Ia和Ib)和至AS界路由器的(RT5和 RT7)它们属于Backbone,它的计算如表5所示。 下一步,通过从这些Area边界路由器查找Area Summary(总结),RT3、RT4可以决定到所 有他们Area之外other network的距离,然后这些距离通过RT3、RT4通知到内部Area,RT3、 21 RT4的将进入Area 1通知如表6所示,注意表6里假如已经为Backbone定义一个AREA范 围,它的集合包括Ia\Ib进一个LSA。 信息通过RT3、RT4进入 AREA 1使内部路由器如RT1可以智能地选择一个AREA界路由 器,RT1将用RT4交换Network N6的流量,RT3交换到Network N8的流量,。 dist from dist from RT3 RT4 __________________________________ to RT3 * 21 to RT4 22 * to RT7 20 14 to RT10 15 22 to RT11 18 25 __________________________________ to Ia 20 27 to Ib 15 22 __________________________________ to RT5 14 8 to RT7 20 14 Table 5: Backbone distances calculated by Routers RT3 and RT4. Destination RT3 adv. RT4 adv. _________________________________ Ia,Ib 20 27 N6 16 15 N7 20 19 N8 18 18 N9-N11,H1 29 36 _________________________________ RT5 14 8 RT7 20 14 Table 6: Destinations advertised into Area 1 by Routers RT3 and RT4. 路由器RT1可以以这种方法决定到RT5、RT7的最短路径,然后通过查找RT5、RT7的 AS-external-LSAs路由器决定到一个其它 AS(如N12-N15)的路径是在RT5间还是RT7间 注意,在RT6和RT10间的线路失败导致主干联接失败,在RT7和RT10间配置BACKBONE的 虚连接将使BACKBONE有更好的联通性和防止失败的能力。 22 3.5 IP子网支持 OSPF为每个广播路由器联系一个IP掩码,掩码暗示一个特别路由的地址范围,例如,一个 目的是128(185(0(0并且掩码是0xffff0000实际描述了一个具有实际目的 128(185(00—128(185(255(255的地址范围,简单地,一个主机就是一个掩码是0xffffffff, 每个含有掩码的广播的目的地可以使能具有共同可变长超网(subnetting)的实现,就是说, 一个单一的A、B、C的network数量可以分成一些大小不一的subnet。如,可以分成62个 不同长的subnet:15个4K的subnet,15个256的subnet,32个8的subnet,表7示出了带有掩码 的IP地址, Network address IP address mask Subnet size _______________________________________________ ***1 128.185.16.0 0xfffff000 4K 00000001 128.185.1.0 0xffffff00 256 00000000 0001 128.185.0.8 0xfffffff8 8 Table 7: Some sample subnet sizes. 有许多方法可以将A、B、C类地址分成可变长,精确的处理超出了本文的范围,此处 建立如下原则:当一个IP包转发时,它将转发到最佳匹配的network,这里的最佳匹配是长 度、或最特别的匹配,如缺省到目标0.0.0.0或掩码0x00000000路由是和所有地址相匹配的, 同时,它求比其它匹配特殊。Subnet 掩码必须指明派,以便最佳匹配清晰 每个联系一地址掩码的路由,也支持IP超网,如,一个单一物理网络可以分派[地址, 掩码]对[192.9.4.0,0xfffffc00],这里可以是一个IP network,包括4个连续的C类网络号 192.9.4.0到192.9.7.0。这种地址分配在CIDR出现变得平凡。Classless Intra-Domain 为了在AREA边界上聚合,AREA地址范围可以被借用(见section C.2)每个地址范围 被定义成[地址,掩码]对,一些分立的网络可以包含入一个地址范围,就如一个分开的subnet网络组成一个subnetted network,Area边界路由器然后通过为每个地址范围广播一个路由概 括Area内容给Backbone。路由的价值是取到范围内的network中最大的。 如,一个IP subnetted network 可以配置成一个OSPF area,此时,一个单个地址可以配置 成:A、B、C类network 号及它的自然IP掩码.在AREA中可以定义所有可变大小的SUBNET.但是整个subnetted network一个路由可以被发布到该area外部,隐藏其作为subnetted的事实, 路由器的价值是组成中的最大者. 3.6. Supporting stub areas(支持stub areas) Stub Areas是一个只有一个出口路由器的网络。所有路由到外部去的数据基于缺省路由 在某些自治系统里,大多数的link-state database可能含有AS-external-LSAs。一 个OSPF AS-external-LSA通常在整个自治系统里泛滥(flooded)。但是,OSPF允许一些区 域配置为“Stub areas”。AS-external-LSA不会在这些区域泛滥,在这些区域中,路由到 AS外部目的地是只基于默认的路由(每区域)。这样一来对于stub area内的路由器来说减 少了链路状态数据库的大小,以及存储器需求。 为了获得OSPF stub area支持的好处,必须在stub area中使用默认路由。这些默认 23 路由通过如下方式实现,一个或多个stub area区域的边界路由器必须通过summary-LSAs来向stub area 中的路由器广告缺省路由(default)。这些summary-LSAs必须在整个stub area内泛滥,但不会泛滥到外部。(因为这个原因,这些缺省路由只适合特定的stub area)。这些summary default routes将用于任何不能直接在Area内(intra,area)或者通过Area间(inter-area)路径到达的目的地(如一个外部的目的地)。 当存在一个单一的区域出口时,或者对于出口的选择不需要基于 per-external-destination时,该区域可以配置成为一个stub area。例如,图6中的区域3可以配置为一个stub 区域,因为所有外部流量必须经过它的一个区域边界路由器RT11。如果区域3配置为一个stub,路由器RT11将会在区域3内发布一个缺省路由(采用summary-LSA),(0.0.0.0)而不是在区域3泛滥网络N12-N15的AS-external-LSAs。 OSPF协议保证一个区域内的所有路由器同意本区域是否配置成为一个stub。这就保证了在泛滥AS-external-LSAs时不会出现混乱。 这儿有一对使用stub area的限制条件,1、不能配置通过stub area的Virtual links。另外,2、AS 边界路由器也不能放在一个stub areas的内部。 24 RT8下面是N7,RT12下面是N10 3.7. Partitions of areas(区域的分割) OSPF不会主动去尝试修正一个区域分割。当一个区域被分割开来,每一部分简单的成为独立的区域。主干路由器负责这些新区域间的路由。以前可以通过Area内(intra,area)的路由,现在可能需要通过Area间(inter-area)进行路由。 但是,为了维护分割后的整个路由,一个地址Area范围不能被分隔为跨多个区域分割后的部分。同时,Backbone也不能被分隔。否则的话,自治系统的部分将是不可达的。Backbone分割可以通过配置Vitual links进行修复(参见15节)。 考虑区域分割的另一个方式是看第二节介绍的自治系统图表。区域Ids可以看作是图表 25 的边界【1】。每一个图表的边界连接一个网络,或者说它自己是一个点到点网络。在任一种情况下,边界都是根据网络区域ID来着色的。 一组具有相同颜色并再上一级互相连接的边界,代表一个区域。如果一个自治系统的拓扑是完整的,图表将有几种不同颜色的区域,每一种颜色代表一个不同的区域ID。 当AS拓扑改变了,一个区域可能被分割,自治系统的图表可能会有同一颜色(Area ID)的多个区域。只要这些相同颜色的区域通过单一的主干区域相连接,那么自治系统的路由将继续正常工作。 4. Functional Summary(功能概览) 每一个区域的路由器运行一个单独的OSPF的基本路由算法的拷贝。具有到多个区域接口的路由器运行算法的多个拷贝。一个路由算法的摘要描述如下: 一个路由器启动时,首先初始化路由协议数据结构,然后等待底层协议通知接口工作正常。接着使用OSPF’s Hello 协议来获取邻居消息。路由器向它的邻居发送Hello包,并相继收到邻居的Hello包。在广播和点到点网络中,路由器通过发送Hello包到多播地址AllSPFRouters。在非广播网络中,可能需要一些配置信息来发现邻居。在广播和NBMA网络中,Hello协议也会选出网络的Designated router。 路由器会尝试和新发现的邻居建立邻接(adjacencies)。链路广告数据库在邻接路由器间同步。在广播和NBMA网络中,Designated Router确定哪些路由器应该成为邻接路由器。Adjacencies控制路由信息的分发,路由更新只在Adjacencies之间分发和接收。 路由器定期广告它的链路状态。在路由器状态改变时也会广告链路状态。一个路由器的邻居可以从它的LSAs中反映出来,这样一来可以及时地发现坏的路由器。 LSAs在整个区域泛滥。泛滥算法是可信的,以确保整个区域的所有路由器具有相同的链路状态数据库。这个数据库包含了所有属于这个区域的路由器发起的LSAs。通过这个数据库,每一个路由器计算一个以自己为根的最短路径树。这个最短路径树顺次产生这个协议的路由表。 4.1. Inter-area routing(区域间路由) 前一部分描述了在一个单一区域的协议操作,对于区域内路由,其它路由信息都是不必要。为了路由到区域外的目的地,区域边界路由器,把额外的路由信息注入(inject)该区域,这些额外的信息是自治系统其他部分拓扑的精华(distillation)。 这些精华信息通过如下途经获得:FRIST每一个区域边界路由器连接到主干网。每一个边界路由器概括了它所连接的非主干区域的路由信息,SECOND在主干网上传输,并传送到所有其他区域的边界路由器上。THEN一个边界路由器便获得了主干网的路由信息,以及其他从每一个边界路由器处获得的区域summaries。通过这些信息,边界路由器计算到所有Area间(inter,area)目的地的路径信息。最后边界路由器向它所连接的区域广告这些路径。这就使得域内的路由器能够在转发inter,area数据流的时候能够挑选出最好的出口路由器。 26 4.2. AS external routes(AS 外路由) 有其他自治系统信息的路由器可以把信息在整个AS内泛滥。这些外部路由信息一点点的分发给每一个特定的路由器。例外情况:外部路由信息不会泛滥到stub areas(参见3.6). 为了利用AS外部路由信息,在整个AS内的路由器必须知道到达广播外部信息的路由器的路径。因此,域边界路由器(non,stub)概括(summarized)了AS边界路由器的位置。 4.3. Routing protocol packets(路由协议包) OSPF协议直接运行在IP上,使用IP协议 89。OSPF不提供任何显式的分段/重组(fragmentation/reassembly)的支持。当必须分段时,使用IP的分段/重组。OSPF协议包被设计为大的协议数据包可以被分割为几个小的协议数据包。建议采用这种方式,如果可能的话,就要避免IP分段。 路由协议包应该在IP TOS(Type OfService)域设为0的IP包内传输。如果可能的话,路由协议包应该比通常的IP包传送和接受的优先级要高。为了实现这个功能,应该将OSPF协议包的IP优先级域设置为Internetwork Contorl【参见Ref5 "Internet Protocol"】。 所有的OSPF协议包共享一个附录A中描述公共的协议头,OSPF包的类型描述如Table 8 所示。它们的格式也在附录A中描述。 Type Packet name Protocol function __________________________________________________________ 1 Hello Discover/maintain neighbors 2 Database Description Summarize database contents 3 Link State Request Database download 4 Link State Update Database update 5 Link State Ack Flooding acknowledgment Table 8: OSPF packet types. OSPF Hello 协议用Hello包来发现和维护邻居关系,数据库描述和链路状态请求包在邻接(adjacencies)的形成过程中使用。OSPF 的可靠的更新机制通过链路状态更新和链路状态应答包来实现。 每一个链路状态更新包包含了一些新的链路状态广告,这些新的LSAs离它们的发送者一跳以上的距离(to be checked)。一个单链路状态更新包可能包含几个路由器的LSAs。每一个LSA都被打上它们始发路由器的ID和它的链路状态内容的校验和。每一个LSA也有一个类型域,不同类型的OSPF LSAs如表9中所示。 OSPF路由包(不包括Hellos)只在邻居间传送。也就是说所有的OSPF协议包都经过一个IP跳的传输,当然除了那些通过Virtual adjacencies的协议包(虚Link可以一跳以上)。OSPF包的IP源地址是一个路由器adjacency的一端,目的地址要么是另一端,要么是一个IP多播地址。 27 4.4. Basic implementation requirements(基本的实现要求) 实现一个OSPF需要下面几部分的系统要求: Timers(时钟) 需要两种不同类型的时钟,第一种叫作“single shot timers”,只使用一次(fire once)并且引起一个协议事件的处理。第二种叫做“interval timers”,在一个间隔内有效。主要用来以一定的时间间隔来发送数据包。一个例子就是Hello数据包的定时发送。这两种时钟的粒度都是一秒。 间隔时钟需要无漂移的实现,在一些路由器实现中,包处理可能会影响时钟执行。当多个路由器连接到一个单一网络中时,都进行广播,这可能会导致路由包的同步(同时受到(应)该避免)。如果时钟不能无漂移的实现,每次间隔时钟有效的时间就会随机的减少或者增加一部分。 LS LSA LSA description type name ________________________________________________________ 1 Router-LSAs Originated by all routers.由每个路由器发起 This LSA describes 它描述了收集的路由器与一个 the collected states of the 区的接口状态,只能在一个区 router's interfaces to an 内扩散 area. Flooded throughout a single area only. ________________________________________________________ 2 Network-LSAs Originated for broadcast 由广播和NBMA通过代理发起, and NBMA networks by the Designated Router. This 它包含连接至网络的路由器清单 LSA contains the list of routers connected to the network. Flooded 只能在一个区内扩散 throughout a single area only. ________________________________________________________ 3,4 Summary-LSAs Originated by area border 区域边界路由器发 routers, and flooded through- 起,并扩散到LSA out the LSA's associated 所关联的整个区域 area. Each summary-LSA 每个SUMMARY,LSA describes a route to a 描述了一个到区域的外部 destination outside the area, 目标的路由 yet still inside the AS (i.e., an inter-area route). Type 3 summary-LSAs describe 类型3描述了到网络的路由 routes to networks. Type 4 类型4描述了到自治系统边界 summary-LSAs describe 路由器的路由 routes to AS boundary routers. ________________________________________________________ 28 5 AS-external-LSAs Originated by AS boundary自治系统外部LSA:由AS routers, and flooded through- 边界路由器发起 out the AS. Each 并扩散到整个AS,每个LSA AS-external-LSA describes a route to a destination in another Autonomous System. 描述了一个到其 Default routes for the AS can 他自治系统外目 also be described by AS-external-LSAs. 的地的路径 Table 9: OSPF link state advertisements (LSAs). IP multicast(IP 多播) 一些OSPF包通过IP多播的方式传送。这就要求支持IP多播数据包接受和发送,同时需要适当的底层协议支持。IP多播包不会传送超过一跳的距离,因此,不要求路由器能够转发IP多播数据包。关于IP多播的消息,参见【Ref 7”Host Expension Of IP Multicast】 Variable-length subnet support(可变长度子网支持) 路由器IP协议必须支持划分A、B、C类网络为不同大小的子网。这通常叫做可变长度子网。详细细节参见3.5 IP supernetting support(IP 超网支持) 路由器IP协议必须支持连续A、B、C类网络聚合成一个大的网络,叫超网。超网用来提高在整个Internet中IP路由的灵活性。参见【Ref 10(CIDR)】 Lower-level protocol support(底层协议支持) 这儿指的底层协议是网络访问/存取协议(network access protocols),如以太网数据链路层。这些协议必须向OSPF发送网络接口打开和关掉的指示。例如,以太网中知道以太网收发器是否插接适当可能是很有价值的。 Non-broadcast lower-level protocol support(非广播底层协议支持) 在非广播网络中,当试图发送OSPF Hello包到一个不存在或者坏的路由器时,可以向OSPF提供指示。例如,在X.25网络中,可以通过一个包含适当原因和诊断的X.25包来指示一个坏的邻居路由器,这种信息可以通知OSPF。 List manipulation primitives(List 管理原语) 很多的OSPF功能是以它对Lists of LSAs的操作来描述的,举例来说,路由器在没有收到邻居路由器描述为list的应答消息之前,将重传LSAs到邻居路由器。任何一个特定的LSA可能在很多这样的lists中存在。一个OSPF的实现需要能够管理这些lists,按照需要添加或者删除组成LSAs。 Tasking support(任务支持) 一些本协议规定的过程可能要唤醒其他进程。有些时候,那些其他的过程需要在这个过程之内完成,也就是说,在本过程完成之前执行。用指令文字描述就是执行一个过程。另外一些时候,其他过程只有在本过程执行完成后才会执行。用指令文字描述就是安排一个任务(Schedule a task). 4.5. Optional OSPF capabilities(可选的OSPF功能) OSPF协议定义了很多可选的功能。路由器在Hello包、数据库描述包和LSAs中指示他支持的其他可选功能。这就使得支持不同的可选功能集路由器共存在一个自治系统中。 一些功能集是本区域的路由器必须支持的,这种情况下,一个路由器不会接受一个在 29 Hello包中不存在某些功能的路由器作为邻居(i.e.,一个功能集不适配会妨碍邻居关系的形成)。例如ExternalRoutingCapability(参见下面)。 其他的功能集可以在数据库交换过程中协商。通过在数据库描述包中 规定可选功能来实现。在这种情况下,功能集不适配导致邻居间链路状态数据库的子集相互交换。 可选功能集也会影响路由表的建立过程,例如,既然在LSAs中报告了可选功能集,那么在建立最短路径树时应该避免一些缺少某一功能的路由器。 本备忘录中定义的OSPF可选功能集如下,更多信息参见A.2节。 ExternalRoutingCapability(外部路由功能) 整个OSPF域可以配置为“stubs”(参见3.5节)。AS-external-LSAs不会在stub域内泛滥。在OSPF包中的E,bit代表这个功能(参见A.2节)。为了确保stub域的一致性配置,所有连接到这个域的接口必须在Hello包中含有E,bit(参见9.5和10.5)。 5. Protocol Data Structures(协议数据结构) 这里将根据不同的协议数据结构来描述OSPF协议。下面的列表包含了最顶层的OSPF数据结构。解释了任何需要做的初始化工作。OSPF域,接口和邻居也有相应的数据结构,这些将在本规范的后面描述。 Router ID(路由器 ID) AS中路由器有32-bit的独一无二的标识。一种可能的实现策略是采用属于该路由器的最小的IP接口地址。如果一个路由器的OSPF 路由器ID改变了,必须重新启动OSPF软件来使得新的路由器ID生效。这种情况下,路由器必须在重起前冲掉(flush)域内它发起的LSAs(参见14.1节),否则它们就会存活到MaxAge时间结束。 Area structures(区域结构) 路由器连接的每一个域都有自己的数据结构。这个数据结构描述了基本OSPF算法的工作。每一个域运行一个独立的基本OSPF算法的拷贝。 Virtual links configured(配置的虚链路) 虚链路以该路由器为一个端点配置虚链路。为了使用配置的虚链路,路由器本身必须是一个区域内的边界路由器。在虚链路的另一端另一个边界路由器通过路由器的ID来识别这条虚链路。两个路由器必须被连接到同一区域,叫做虚链路传输区。虚链路是主干网的一部分,再者两个路由器之间它们好象没有编号(unnumbered)点到点网络一样。一个虚链路使用他所经过的区域的域内路由来传送数据包。虚链路通过传送区域中的最短路径树的生成而生效或者失效。 List of external routes(外部路由列表) 存在自治系统外的目的路由,这通过其他路由协议来获得(如BGP),或者通过配置信息,或者两者的结合来获得路由信息(例如,通过OSPF分发的动态外部信息)。任意含有外部路由的路由器叫做AS边界路由器。这些自治系统外部的路由通过AS-external-LSAs广告到OSPF路由域。 List of AS-external-LSAs(AS-external-LSAs列表) 链路状态数据库的一部分。这些信息从AS边界路由器处获得,包含了到自治系统外部的路由信息。注意,如果路由器是AS边界路由器,可能一部分AS,external,LSAs是自己发出的。 The routing table(路由表) 从链路状态数据库获得,路由表中的每一条都以目的地为索引,包含了destination’s 30 cost和一系列用来转发到目的地数据包的路径。使用类型和下一跳来描述一条路径。详细内容参见11节。 图9显示了一个典型路由器中的数据结构的集合。描绘的路由器是图6中的RT10,注意路由器RT10有到RT11的配置虚链路,区域2作为链路的传送区域(Transit area).在图9中用虚线来表示。通过区域2最短路径树的建立,一个虚链路处于激活状态,这时它就成为到主干网的接口(参见图9中描述的两个主干网接口) 6. The Area Data Structure(区域数据结构) 区域数据结构包含了运行基本OSPF算法所需要的所有信息。每一个区域维护自己的链路数据库。一个网络属于一个区域,一个路由器接口属于一个区域。每一个路由器邻接关系也属于单一区域。 OSPF主干是一个分发域间路由信息的特别的OSPF域。 31 区域链路状态数据库包含了一些由区域路由器分发的路由器LSAs、网络LSAs和Summary,LSAs的集合。这些信息只会在一个单一的区域中泛滥。AS-external-LSAs列表(参见第5节)也被认做每一个区域链路状态数据库的一部分。 Area ID(区域ID) 32 bit的数据标志一个区域,区域ID 0.0.0.0保留给主干网使用。 List of area address ranges(区域地址范围列表) 为了在区域边界处聚合路由信息,可以采用区域地址范围。每一个地址范围采用[address,mask]和一个激活或者非激活状态的指示符来表示(参见12.4.3)。 Associated router interfaces(关联的路由器接口) 这个路由器的接口连接到区域。一个路由器接口属于且仅属于一个区域(或者主干)。对于主干区域来说,这些列表包含了所有的虚链路。一个虚链路通过它另一端点的路由器ID标识。它的cost是它穿过的区域的最短域间路径的cost。 List of router-LSAs(路由器LSAs的列表) 区域内的每一个路由器产生它的路由器LSA,它描述了路由器到区域的接口的状态。 List of network-LSAs(网络LSAs列表) 区域内的每一个传输广播和NBMA网络产生一个网络LSA。一个网络LSA描述了当前连接到网络的路由器的集合。 List of summary-LSAs(summary,LSAs列表) 区域的区域边界路由器产生summary-LSAs。它们描述了自治系统到区域内的路由和区域内到外部的路由(如域间路由)。 Shortest-path tree(最短路径树) 以本路由器为根的区域的最短路径树。从router-LSAs和network-LSAs的集合通过Di jkstra算法获得(参见16.1节)。 TransitCapability(传送能力) 这个参数描述了该区域是否能够传送既不是本地发送也不是本地接收的数据流。当最短路径树生成时需要考虑该参数(参见16.1节,当且仅当有一个或多个邻接虚链路通过这个区域传送时,TransitCapability设置为True),并被用来作为路由表生成的后续步骤的一个输入(参见16.3)。当一个区域的TransitCapability设置为True时,这个区域就作为一个“transit area”。 ExternalRoutingCapability(外部路由能力) AS-external-LSAs是否在区域内泛滥。这是一个可配置的参数。如果AS-external-LSAs被排除在这个区域之外,这个区域叫做“stub”。在stub区域内,到AS外部目的地只是根据一个default summary route。主干网不能被配置为一个stub区域。同时,也不能在stub域内配置虚链路。详细信息参见3.6节。 32 StubDefaultCost 如果区域为一个stub区域,而且路由器为一个区域边界路由器,那么StubDefaultCost指示了路由器向区域广告default summary-LSA的cost(代价)。详细信息参见12.4.3节。 除非特别说明,文档下面的部分指的是一个单一域内的OSPF协议操作。 7. Bringing Up Adjacencies(建立邻接关系) OSPF在邻居间建立邻接关系用来交换路由信息。不是所有的邻居路由器都可以成为邻接。本节描述了一些基本的产生邻接的规则,进一步的细节参见第10节。 7.1. The Hello Protocol(Hello 协议) Hello协议包用来建立和维护邻居关系。同时也保证了邻居间的通信是双向的。Hello协议包定期在所有的路由器接口上发送。当路由器从邻居的Hello包中看到自己在其中,就指示了双向通信。在广播和NBMA网络中,Hello协议包在网络中选举一个Designated Router。 Hello数据包在广播网络、NBMA网络和点到多点网络中工作方式不同。在广播网络中,每一个路由器通过定期多播一个Hello协议包来广告自己。这使得邻居能够动态发现。这些Hello数据包包含了路由器本身对于DesignatedRouter ID的意见,以及最近看到的Hello 数据包的发起路由器。 在NBMA网络中,Hello协议包可能需要一些配置信息才会正常工作。每一个可能成为Designated Router的路由器包含一个连接到网络中的所有路由器的列表。可能成为Designated Router的路由器,在NBMA网络变得可用时,向每一个可能成为Designated router的路由器发送Hello Packets。这是在尝试发现网络中的代表路由器(Designated Router)。如果一个路由器成为Designated Router,那么它向连接到的所有路由器发送 hello Packets。 在点到多点网络中,一个路由器向所有跟它直接相连的邻居发送Hello Packets。这些邻居可能通过如Inverse ARP【参见Ref14"Inverse Address Resolution Protocol"】等的协议动态发现,或者是采用配置的方法。 在发现邻居,确定双向通信路径存在后,并且在广播和NBMA网络中选举出Designated Router后,必须确定跟邻居的邻接关系是否建立。如果一个邻接关系形成了,第一步便是同步邻居的链路状态数据库。这一步将在下一节中进行讨论。 7.2. The Synchronization of Databases(同步数据库) 在一个链路状态算法中,所有路由器的链路状态数据库保持同步是很重要的。OSPF通过仅仅要求邻接路由器间的链路状态数据库保持同步来简化这项要求。一旦路由器建立邻接关系,同步过程就开始了。每一个路由器通过发送一系列的数据库描述数据包给它的邻居来描述自己的数据库。每一个数据库描述包描述了一系列属于这个路由器数据库的LSAs。当邻居看到一个比自己数据库拷贝要新的LSA时,它记录下这条新的LSA需要请求的信息。 这种数据库描述包的交互称作“数据库交换过程”。在这个过程中,两个路由器形成一 33 种主/从关系。每一个数据库描述报都有一个序列号。数据库描述包由主路由器发送,从路由器接收,并反馈回一个序列号。在发送(polls)和应答消息中包含了链路状态数据的概览。只允许主路由器重新发送数据库描述包。这些交互只是在固定的时间间隔内完成的。这个时间间隔在每一个接口的常数RxmtInterval中定义。 每一个数据库描述包包含一个指示是否还有包传送的M,bit,如果一个路由器接收到了含有M-bit Off的数据库描述包,它将中止这个数据库交换过程。 在数据库交换过程中或以后,每一个路由器有一个包含了邻居处存在更加Up-To-Date新的LSAs的一些LSA的列表。这些LSAs通过链路状态请求数据包请求获得。如果没有获得满意的答复,链路状态请求数据包按照固定的时间间隔RxmInterval进行重传。当数据库描述过程结束,并且所有的状态请求都得到满足以后,就认为数据库已经同步,路由器被标志为完全邻接。这是邻接关系完全建立并在两个路由器的Router,LSAs中广告。 当数据库交换过程一开始,扩散过程就使用了邻接关系。这简化了数据库同步,并保证了它在一个可预测的时间段内结束。 7.3 The Designated Router(指派路由器) 每一个广播和NBMA网络都有一个指派路由器。指派路由器主要执行路由协议的两个主要功能: 1. 指派路由器代表网络发起Network-LSA。这个LSA列出了当前连接到网络中的所有路由器(包含自身)。这个LSA的链路状态ID(参见12.1.4节)采用指派路由器的接口IP地址。IP网络号可以通过网络子网/网络掩码获得。 2. 指派路由器在网络中成为所有其它路由器的邻接。既然链路状态数据库通过邻接关系同步(通过邻接关系的建立和泛滥程序),指派路由器在同步过程中起一个很重要的作用。 指派路由器通过Hello协议选举出来。一个路由器的Hello 包包含了它的路由器优先级,这个优先级是按照每一个接口配置的。通常,当一个路由器到网络的接口开始工作时,它检查当前是否存在一个指派路由器。如果存在,它承认当前的指派路由器。不管它的路由器优先级(这使得很难预测指派路由器的标志,却保证了指派路由器变动较少。参见下面的描述)。反之,如果它拥有网络中最高的路由器优先级,它自己成为网络中的指派路由器。进一步的选举指派路由器的描述详细请参见9.4节。 指派路由器是很多邻接关系的端点。为了优化在广播式网络中的泛滥过程,指派路由器通过地址AllSPFRouters地址多播自己的链路状态更新包,而不是在每一个邻接间发送独立的包。 第二节讨论了区域的直接图形表示。路由器节点通过它们的ID标记。传送网络(Transit network)实际上通过它们指派路由器的IP地址来标记。当指派路由器改变时,就像图表中的网络节点被一个全新的节点替代了。这将导致网络和所有他所连接的路由器发起新的LSAs,一直到所有的链路数据库重新收敛为止,这将导致某些连接的暂时丢失。这将导致发送响应特定数据流的unreachable ICMP消息。因此,指派路由器不能经常改变,应该配置路由器优先级以保证最可靠的路由器成为指派路由器。 7.4. The Backup Designated Router(备用指派路由器) 为了使得向指派路由器的平滑转换,每一个广播和NBMA网络都有一个备用指派路由器。备用指派路由器同网络中的所有路由器都存在邻接关系,在前一指派路由器失效后成为指派 34 路由器。如果没有备用指派路由器,当需要一个新的指派路由器的时候,必须在新的指派路由器和网络中连接的所有的路由器之间建立邻接关系。邻接建立过程的一部分工作是同步链路状态数据库,这可能要花费比较长的时间。在这段时间内,网络将不能传送数据流。备用指派路由器消除了建立邻接的需要,因为它们早就已经存在了。也就是说,中断的时间只是泛滥新的LSAs(宣布新的指派路由器)的时间。 备用指派路由器不产生网络LSA。(如果它产生network,LSA,到新的指派路由器的转换会更快,但是,当指派路由器消失时,这是数据库大小和汇聚速度的一个折中)。 备用指派路由器也是通过Hello协议选择出来的。每一个Hello包包含一个规定备用指派路由器的域。 在泛滥程序的许多步骤中,备用指派路由器起一个被动的作用,让指派路由器做大部分的工作。这削减了本地路由流的数量。详细信息参见13.3节。 7.5. The graph of adjacencies(邻接图表) 一个邻接关系跟两个路由器共有的网络是绑定在一起的,如果两个路由器含有多个共同连接的网络,那么他们之间就可能存在多个邻接关系。 可以通过画出网络上邻接的集合,形成无向图。顶点包含路由器,两个有邻接关系的路由器用一条边连接他们。邻接关系表描述了路由协议数据包通过AS的流向,尤其是每一个特定的链路状态更新包。 根据是否选择出了指派路由器,两个图表是可能的。在物理的点到点网络,点到多点网络和虚链路中,一旦它们之间直接进行通信,邻居路由器就成为邻接关系。相反的,在广播和NBMA网络中,只有指派路由器和备用指派路由器成为连接到网络中的所有路由器的邻接。 图表如图10所示,对于网络2,假定RT7已经成为指派路由器,RT3成为备用指派路由器,备用指派路由器在泛滥过程中只执行比指派路由器少得多的功能(参见13.3节)。因此 35 采用虚线连接备用指派路由器RT3。 8. Protocol Packet Processing(协议包处理) 本节描述了OSPF路由协议包的一些通常的处理。保持路由器链路状态数据库的同步是很重要的,因此,路由协议数据包在发送和接收时应该获得比普通包更高优先级的处理。 路由协议包只在邻接间传送(Hello包除外,它用来发现邻接关系,可为邻居)。除了那些通过虚拟链路传送的协议包。这就意味着所有的路由协议信息只传送一个IP跳。 所有路由协议包都有一个 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的头。下面的部分提供了如何添加和验证标准包头。对于每一个包类型,本节提供了每一特定包类型的处理方法。 8.1. Sending protocol packets(发送协议包) 当路由器发送一个路由器协议包时,它按照如下所述来填入标准OSPF包的域。包头的详细信息参见A.3.1节: 版本号(Version #): 应该设置为2,如本协议所规定的版本号。 包类型(Packet type) OSPF包的类型,如链路状态更新或者Hello包。 Packet length(包长度) 用字节表示的整个OSPF包的长度,包括标准的OSPF包头。 Router ID(路由器ID) 发起协议包的路由器本身的ID。 Area ID(区域ID) 要送进去的OSPF域的ID。 Checksum(校验和) 除去64bit验证域的整个OSPF包的标准的IP16位取反的校验和。这个校验和的计算作为相应的验证过程的一部分,对于一些OSPF验证类型,这个校验和计算可以忽略。参见D.4节。 AuType and Authentication(AuType和验证) 每一个OSPF包的交换都必须通过验证,验证类型是在协议的附录D中规定的。在每一个网络/子网中可以采用不同的验证过程。AuType指明了使用的验证过程,选定的验证过程使用64bit验证域进行验证。当组装发送的协议包时,本过程应该在最后进行调用。参见D.4。 IP目的地址通过如下方式进行选择。在物理点到点网络中,IP目的地址设置为AllSPFRouters。在另外的网络类型中(包括虚链路),大部分的OSPF包通过单播的方式传播,例如,直接送到邻接的对端。在这种情况下,IP地址就是邻接的对端邻居IP地址(参见10节)。唯一不通过单播进行发送的协议包是在广播网络中,Hello包通过多播地址AllSPFRouters进行多播,指派路由器和备用指派路由器通过AllSPFRouters多播地址发送链路状态更新包和链路状态应答包。而其他路由器则通过多播地址AllDrouters发送链路状态更新包和链路状态应答包。 链路状态更新包总是直接在邻居间重传。在多址存取网络中,这就意味着重传需要发送 36 到邻居的IP地址。 IP源地址应该设为发送接口的IP地址。到unnumbered 点到点网络的接口没有相应的IP地址。在这些接口中,IP源地址应该设为任何一个该路由器的其他IP地址。因此,每一个路由器必须分派至少一个IP地址。【2】注意,对于大多数情况来说,虚链路等同于unnumbered点到点网络。但是,每一个虚链路有一个IP接口地址(在路由表建立过程中发现的),当传送协议包时应该指定IP源地址为这个IP地址。 关于特定OSPF包的类型的详细信息,参见表10所列。 Type Packet name detailed section (transmit) _________________________________________________________ 1 Hello Section 9.5 2 Database description Section 10.8 3 Link state request Section 10.9 4 Link state update Section 13.3 5 Link state ack Section 13.5 Table 10: Sections describing OSPF protocol packet transmission. 8.2. Receiving protocol packets(接收协议包) 当路由器接受到一个协议包时,将该协议包标记上接收到的接口。对于含有配置虚链路的路由器来说,可能不会立即辨别出每一个数据包联系的接口。例如,考虑图6中描述的RT11。如果RT11接收到跟网络N8连接的接口接收到OSPF协议包,它可能想把包跟连接到区域2的接口联系到一起,或者跟连接到路由器RT10的虚链路联系到一起(这是主干网的一部分)。接下来,我们假设包最初跟非虚链路联系在一起。 为了在IP层次接收包,即使在被传送到OSPF处理之前,也必须通过一系列的检查: , IP校验和必须正确 , 包的IP目的地址必须是接收接口的IP地址,或者是IP多播地址AllSPFRouters 或者AllDrouters。 , IP协议包必须是OSPF(89) , 本地发出的包不能传送给OSPF,也就是说,必须检查多播包的IP源地址以确保这 个包不是路由器本身产生的 接着验证OSPF包头。包头中含有的内容必须同接受接口配置的一样,如果不匹配,将丢弃该协议包: , 版本号必须是2 , OSPF的区域ID必须要核实。如果下面的所有的情况都失败的话,应该丢弃该包。 包头中包含的区域ID必须满足如下条件中的一种: , 匹配接收接口的区域ID。这种情况下,包经历了一跳的传送。因此,包的IP 源地址必须同接收到的接口属于同一网络。这可以通过比较跟掩码相与后的包 的源地址和目的地址(接受接口)来实现校验。在点到点网络中应该避免进行比 较。在点到点网络中,如果两端接口地址都配置了的话,接口地址是独立分配 的。 37 , 指示主干网。这种情况下,包经历了虚链路的传送。接收路由器必须是一个 Area域边界路由器,源路由器ID必须是配置虚链路的另一端的路由器的ID。 接受接口也必须连接到配置传送区域虚链路。如果所有的检查成功的话,包将 按照与虚链路联系(主干区域)的方式接收下来。 , IP目的地址是AllDRouters的包只有在接收接口的状态是DR或者备用指派路由器 时接收下来。(参见9.1节) , 包规定的AuType必须与相关域的AuType匹配 , 包必须通过验证。验证程序通过设置AuType来指示(参见附录D)。验证程序可能 采用一个或多个验证密钥,可以基于每一接口进行配置。验证程序可能会验证OSPF 包头中的校验和(使用的时候,设置为除去64bit验证域的OSPF内容的标准 IP16bit取反的校验和)。如果验证程序失败,应该丢弃包。 如果包类型是Hello,那么需要进一步的处理(参见10.5节)。所有其他的包仅仅通过邻接发送和接收。这就意味着包必须是一个路由器的激活的邻居发送的。如果接收接口连接到一个广播网络,点到多点网络或者NBMA网络,通过包中包含的IP源地址来识别发送者。如果接收接口连接到一个点到点网络或一个虚链路,通过OSPF包头中的源路由器ID来识别发送者。跟接收接口联系的数据结构包含一个处于活动状态的邻居的列表。没有跟任何活动的邻居匹配的包将被丢弃。 从这点来说,所有接收的协议包都跟活动的邻居联系在一起。对于特定协议包类型的进一步接入处理,参考表11中的列表。 Type Packet name detailed section (receive) ________________________________________________________ 1 Hello Section 10.5 2 Database description Section 10.6 3 Link state request Section 10.7 4 Link state update Section 13 5 Link state ack Section 13.7 Table 11: Sections describing OSPF protocol packet reception. 9. The Interface Data Structure(接口数据结构) OSPF接口是路由器和网络的连接,我们假设一个OSPF接口连接到一个网络/子网,尽管如附录F中描述的可以支持一个网络中的多接口。每一个接口结构最多有一个IP接口地址。 一个OSPF接口可以认为属于包含连接到的网络所属的区域。所有通过这个接口发送的路由器的路由协议包通过接口区域ID标记。在一个接口上可能建立一个或多个路由器邻接。一个路由器的LSAs反映了接口和它的邻接的状态。 下面是跟接口联系的数据项。注意,这些项中的一部分是连接的网络实际配置,对于所有连接到网络的路由器来说这些选项必须相同。 Type(类型) 38 OSPF接口类型要么是点到点,要么是广播,NBMA,点到多点,或者是虚链路。 State(状态) 接口的功能级别。状态决定了是否可以通过接口建立完全的邻接关系。状态也反映在路由器的LSAs。 IP interface address(IP接口地址) 跟接口绑定的IP地址。这个接口发出的所有协议包的IP源地址就是这个地址。到unnembered点到点网络的接口没有绑定的IP地址。 IP interface mask(IP接口掩码) 也叫做子网掩码,指示了连接到的网络IP接口地址的范围。IP接口地址跟IP接口掩码相与就得到了跟接口连接的网络的网络号。在点到点网络和虚链路中,链路本身没有分配IP网络地址,如果分配了地址的话,两边的地址是独立分配的。 Area ID(区域ID) 区域ID是所连接的网络所属区域的ID。区域ID标记所有从这个接口发送的路由协议包。 HelloInterval(Hello间隔时间) 以秒表示的发送Hello协议包的时间间隔长度,通过从这个接口发出的Hello数据包广告。 RouterDeadInterval() 当路由器停止接收Hello包时,路由器邻居声明它关掉前的秒数。通过该接口发送的Hello包广播。 InfTransDelay(信息传送延迟) 通过一个接口传送一个链路状态更新包需要的估计时间(以秒计)。链路状态更新包中包含的LSAs在传送之前把它们的年龄(age)增加这个数量。这个值需要考虑传输和传送延迟,必须大于0。 Router Priority(路由器优先级) 8bit无符号数。当连接到一个网络中的两个路由器都想成为指派路由器时,拥有高优先级的路由器优先。优先级设置为0的路由器是不能成为连接的网络的指派路由器的。通过发送的hello包广告。 Hello Timer(Hello 时钟) 一个引起发送Hello 包的间隔时钟。这个时钟每隔HelloInterval秒数有效。注意,非广播网络中,向每一个合格的邻居发送一个单独的Hello包。 Wait Timer(等待时间) 一个single shot时钟,使得接口退出选择指派路由器的等待状态。时钟的长度是RouterDeadInterval秒。 List of neighboring routers(邻接路由器列表) 连接到网络中的其他路由器。通过Hello包建立。在一些这样的邻居中建立邻接关系。邻接关系集合可以通过检查邻接路由器列表中路由器的状态来确定。 Designated Router(指派路由器) 指派路由器是为连接的网络选举出的。在所有的广播和NBMA网络中通过Hello包选举出指派路由器。有两部分来标志一个指派路由器:它的路由器ID和连接到网络的接口IP地址。指派路由器为广告网络链路状态,network,LSAs通过指派路由器IP地址标记。指派路由器最初被初始化为0.0.0.0,这表示缺少指派路由器。 Backup Designated Router(备用指派路由器) 备用指派路由器在广播网络和NBMA网络中通过Hello包选举出来。连接到特定网络中 39 所有路由器成为指派路由器和备用指派路由器的邻接。当指派路由器失效时,备用指派路由器成为指派路由器。指派路由器最初设置为0.0.0.0,这表示缺少备用指派路由器。 Interface output cost(s)(接口输出代价) 通过接口发送数据包的代价,用链路状态metric表示。在router,LSA中通过这个接口的链路代价来广告。必须大于0。 RxmtInterval(重传间隔) 对于属于这个接口的邻接的LSA重传的间隔秒数。也用于重传数据库描述和链路状态请求数据包。 AuType(验证类型) 连接到的网络/子网使用的验证类型。在附录D中有定义。所有交换的OSPF包必须通过验证。不同的网络/子网可能使用不同的验证机制。 Authentication key(验证密钥) 这些配置数据允许验证过程产生和验证OSPF协议包。可以基于每一接口配置验证密钥。例如,如果验证类型指示为简单密码,验证密钥就是插入到OSPF中的64bit的密码明文。如果指示为加密的验证,那么验证密钥就是两者共享的添加到OSPF协议包的经过加密的digest。当使用加密的验证时,支持多个同时有用的密钥来获得密钥的平滑转换(参见D.3) 40 9.1 接口状态(Interface states) 路由器接口可能处于的各种状态在本节中叙述。状态按照运行的功能性(progressing functionality)排列。比如,首先是不可运行状态(the inoperative state),接着是结束前的中间状态,然后是完全运行状态(fully functional state)。规范采用了诸如“这些邻居/Adjacency的状态比X级别高”等参考,得到了这样的排列顺序。Figure 11显示了接口状态的转换,图表中采用引起状态变化的事件(event)标识状态之间的弧线(arc)。这些事件在9.2.节中有述。接口状态机在9.3.节中有详细叙述。 +----+ UnloopInd +--------+ |Down|<--------------|Loopback| +----+ +--------+ | |InterfaceUp +-------+ | +--------------+ |Waiting|<-+------------>|Point-to-point| +-------+ +--------------+ | WaitTimer|BackupSeen | | | NeighborChange +------+ +-+<---------------+-------+ |Backup|<----------|?|--------------->|DROther| +------+---------->+-+<----+ +-------+ Neighbor | | Change | |Neighbor | |Change | +--+ +--->|DR| +--+ 图表11:接口状态转换图 Figure 11: Interface State changes 注:InterfaceDown事件强制进入(force)Down状态,LoopInd事件强制进入Loopback状态。 Down(停机状态) 这是一个初始的接口状态。在Down状态下,下层的协议已经指示(indicated)该接口不可用。在该接口,不会发送或者接收任何业务。在Down状态下,接口参数应该设置为它们的初始值,所有接口定时器(timer)不使能,没有adjacency与该接口相关联。 Loopback(环回状态) 在此状态下,路由器连接网络的接口是环回的,可以是硬件环回或者软件环回,此时接 41 口不可以传送常规数据业务。但是,可以通过发送ICMP ping给该接口或者比特错误检测等方式,获得该接口的质量信息。所以,IP数据包可以将地址设为处于Loopback状态的接口,为了便于这样做,这些接口在router-LSAs中作为单独主机路径(single host routes)广播,单独主机路径采用的目的地址是该IP接口地址。[4] Waiting(等待状态) 在Waiting状态下,路由器试图确定网络中(Backup)Designated Router的标识。路由器检测接收到的Hello Packet。路由器处于Waiting状态时,不允许被选举为一个Backup Designated Router或者Designated Router,这是为了防止(Backup)Designated Router不必要的变更。 Point-to-point(点对点状态) 在Point-to-point状态下,接口是可运行的,并且与一个物理点对点网络,或者一个虚连接(virtual link)相连。一进入Point-to-point状态,路由器就尝试与相邻路由器建立一个adjacency。每隔HelloInterval的时间间隔,就向相邻路由器发送Hello Packet。 DR Other(其他DR状态) 接口是一个广播型或者NBMA网络,其它的路由器被选定为Designated Router。在DR Other状态下,路由器还没有被选定为Backup Designated Router。该路由器与Designated Router和Backup Designated Router(如果他们存在的话)都要建立adjacency。 Backup(备份状态) 在Backup状态下,路由器是网络上的Backup Designated Router。当现有的Designated Router出问题了,该路由器就被提升为Designated Router。该路由器与网络中的所有其他路由器建立adjacency。在扩散过程(Flooding Procedure)中,Backup Designated Router与Designated Router有细微功能上的区别(参见13.3节)。Backup Designated Router的功能请详见7.4节。 DR(DR状态) 在DR状态下,路由器是Designated Router,与网络中所有其他的路由器都建立adjacency。该路由器还必须建立一个network-LSA,network-LSA将包括所有路由器(包括Designated Router本身)的连接(link)。Designated Router的功能请详见7.3节。 9.2 引发接口状态转移的事件(Events causing interface state changes) 状态转移可以被一系列的事件引发,这些事件在Figure 11中的跳变弧线上标注出来了。OSPF协议运行中,这些事件的作用将在9.3节中详细解释。 InterfaceUp(接口启动) 下层协议指示说明该网络接口可运行,使接口脱离Down状态。在虚连接上,接口可运行指示实际上是最短路径计算(参见16.7节)的结果。 42 WaitTimer(等待定时器) 在选举一个(Backup) Designated Router之前,需要有一个等待时间,等待定时器(Wait Timer)开始工作,说明该等待时间的结束。 BackupSeen(备份可见) 路由器检测到Backup Designated Router的存在或不存在,可以通过两种方法实现:1.来自相邻路由器的Hello Packet,声明自己是Backup Designated Router;2. 来自相邻路由器的Hello Packet,声明自己是Designated Router,说明不存在Backup Designated Router。在这两种情况下,必须与相邻路由器进行双向通信,例如路由器必须在相邻路由器的Hello Packet中出现。这一事件标识了Waiting状态的结束。 NeighborChange(邻居改变) 当通过接口连接的双向邻居出现了变化,(Backup)Designated Router需要重新进行计算。下列变化将引起NeighborChange事件:(邻居状态的解释参见10.1节) , 已经与一个相邻路由器建立了双向通信,换句话说,邻居状态已经转换为2-Way 或者更高(higher)状态。 , 与一个相邻路由器失去了双向通信,换句话说,邻居状态已经转换为Init或 者更低(lower)状态。 , 一个双向邻居新近声明自己是Designated Router或者Backup Designated Router,这种情况可以通过检测邻居的Hello Packet实现。 , 一个双向邻居声明自己不再是Designated Router或者Backup Designated Router,这种情况也是通过检测邻居的Hello Packet实现。 , 为某个双向邻居的广播的路由器优先级改变了,这种情况也是通过检测邻居的 Hello Packet实现。 LoopInd(环回标识) 收到接口环回到自己的标示,这一标示可以从网络管理或者下层协议中得到。 UnloopInd(非环回标识) 收到接口不再环回自己的标示,这一标示可以从网络管理或者下层协议中得到。 InterfaceDown(接口停机) 下层协议标识该接口不可运行了。不论当前接口状态如何,都将转移到Down状态。 9.3 接口状态机(The Interface state machine) 下面将详细介绍接口状态转换。每个状态转换都是有某个事件引起(见9.2节),一个事件可以产生不同的影响,这取决于接口当前所处于的状态。所以,下面的状态机由当前的状态和收到的事件组成。状态机中的每一条记录描述了转换后的新接口状态和所需的一系列附加操作。 当一个接口发生状态转移时,需要生成一个新的router-LSA,详见12.4节。 下面所需的操作包括为相邻状态交换机产生事件,例如,当接口变为不可运行时,所有 43 与该接口有关的相邻连接必须去除。有关相邻状态机的介绍,参见10.3节。 状态:Down 事件:InterfaceUp 新状态:取决于操作路径 操作: 开启间隔问候定时器(interval Hellp Timer),使得定时发送Hello packet。 如果连接的网络是物理点对点、点对多点网络或者虚连接(virtual link)的网络,接口状态转换为Point-to-Point状态;如果路由器无资格成为Designated Router,接口状态转换为DR Other;如果连接的网络是广播型或NBMA网络,而且路由器有资格成为Designated Router,接口状态设为Waiting,单射(single shot)Wait Timer开启,并试图发现连接网中的Designated Router,另外,如果网络是NBMA网络,检查为该接口设置的邻居列表,为每个也具有Designated Router资格的邻居产生一个Start事件。 状态:Waiting 事件:BackupSeen 新状态:取决于操作路径 操作: 计算连接网络中的Backup Designated Router和Designated Router(如9.4.节中所述)。按照计算的接口,决定接口的新状态将是DR Other、 Backup或DR。 状态:Waiting 事件:WaitTimer 新状态:取决于操作路径 操作: 计算连接网络中的Backup Designated Router和Designated Router(如9.4.节中所述)。按照计算的接口,决定接口的新状态将是DR Other、 Backup或DR。 状态:DR Other、 Backup或DR 事件:NeighborChange 新状态:取决于操作路径 操作: 重新计算连接网络中的Backup Designated Router和Designated Router(如9.4.节中所述)。按照计算的接口,决定接口的新状态将是DR Other、 Backup或DR。 状态:任意状态 事件:InterfaceDown 新状态:Down 操作: 重置(reset)接口所有的变量,关闭(disable)接口定时。并且去除所有与该接口相关联的相邻连接,这一操作通过给所有相关联的邻居产生KillNbr事件(参见10.2节)。 状态:任意状态 事件:LoopInd 44 新状态:Loopback 操作: 因为该接口不再与网络连接,有关InterfaceDown的所有事件都要运行。 (Action:Since this interface is no longer connected to the attached network the actions associated with the above InterfaceDown event are executed.) 状态;Loopback 事件:UnloopInd 新状态:Down 操作: 没有所需的操作。例如,接口变量已经在一进入Loopback状态的时候重置了。需要说明的是收到InterfaceUp事件必须在接口再次完全可运行(fully functional)。 9.4 选举Designated Router(Electing the Designated Router) 这一节描述了计算网络中Designated Router和Backup Designated Router的算法,这个算法是被接口状态机调用的。路由器运行选举算法时,网络的Designated Router和Backup Designated Router被初始化为“0.0.0.0.”,这表示Designated Router和Backup Designated Router都还没有。 Designated Router的选举算法如下进行: 称执行计算的路由器为X。相连的一组邻居都与X建立了双向的通信,这一组恰恰是X邻居(在该网络中)中状态高于或等于2-Way(参见10.1节)的路由器的集合,X本身也在这一组内。丢弃这组中无Designated Router资格的所有路由器,(路由器优先级为“0”的是无Designated Router资格的路由器)。对于剩余的路由器,执行下面步骤: (1)记录网络中Designated Router和Backup Designated Router的当前值,这样做是为了以后的对比目的。 (2)按照下列方法计算一个新的Backup Designated Router:只有没有声明自己是Designated Router的路由器才有Backup Designated Router资格。如果一个或者多个路由器声明自己是Backup Designated Router(例如他们在Hello Packet中将自己列为Backup Designated Router,而不是Designated Router),具有最高路由器优先级(Router Priority)的一个路由器被确定为Backup Designated Router。如果出现最高优先级相同的情况,则具有最高Router ID的为Backup Designated Router。如果没有路由器宣称自己为Backup Designated Router,选择具有最高Router Priority的路由器(除声明自己为Designated Router以外),也采用Router ID解决相同优先级的情况。 (3)按照下列方法计算一个新的Designated Router:如果一个或者多个路由器声明自己是Designated Router(例如他们在Hello Packet中将自己列为Designated Router),具有最高路由器优先级(Router Priority)的一个路由器被确定为Designated Router。如果出现最高优先级相同的情况,则具有最高Router ID的为Designated Router。如果没有路由器宣称自己为Designated Router,采取类似Backup Designated Router的选举办法确定Designated Router。 (4)如果X成为新的Designated Router,或新的Backup Designated Router,或者不再是Designated,或不再是Backup Designated Router,重复上面的(2)和(3)步骤,然后执行步骤(5)。例如,如果X当前是Designated Router,当步骤(2)执行的时候,X就不具有Backup Designated Router的资格。这样做将保证路由器不会同时声明自己为 45 Designated Router和Backup Designated Router。[5] (5)作为这些计算的结果,路由器可以为Designated Router或Backup Designated Router,其他任务(duties)详见7.3、7.4节。路由器接口状态应该设置一致。如果路由器现在是Designated Router,新的接口状态应该是DR。如果路由器现在是Backup Designated Router,新的接口状态应该是Backup。否则,新的接口状态应该是DR Other。 (6)如果连接的网络是NBMA网络,路由器刚刚成为Designated Router或Backup Designated Router,它必须开始发送Hello Packets给无Designated Router资格的邻居路由器(参见9.5.1节)。这一操作通过为每个Router Priority为0的路由器调用邻居事件Start实现。 (7)如果上述计算导致Designated Router或Backup Designated Router一致性(identity)的改变,与该接口相关联的一系列Adjacency将需要调整。有些Adjacency可能需要建立,其他可能需要去除。实现这一操作,为所有状态至少是2-Way的邻居调用事件AdjOK?即可。这一操作将重新检查它们的Adjacency资格(参见10.3、10.4节)。 选举算法复杂的原因是希望在现有Designated Router出问题时,Backup Designated Router可以有序的转变成为Designated Router。有序转变通过引入下面的假设保证:在原有Backup Designated Router接管新的Designated Router的职责之前,没有新的Backup Designated Router可以被选为Designated Router。 上面的过程可能选举同一个路由器为Designated Router和Backup Designated Router,但是此路由器不可能是计算路由器(既这里的路由器X)本身。被选出的Designated Router可能不是Router Priority最高的路由器,Backup Designated Router也不必是Router Priority次高的路由器。如果路由器X本身没有Designated Router资格,上述过程有可能既选不出Backup Designated Router,也选不出Designated Router。如果路由器X是仅有的具有Designated Router资格的路由器,它将选择自己为Designated Router,而且将没有Backup Designated Router。 9.5 发送Hello packet(Sending Hello packets) Hello packets要发送给每一个正在运行的路由器接口,用来发现和保持邻居关系。[6]在广播型或者NBMA网络中,Hello Packets还用来选举Designated Router和Backup Designated Router。 Hello packet的格式定义在A.3.2.节中有详细描述。Hello Packet包括路由器的Router Priority(在选举Designated Router中使用)、Hello Packets向外发送的时间间隔(interval)(HelloInterval)。Hello Packet还要标识邻居接受存在消息的间隔 (RouterDeadInterval)。HelloInterval和RouterDeadInterval在同一网络中,都必须是相同的。Hello packet还包括IP地址掩码(IP address mask)(Network Mask)。在无限(unnumbered)的点对点网络(point-to-point networks)和虚连接(virtual links)中,这个域应该设为“0.0.0.0”。 Hello packet的Options field描述了路由器的可选择的OSPF功能。其中一个可选择功能在本规范中4.5和A.2节中定义。当且仅当连接网络具有处理AS-external-LSAs(例如,不是一个stub(短线)区域)的能力时,Options field 中的E-bit应该被置位(Re set)。如果E-bit置位不正确,邻居路由器将拒绝接收Hello Packet(参见10.5节)。Hello Packet中Options field不确定(Unrecognized)的比特应该设置为“0”。 为了保证Adjacency路由器之间的双向通信,Hello packet包括了网络中已经被Hello 46 Packet发现的所有路由器的列表。Hello packet还包括路由器当前 Designated Router和Backup Designated Router的选择,“0.0.0.0”表示还没有选出。 在广播型网络和物理点对点网络,每隔HelloInterval的时间,就向IP的广播地址AllSPFRouters发送Hello packet。在虚连接(virtual links)中,每隔HelloInterval的时间,Hello packet作为单播(unicasts,直接发送至虚连接的另一端)向外发送。在点对多点网络中,每隔HelloInterval的时间,分离的(separate)Hello packets向各自的邻居。在NBMA网络中发送Hello packet在下一节中叙述。 9.5.1 NBMA网络中发送Hello packet(Sending Hello packets on NBMA networks) Hello Protocol(问候协议)在非广播网络中的运行可能需要静态配置信息(Static configuration information)(参见C.5 and C.6节)。在NBMA网络中,每个具有Designated Router资格的路由器知道所有网络中的邻居(通过配置或其他特定机制)。每个邻居都用Designated Router资格标识 NBMA接口要发送Hello Packet的时候,接口状态必须至少为Waiting。Hello Packet直接发送给路由器邻居中的某些子集(如同单播,unicasts)。有时,Hello Packet通过一个定时器定期发送;其他时候作为接收到Hello Packet的响应发送出去。路由器因自身是否具有Designated Router资格不同,Hello packet发送的操作也不同。 如果路由器具有Designated Router资格,它必须定期发送Hello Packet给所有也同样具有资格的邻居,而且如果该路由器本身是Designated Router或Backup Designated Router,它还必须定期给所有邻居发送。这意味着两个具有资格的路由器经常的交换Hello Packet,这对于正确地运行Designated Router选举算法是必须的。为了减少Hello Packet的发送数目,NBMA网络中的有资格路由器的数目应该保持比较少的情况。 如果路由器不具有Designated Router资格,它必须定期的向Designated Router和Backup Designated Router(如果他们存在的话)发送Hello Packet。还必须在收到任何有资格邻居(除当前的Designated Router和Backup Designated Router外)的Hello Packet的时候,发送一个Hello Packet作为响应。这是与潜在的Designated Router建立双向关系所必需的。 定期向任何邻居发送Hello packet时,发送的时间间隔受该邻居的状态影响,如果邻居处于Down状态,间隔应为PollInterval,其他情况应为HelloInterval。 47 10. 邻居数据结构(The Neighbor Data Structure) OSPF的路由器与邻居路由器进行会话,每个独立的会话被描述为“邻居数据结构”。每个会话绑定在一个特定的OSPF路由器的接口,而且用该邻居路由器的OSPF Router ID或者邻居IP address标识(下面有述)。所以如果该OSPF路由器和另一个路由器同时连接多个网络,进行多个会话,每个会话由一个专门的邻居数据结构标识。每个单独的会话在文中对应一个单独的“邻居”。 邻居数据结构包括有关建立和已建成相邻路由器间的Adjacency关系的所有信息。(但是注意不是所有的相邻路由器都能成为Adjacency)。一个Adjacency关系可以看成是两个路由器间高度发展(highly developed)的会话。 状态 邻居会话的功能水平,在10.1.节中有详细叙述。 休止定时器 标识没有Hello Packet从邻居收到的单独定时器,定时的间隔为RouterDeadInterval 主/从路由器 当两个邻居间在交换数据库时,他们就建立了一个主/从关系。主路由器发送第一个Database Description Packet(数据库描述数据包),而且它是仅有的可以重传的部分。从路由器只可以响应主路由器的Database Description Packet。这种主/从关系是在ExStart状态下协商得到的。 DD序列数(DD Sequence Number) Database Description packet中的DD Sequence number是当前发送给邻居的。 最近接收到的Database Description packet(Last received Database Description packet) 最近从邻居收到的Database Description packet中包括initialize(I)、 more (M)和master(MS)比特,Options field和DD sequence number。该packet用来确定收到的下一个Database Description packet是不是复制品。 邻居ID 邻居路由器的OSPF Router ID。当收到邻居Hello packet时获得邻居ID,或者在虚拟Adjacency间(virtual adjacency)配置得到(参见C.4)。 邻居优先级 邻居路由器的路由器优先级。包含在邻居Hello packet中,在选择Designated Router的时候使用。 邻居IP地址 邻居路由器接口的IP地址。当协议数据包作为unicasts沿着该Adjacency发送的时候,作为目标IP地址使用。当邻居被选为Designated Router时,也在router-LSAs中作为Link 48 ID(连接ID)使用(参见12.4.1节)。邻居IP地址在收到邻居Hello packet的时候获得。对于虚连接,在路由表建立过程中获得(参见15节)。 邻居选项(Neighbor Options) 可选择的OSPF功能有邻居支持,在数据库交换过程中获得(参见10.6节)。邻居的可选择OSPF功能也在他的Hello packet中说明。这样使得,如果出现某重要OSPF功能的不匹配,可以丢弃接收到的Hello packet(例如邻居关系还没有开始建立)。可选择的OSPF功能在4.5节描述。 邻居的Designated Router 邻居关于Designated Router的想法(idea)。如果是邻居本身,对于Designated Router的局部计算是很重要的。仅在广播型和NBMA网络中有定义。 邻居的Backup Designated Router 邻居关于Backup Designated Router的想法(idea)。对于Backup Designated Router的局部计算是很重要的。仅在广播型和NBMA网络中有定义。 下面的一组变量是LSA列表。这些列表描述了区域连接状态数据库(area link-state database)的子集。此备忘录定义了5个不同类型的LSA,他们在area link-state database中描述:router-LSAs、network-LSAs、Type 3 and 4 summary-LSAs (保存在the area data structure中)、和AS-external-LSAs(保存在global data structure中)。 连接状态重传列表(Link state retransmission list) 已经扩散(flooded)但是在该Adjacency上面还为知晓的LSA列表。在他们知晓之前,或在Adjacency被去除之前,这个列表会定期重传的。 数据库摘要列表(Database summary list) 在邻居进入Database Exchange状态的时候,创建area link-state database的完整LSA列表。这个列表包含在Database Description packet中,发送给邻居。 连接状态请求列表 需要从邻居接收用于同步两个邻居link-state databases的LSA列表。这个列表在接收到Database Description packet的时候创建的,包含在Link State Request packets中发送给邻居,在收到正确的Link State Update时寿终正寝。 10.1 邻居状态(Neighbor states) 下面一节讲述的是邻居路由器的状态(实际上是与一个邻居的会话状态)。状态按照功能运行过程排列,例如,首先是未运行状态,接着是一系列的中间状态,最后是完全运行状态。规范采用了诸如“这些邻居/Adjacency的状态比X级别高”等参考,得到了这样的排列顺序。Figure 12和13显示了邻居状态的转换,图表中采用引起状态变化的事件(event)标识状态之间的弧线(arc)。这些事件在10.2.节中有述。 Figure 12显示了Hello Protocol协议影响的状态转移。Hello Protocol需要实现邻居的发现和保持(acquisition and maintenance),以及保证邻居间的双向通信。 49 Figure 13显示了一个Adjacency的建立。不是所有的相邻路由器都会成为Adjacency(参见10.4节)。当邻居处于ExStart状态时,Adjacency开始建立。当两个路由器发现彼此的主/从地位,状态转移为Exchange。从这个角度看,邻居在扩散过程(flooding procedure)中开始被使用,而且相邻路由器开始同步它们的数据库。当同步结束时,邻居处于Full状态,我们称两个路由器成为完全Adjacency。所以该Adjacency在LSA中列举。 邻居状态转移的详细叙述和每个转换调用的附加操作参见10.3节。 +----+ |Down| +----+ |\ | \Start | \ +-------+ Hello | +------>|Attempt| Received | +-------+ | | +----+<-+ |HelloReceived |Init|<-----------------+ +----+<--------+ | | |2-Way |1-Way |Received |Received | | +-------+ | +-----+ |ExStart|<------+------->|2-Way| +-------+ +-----+ 图表12:邻居状态转移(Hello Protocol) Figure 12: Neighbor state changes (Hello Protocol) 注:事件KillNbr、InactivityTimer、LLDowm通常强制进入Down状态。 +-------+ |ExStart| +-------+ | NegotiationDone| +->+--------+ |Exchange| +--+--------+ | Exchange| 50 Done | +----+ | +-------+ |Full|<---------+----->|Loading| +----+<-+ +-------+ | LoadingDone | +------------------+ 图表13:邻居状态转移(数据库交换) Figure 13: Neighbor state changes (Database Exchange) 注:事件SeqNumberMismatch、BadLSReq强制进入ExStart状态,事件1-Way强制进入Init状态,事件KillNbr、InactivityTimer、LLDown通常强制进入Down状态,事件AdjOK?引起Adjacency的建立/去除(forming/breaking)。 Down(停机状态) 这是邻居会话的初始状态。它指示近来还没有来自邻居的信息。在NBMA网络中,Hello packet仍然可以发送给处于“Down”状态的邻居,尽管发送的频率降低了。(参见9.5.1节)。 Attempt(尝试状态) 此状态只有在邻居处于NBMA网络中时才有效。它指示近来还没有来自邻居的信息,但是更多预定的努力需要尝试与邻居建立联系,间隔HelloInterval的向邻居发送Hello packet来实现。 Init(初始状态) 在此状态时,来自邻居的Hello packet已经收到,但是与邻居间的双向通信还没有建立起来(例如路由器自身还没有出现在邻居的Hello packet中)。处于Init或者更高状态的邻居在来自相关接口的Hello packet中都有列举。 2-Way(双向状态) 此状态下,两个路由器之间的通信是双向的,这是由Hello Protocol运行确定的。这是Adjacency建立开始之前最高的状态。(Backup) Designated Router在处于2-Way或者更高的状态的邻居群中选择。 ExStart(交换开始状态) 这是在相邻两个路由器之间创建Adjacency的第一步。它的目的是决定哪个路由器是主路由器,决定的依据是初始的DD sequence number。邻居会话处于ExStart或者更高就成为adjacency。 Exchange(交换状态) 在此状态下,路由器通过向邻居发送Database Description packet,描述自己全部的连接状态数据库。每个Database Description packet包含一个DD sequence number。在此状态下,也可以发送Link State Request Packet向邻居询问更多近来的LSA。所有处于Exchange或者更高状态的Adjacency都会在扩散(flooding procedure)中被使用。实际上,这些Adjacency完全具有发送和接收所有OSPF路由协议数据包的能力。 Loading(下载状态) 51 在此状态下,发送Link State Request Packet向邻居询问更多近来的LSA,这些LSA是已经发现处于Exchange状态的(但是还未接收到LSA)。 Full(完全运行状态) 在此状态下,相邻路由器是完全Adjacency。这些Adjacency将出现在router-LSA和network-LSA中。 10.2 引起邻居状态转移的事件(Events causing neighbor state changes) 状态转移可以被很多事件影响。这些事件用于标识Figures 12和13中的“弧线”。事件的定义如下: HelloReceived 已经收到来自该邻居的Hello packet Start 指示应该定期间隔HelloInterval向该邻居发送Hello Packet。这个事件只由连在NBMA网络的邻居产生。 2-WayReceived 双向通信已经在相邻的两个路由器之间实现,是通过在邻居的Hello packet中找到自身证实的。 NegotiationDone 主/从关系已经协商,而且已经交换了DD sequence numbers。这是开始发送/接收Database Description packet的信号。这一事件的产生参见10.8节。 ExchangeDone 相邻两个路由器都成功传送完整的Database Description packet。每个路由器都知道了他的连接状态数据库中哪些是已经过期的。这一事件的产生参见10.8节。 BadLSReq 收到一个Link State Request,对应数据库中没有包含的LSA。这说明数据库的交换过程中出现了错误。 Loading Done 收到Link State Update,对应数据库中所有过期的部分。这说明Database Exchange 过程完成之后,Link state request list空了。 AdjOK? 必须决定是不是建立/保持与该邻居的Adjacency关系。这一事件将开始建立或者去除某些Adjacency。 52 下面的事件将建立好的邻居状态转变为较低的状态。与上面事件不同的是,这些事件可以在邻居会话处于任何状态下发生。 SeqNumberMismatch 已经收到一个Database Description packet,它包括一个意外的DD sequence number,或者出乎意料的Init比特被置位了,或者含有与上一次Database Description packet中不同的Options field。上面的任一情况说明在Adjacency建立过程中出现了出现了一些错误。 1-Way 收到邻居发来的Hello packet,但是其中没有包含自己。这说明与邻居的通信还不是双向的。 KillNbr 这个事件说明与邻居间的所有通信现在都不可实现,强制邻居状态进入Down状态。 InactivityTimer 定时器处于非动态工作方式。这说明还没有收到Hello packets,邻居状态进入Down状态。 LLDown 这是一个来自下层协议的邻居不可达指示。例如X.25网络,可以由X.25 clear indication with appropriate cause and diagnostic fields来指示。这一事件强制邻居状态进入Down状态。 10.3 邻居状态机(The Neighbor state machine) 下面将详细叙述邻居状态转移。每个状态转移都是由一个事件引起的(参见10.2节)。一个事件可能产生几种不同的影响,取决于当前所处于的邻居状态。因此,下面的状态机由当前邻居状态和接收到的事件组成。状态机中的每一条记录都描述了新的邻居状态和所需的一系列附加操作。 当某个邻居的状态转换过后,可能需要重新运行Designated Router的选举算法,这取决于是否产生了接口NeighborChange事件(参见9.2节)。而且当接口处于DR状态(路由器本身是Designated Router)时,邻居状态的转移可能发起一个新的network-LSA(参见12.4节)。 当邻居状态机需要调用接口状态机的时候,应该按照预定任务(scheduled task)执行(参见4.4节)。通过保证邻居状态机的递归(recursively)运行,将过程简单化。 状态:Down 事件:Start 新状态:Attempt 操作: 发送一个Hello Packet给邻居(这个邻居通常是与一个NBMA网络相关的),而且为该 53 邻居开启非动态定时器。定时器超时将说明与邻居的通信没有实现。 状态:Attempt 事件:HelloReceived 新状态:Init 操作: 由于该邻居已经被听到,重新为邻居开启非动态定时器。 状态:Down 事件:HelloReceived 新状态:Init 操作: 为邻居开启非动态定时器,定时器超时将说明邻居的“死亡”。 状态:Init或者更高 事件:HelloReceived 新状态:无状态转移 操作: 因为邻居再次被听到,重新开启非动态定时器。 状态:Init 事件:2-WayReceived 新状态:取决于操作路径 操作: 决定是否该为一个邻居建立一个adjacency(参见10.4节),如果不该建立,新的邻居状态为2-Way。 否则(adjacency应该被建立),邻居状态转移至ExStart。进入这一状态时,路由器在邻居数据结构中增加DD sequence number。如果这是一个已经被尝试的adjacency第一次,DD sequence number应该被赋予一些独特的值(如时钟的时间),声明自己为主路由器(设置主/从比特为“主”),开始发送Database Description Packet,它的initialize(I)、more(M)和master (MS) 比特应该被置位,其他的应该空白。该Database Description Packet 应该每间隔RxmtInterval重发一次,知道进入下一个状态(参见10.8节)。 状态:ExStart 事件:NegotiationDone 新状态:Exchange 操作: 路由器必须列出邻居数据库summary list中的全部area link state database(区域连接状态数据库)的目录(content)。Area link state database包括router-LSA、network-LSA和summary-LSA,以及global structure中AS-external-LSA。AS-external-LSA 被一个虚拟邻居的Database summary list而忽略,在area已经设置为一个子区域的时候,AS-external-LSA在Database summary list中被忽略。寿命等于MaxAge的LSA(instead)加入邻居的Link state retransmission list。Database summary list的摘要将在Database Description packet中向该邻居发送。每个Database Description Packet都有一个明确 54 被告知的 DD sequence number。任意时候只允许使用一个Database Description Packet (Allowed Outstanding)。发送和接收Database Description packet的详细叙述参见10.8和10.6节。 状态:Exchange 事件:ExchangeDone 新状态:有赖于操作路径 操作: 如果邻居的Link state request list是空的,新的邻居状态则是Full,这是一个adjacency的终止状态,不需要其它的操作。 否则,新的邻居状态将是Loading。开始(或者继续)向该邻居发送Link State Request packets(参见10.9节),这些请求是为了当前邻居的更多的LSA(他们被发现但是还没有在Exchange状态中收到),这些LSA在与该邻居有关的Link state request list中列举。 状态:Loading 事件:Loading Done 新状态:Full 操作:不需要任何操作,这是一个这是一个adjacency的终止状态。 状态:2-Way 事件:AdjOK? 新状态:有赖于操作路径 操作: 确定是否应该为该邻居路由器建立一个adjacency(参见10.4节)。如果不应该,邻居状态保持2-Way,否则将转移为ExStart状态,并且进行有关高于状态Init甚至2-WayReceived的操作。 状态:ExStart或greater 事件:AdjOK? 新状态:有赖于操作路径 操作: 确定该邻居路由器是否应该仍是adjacent。如果应该,没有状态转移,并且不需要进一步操作。 否则,adjacency(可能只是部分建立了)必须被破坏掉,邻居状态转换为2-Way,清除LSA的Link state retransmission list、Database summary list和Link state request list。 状态:Exchange或greater 事件:SeqNumberMismatch 新状态:ExStart 操作: adjacency(可能只是部分建立了)必须被拆除,并且尝试重新建立。邻居状态第一次转换为ExStart,清除LSA的Link state retransmission list、Database summary list 和Link state request list,路由器在邻居数据结构中增加DD sequence number,声明自 55 己为主路由器(设置主/从比特为“主”),开始发送Database Description Packet,它的initialize(I)、more(M)和master (MS) 比特应该被置位。否则,该Database Description Packet应该为空(参见10.8节)。 状态:Exchange或greater 事件:BadLSReq 新状态:ExStart 操作: 对应事件BadLSReq的操作恰恰与邻居事件SeqNumberMismatch对应的相同。adjacency(可能只是部分建立了)必须被拆除,并且尝试重新建立。更多信息,参见在Exchange或者更高状态下产生SeqNumberMismatch事件,调用的邻居状态机的记录。 状态:任意状态 事件:KillNbr 新状态:Down 操作: 清除LSA的Link state retransmission list、Database summary list和Link state request list,而且非动态定时器被使不能。 状态:任意状态 事件:LLDown 新状态:Down 操作: 清除LSA的Link state retransmission list、Database summary list和Link state request list,而且非动态定时器被使不能。 状态:任意状态 事件:InactivityTimer 新状态:Down 操作: 清除LSA的Link state retransmission list、Database summary list和Link state request list。 状态:2-Way or greater 事件:1-WayReceived 新状态:Init 操作: 清除LSA的Link state retransmission list、Database summary list和Link state request list。 状态:2-Way or greater 事件:2-WayReceived 新状态:无状态转移 操作:不需要操作。 56 状态:Init 事件:1-WayReceived 新状态:无状态转移 操作:不需要操作。 10.4 是否成为Adjacency(Whether to become adjacent) 路由器与邻居中的一些子集建立adjacent。由点对点、点对多点和虚连接网络连接的路由器通常成为adjacent。在广播型和NBMA网络中,所有的路由器都与Designated Router和the Backup Designated Router成为adjacent。 adjacency-forming的决定在邻居状态机的两个地方发生。第一个是当双向通信被初始建立时,第二个是当网络中的(Backup) Designated Router的一致性改变时。如果所作的决定是不尝试建立adjacency,邻居通信状态停止在2-Way状态。 当至少一个下面情况发生时,应该与一个双向邻居建立一个adjacency: , 下层是点对点网络; , 下层是点对多点网络; , 下层是虚连接网络; , 路由器本身是Designated Router , 路由器本身是Backup Designated Router , 邻居路由器是Designated Router , 邻居路由器是Backup Designated Router 10.5 接收Hello Packet(Receiving Hello Packets) 本节解释接收Hello Packet的详细过程(参见A.3.2节中的Hello packet格式)。一般的OSPF数据包输入过程首先检查IP头和OSPF数据包头的有效性,然后,接收到的Hello packet中的Network Mask、HelloInterval和RouterDeadInterval的参数值需要和接收接口设置的值比较,任何的不匹配将导致过程的结束和数据包被丢弃,换句话说,上面参数域正是描述接入网络的设置。然而有一个例外的情况:在点对点网络和虚连接中,Hello Packet中的Network Mask应该被忽略。 接收接口连接到一个单独的OSPF区域(它可以是骨干网络)。Hello Packet中Options field的E-bit设置应该与该区域中的ExternalRoutingCapability相匹配。如果AS-external-LSAs没有扩散(flood)进入/覆盖该区域(例如区域为一个“stub”),接收的Hello Packet中的E-bit必须被清除,否则E-bit必须被重置。一个不匹配也会造成过程的停止和数据包被丢弃。Hello Packet中Options field的其他比特设置应该被忽略。 从这个角度看,建立尝试就是匹配Hello Packet的信息和某个邻居的接收接口。如果该接收接口连接的是一个广播型、点对多点或NBMA网络,发送源由Hello中IP头的IP源地址确定。如果接收接口连接的是一个点对点连接或者虚连接,发送源由Hello中OSPF数据包头的路由器ID确定。接口当前的邻居列表包含在接口数据结构中,如果找不到一个匹配的邻居结构,(例如,这是邻居被第一次检测到),创建一个新的邻居,新邻居的初始状态设为Down状态。 57 当收到的Hello Packet来自于一个广播型、点对多点或者NBMA网络的邻居,设置邻居数据结构中的邻居ID等于数据包OSPF头中的路由器ID。在这些网络的情况下,邻居数据结构的Router Priority field, Neighbor's Designated Router field和Neighbor's Backup Designated Router field也要等于接收的Hello Packet中的相应域值,改变这些值应该说明在下面步骤中的可能的用途。当收到来自一个点对点网络(但不是虚连接)的Hello,将邻居数据结构中的邻居IP地址设置为Hello数据包中的IP源地址。 接下来检查Hello Packet的其他值,产生发往邻居和接口状态机的事件。这些状态机通过运行或列表详细说明(参见4.4节)。例如,下面详细说明的是邻居状态机的一些运行,和几个受单个Hello影响的几个邻居状态转换: , 每个Hello Packet通过HelloReceived事件实现邻居状态机的运行。 , 检查Hello Packet中的邻居列表。如果列表中包含路由器本身,由2-WayReceived 事件实现邻居状态机的运行,否则由1-WayReceived事件实现运行,并且停止数据 包的处理过程。 , 接下来,如果记录了邻居Router Priority field的变化,接收接口的状态机由 NeighborChange事件安排运行。 , 如果该邻居同时声称自己为Designated Router(Hello Packet中 Designated Router field = Neighbor IP address)和packet中Backup Designated Router field的值等于“0.0.0.0”,而且接收接口处于Waiting状态,接收接口状态机由 BackupSeen事件安排运行。否则,如果邻居声称自己为Designated Router但未 曾担任过,或者没有声明是但曾经担任过,接口接口状态机由NeighborChange事 件安排运行。 , 如果邻居声明自己为Backup Designated Router(Hello Packet中 Backup Designated Router field = Neighbor IP address),而且接收接口处于 Waiting状态,接收接口状态机将由BackupSeen事件安排。否则,如果邻居声称 自己为Backup Designated Router但未曾担任过,或者没有声明是但曾经担任过, 接口接口状态机由NeighborChange事件安排运行。 在NBMA网络中,接收到一个Hello Packet,还应该向邻居发回一个Hello Packet作为响应,详见9.5.1节 10.6. 接收数据库描述包 这节解释接收(receive)数据库描述包的详细过程。收到的数据库描述包通过一般的输入包处理(Section 8.2),已经与一个邻居(neighbor)和接收接口(receiving interface)相关联。是否应该接受(accepte)数据库描述包?如果接受,如何进一步处理数据库描述包,依靠邻居的状态(upon neighbor state)。 如果accepte一个数据库描述包,包的下列fields应该保存在相应的邻居数据结构(neighbor data structure)中,并在“最近接收的数据库描述包("last received Database Description packet")”下面。保存的字段有:包的初始化(I),more (M), master(MS) bits, 可选字段(Options field),和DD序列号(sequence number)。如果从邻居接收到的两个连续的数据库描述包中,这些字段相等,则认为第二个数据库描述包是“复制的(duplicate)”,后面描述复制过程。 如果数据库描述包的接口MTU字段指示:一个IP数据报的长度超过了不分段情况下,路由器在接收端口能接收的最大值,则拒绝该数据库描述包。 58 否则,如果邻居state 如下: Down The packet should be rejected. Attempt The packet should be rejected. Init(马上进行2,WayReceive事件、决定是否建立邻接 邻居状态机应该实施事件2-WayReceived。这将立刻引起向2-Way或ExStart状态的转变。如果新状态是ExStart,当前包应该通过下面讲的在ExStart新状态下继续处理。 2-Way 包被忽略.数据库描述包只用于建立邻接。[7] ExStart 如果接收到的包与下列情况之一匹配,则邻居状态机执行事件 NegotiationDone(引起状态转移到Exchange),将包的可选择字段记录在邻居结构的Neighbor Options field,而且包作为下一个包被accepted,留做将来处理(见下面)。否则,包被忽略。 * The initialize(I), more (M) and master(MS) 比特被设置, 包内容为空,而且邻居的Router ID 大于路由器自己的ID 。这种情况下,该路由器为Slave。将master/slave比特设置为slave,并将邻居数据结构的DD序列号设置为master指定的号。 * The initialize(I) and master(MS) 比特未设置,包的DD序列号等于 邻居数据结构的DD序列号(表示确认),且邻居Router ID 小于路由器自己的ID 。此时该路由器为Master。 Exchange 当路由器是Master时,丢弃复制的数据库描述包,导致slave重传已发送过的the last Database Description packet。否则(包不是复制的): * 如果“MS“比特状态与连接的主/从状态不一致,则发生邻居事件“序列号不匹配”(SeqNumberMismatch),并停止包的处理。 * 如果设置“I“比特,则发生邻居事件SeqNumberMismatch,并停止包的处理。 * 如果包的选择字段指示一个可选OSPF能力设置,与先前从邻居接收到的不同(记录在邻居结构的Neighbor Options field),则发生邻居事件SeqNumberMismatch,并停止包的处理。 * 数据库描述包必须根据包的DD序列号指示依次处理。如果路由器是主路由器,接收到下一个包的DD序列号应该等于邻居数据结构(neighbor data structure)中的DD序列号。如果该路由器是‘从’路由器,接收到下一个包的DD 序列号应该比存储在邻居数据结构中的DD 序列号大“1”。如果包是按顺序的下一个,应该accepted包并按下述方法处理包。 * 否则,发生邻居事件SeqNumberMismatch,并停止包的处理。 Loading or Full(装载或满载) 在此状态,路由器已经发送和接收了一个完整连续的数据库描述包,该接收包是应该被唯一复制的数据库描述包(see above )。尤其是,该包的选择字段应该与邻居先前指定的可选OSPF capabilities相匹配(stored in the neighbor structure's Neighbor Options 59 field)。而接收到的任意其他包,包括设置“I”比特的包,都将发生邻居事件SeqNumberMismatch,[8]主路由器丢弃(重复)复制包。‘从’路由器必须用重复已发送的last数据库描述包来响应(重复)复制的数据库描述包。 当路由器accepts一个接收到的顺序下一个数据库描述包,应该按下述方法处理包的内容。对列表中的每一个LSA, 检查LSA的LS类型有效性。如果LS类型未知(例如,该规范中,并不是LS类型1—5都定义),或这是一个AS-external-LSA (LS type = 5)且邻居与Stub区域(stub area)有关,则发生邻居事件SeqNumberMismatch,并停止包的处理。否则,路由器在自己的数据库中查找LSA,看看是否已经有LSA的一个实例。如果(数据库中)没有一个实例,或如果数据库copy(Less Recent)是最新的(see Section 13.1),则将此LSA 装入链路状态请求list,便于在链路状态请求包中被请求(立即或稍后)。 当路由器accepts一个接收到的顺序下一个数据库描述包,根据他是主或从,分别执行下列操作: 主:邻居数据结构中的DD序列号加1。如果路由器已经发送他的完整序列的数据库描述包,且恰好收到“M”比特置“0”的包,则发生邻居事件ExchangeDone。否则,他应该向“从”发送一个新数据库描述包。 从:将邻居数据结构中的序列号设置为接收到包的DD 序列号。‘从’必须发送一个数据库描述包作为回应。如果接收包中‘M’比特为‘0’,且包是由‘从’发送的,则发生邻居事件ExchangeDone。‘从’总是先于‘主’发生这一事件。 10.7 接收链路状态请求包 本节解释对接收的链路状态请求包的处理细节。接收的链路状态请求包指定了一个LSAs表,其中包括希望接收的邻居。如果邻居处于Exchange, Loading, or Full状态,则应该accepte链路状态请求包。在其他状态,包被忽略。 应该在路由器的数据库中查找(链路状态请求包中指定的)每一个LSA,并复制到传送给邻居的链路状态更新包中。这些LSAs不能放在邻居的链路状态重传表中。如果有一个LSA在数据库中未找到,可能是数据库交换程序发生了某些错误,于是,发生邻居事件BadLSReq。 10.8 发送数据库描述包 本节描述如何向邻居发送数据库描述包。数据库描述包的端口MTU字段设置为在不分段情况下,发送端口能发送的IP数据报的最大长度。Internet中通用的MTUs在[RFC22] Table 7-1中描述。通过虚链路发送时,数据库描述包中的端口MTU应设置为‘0’。 路由器的‘可选OSPF能力’,放在数据库描述包的选择字段传送给邻居。经过数据库交换和扩散过程,路由器应保持可选能力的设置不变。如果由于某些原因,路由器的可选能力发生改变,则回复邻居到ExStart状态,重启数据库交换程序。在这个规格中定义了一个可选能力(see Sections 4.5 and A.2)。当且仅当连接的网络属于non-stub area时,设置‘E’比特。可选字段中未被识别的比特置‘0’。 60 发送数据库描述包依赖邻居的状态。在ExStart状态,路由器发送空的数据库描述包,并设置‘I’、‘M’、‘MS’比特。以RxmtInterval seconds为时间间隔重传这些包。 在Exchange状态,数据库描述包只包含路由器数据库中链路状态信息的摘要。该区域链路状态数据库中的每一个LSA(at the time the neighbor transitions into Exchange state),都列在邻居数据库摘要表中。每一个新的数据库描述包从邻居数据结构中复制他的DD序列号,并描述当前数据库摘要表的顶部。当先前的包得到确认后,从数据库摘要表汇总移走条款(Items)。 在Exchange状态,决定何时发送一个数据库描述包依赖该路由是‘主’或‘从’: ‘主’: 数据库描述包在下列情况发送: a) ‘从’回应DD序列号,确认先前的数据库描述包,或 b) 在未确认的情况下,RxmtInterval seconds 消失(elapse),此时,先前数据库描述 包需重传。 ‘从’ 发送数据库描述包只是作为接收到来自‘主’的数据库描述包的响应。如果从‘主’发来的数据库描述包是新的,则发送一个新的数据库描述包,否则,发送先前的数据库描述包。 在Loading and Full状态,‘从’必须发送其前一个数据库描述包,来响应从‘主’发来的复制的数据库描述包。为此‘从’必须等到RouterDeadInterval seconds,才能释放(freeing)last数据库描述包。在此间隔之后,接受从‘主’发来的数据库描述包将发生邻居事件SeqNumberMismatch。 10.9 发送链路状态请求包 当邻居处于Exchange or Loading状态时,链路状态请求表包含一个LSAs的表,需要从邻居获得这些LSAs。为请求这些LSAs,路由器将链路请求表的beginning打包在一个链路状态请求包中,向邻居发送。 当邻居用适当的链路状态更新(Link State Update)包响应这些请求后,链路状态请求表被截短(truncated),并发送一个新的链路状态请求包。这个过程一直持续到链路状态请求表变空。链路状态请求表中的LSAs已经被请求,但还未接收到,打包在链路状态请求包重传,以 RxmtInterval为时间间隔重传。在任何时间,最多只能有一个链路状态请求包outstanding。 当链路状态请求表变空,而且邻居处于Loading状态(i.e., 已完成向邻居发送和从邻居接收数据库描述包的过程)时,发生邻居事件Loading Done。 10.10 举例 图14是一个邻接表格的例子。路由器RT1和RT2均连接到广播网。假设RT2是网络指定的路由器(Designated Router),且RT2的Router ID高于RT1(主/次)。 每个路由器发现邻居状态变化的过程如图所示。 图14开始部分,RT1连接网络的端口可操作。尽管他不知道Designated Router或其他邻居的ID,他还是开始发送Hello Packets。RT2 ‘听’到hello(moving the neighbor to Init state)后,在他的下一个Hello Packet中指明自己是Designated Router,并受到来自RT1 61 的Hello Packet。这引到导RT1进入ExStart状态. RT1 开始宣称自己的‘主’。当发现RT2是真正的‘主’ (because of RT2's higher Router ID),RT1转为‘从’状态,并采纳邻居的DD 序列号。然后交换数据库描述包,master (RT2) polls ,slave (RT1) 响应。 +---+ +---+ |RT1| |RT2| +---+ +---+ Down Down Hello(DR=0,seen=0) ------------------------------> Hello (DR=RT2,seen=RT1,...) Init <------------------------------ ExStart D-D (Seq=x,I,M,Master) ------------------------------> D-D (Seq=y,I,M,Master) ExStart <------------------------------ Exchange D-D (Seq=y,M,Slave) ------------------------------> D-D (Seq=y+1,M,Master) Exchange <------------------------------ D-D (Seq=y+1,M,Slave) ------------------------------> ... ... ... D-D (Seq=y+n, Master) <------------------------------ D-D (Seq=y+n, Slave) Loading------------------------------> LS Request Full ------------------------------> LS Update <------------------------------ LS Request ------------------------------> LS Update <------------------------------ Full Figure 14: An adjacency bring-up example 当双方的poll和 associated response中‘M’比特off后,数据库描述包序列结束。 62 在这个例子中假设RT2完全工作在数据库。此时RT2立刻进入Full状态。RT1 接收到数据库需要的更新部分后进入Full状态。这可通过发送链路状态请求包,接收响应的链路状态更新包完成。 11( 路由表结构 路由表结构包含转发一个IP数据包到目的地址所需的全部信息。路由表项目描述所收集的到某个特定目的地址的最佳路径。当转发一个IP数据包时,路由表为包的IP目的地地查找最佳匹配。匹配路由表提供通往目的地址的下一跳。OSPF还提供实际存在的缺省路由器(Destination ID = DefaultDestination, Address Mask = 0x00000000).若存在缺省路由,它匹配所有的IP目的地址(尽管其它匹配项目会更好)。发现路由表IP目的地的最佳匹配项目的方法,在11.1描述 每个路由器有一个路由表。Sections 11.2 and 11.3 描述了两种路由表实例。路由表的构造在第16节讨论。 下面定义路由表中的项目字段。首先描述项目目的地址字段。 Destination Type 目的地址类型是“网络”或“路由器”。转发IP数据业务时,只用网络项目。路由器路由表项目只用于构造路由表过程的中间步骤。 一个网络是一个IP地址范围,可以转发这个范围内的IP数据业务。包括IP网络(class A,B,orC),IP子网、IP超网和单一IP主机。The default route also falls into this category. 路由器项目为区域边界路由器和AS边界路由器保留。区域边界路由器的路由表项目用于计算区域间的路由(see Section 16.2),保持虚链路配置(see Section 15).AS边界路由器的路由表项目用于计算AS外部路由(see Section 16.4). 目的地址ID 为目的地址的标识或名字。依赖于目的地址类型。对网络而言,标识是联合IP地址,对路由器而言标识是OSPF路由器ID。[9] 地址掩码 只对网络定义地址掩码。网络的IP地址与地址掩码共同定义一个IP地址范围。对IP 子网,地址掩码作为子网掩码。对主机路由,掩码是全‘1’(0xffffffff)。 可选能力 当目的地址是一个路由器,该字段指示目的地址路由器支持可选的OSPF能力。本规范定义的可选能力只是处理AS-external-LSAs的能力。关于OSPF可选能力的进一步讨论,参见4.5节。 基于路径所属的OSPF区域的不同,到目的地的路径可能多样化。这意味着到同一目的地,可能有多个路由表项目,这与下一个字段的取值有关。 区域(Area) 该字段指示这样的区域,其链路状态信息已经导致(lead to)路由表项目的路径收集。 63 这称为项目联合区域。对AS外部路径,此字段不定义。对路由器型的目的地址,可能与所连接的每个Area(Router有多个Area)有多个独立的路径(因此路由表项目也是独立的)。例如,当两个区域边界路由器为multiple区域共同拥有时(R3在Area 1和主干);对网络型的目的地,只保留与最佳区域(提供可选取路由的区域)连接的多个路径(可能等价)。 其余的路由表项目描述到目的地址路径的设置。其次的字段属于作为一个整体的多个路径。换句话说,包含在路由表项目中的每一个路径具有相同的路径类型和费用。 路径类型 用于到目的地址路由业务的路径类型有4种,以优先权递减的顺序排列如下:区域内,区域间,外部1型和外部2型。区域内路径指目的地址在路由器所属的区域内。区域间路径指目的地址在其他OSPF区域。这可通过检查接收的summary-LSAs得知。AS外部路径是目的地址在AS外部的路径。通过检查接收到的AS-external-LSAs得知。 费用(Cost) 到目的地址路径的链路状态费用。除了外部2型路径外,对所有的其他路径,费用描述了整个路径的费用。对外部2型路径,该字段描述了到AS外部路径的一部分费用,总的费用是组成链路的路径的费用之和。 Type 2 cost 只对外部2型路径有效。对这类路径,该字段指示外部那一部分路径的费用。这个费用已经由AS边界路由器广播过,是整个路径费用中最重要的部分。例如,Type 2 cost为5的外部路径比Type 2 cost为10 的外部路径更受欢迎,而不管两路径内部的费用是多少。 Link State Origin 只对区域内路径有效,该字段指示直接到目的地址的参考LSA(router-LSA or network-LSA)。例如,若目的地址是一个传输网,该字段就是传输网的network-LSA。若目的地址是一个stub网,该字段就是附加路由器的router-LSA。LSA是计算最短路径树期间发现的。(see Section 16.1). 对目的地址,可能有若干个参考LSAs,然而,a tie-breaking scheme 总是将选择减少到一个LSAs。OSPF协议不用Link State Origin字段,该字段用于OSPF's Multicast routing extensions (MOSPF)中路由表的计算。 当存在到目的地址的若干个相同类型且等费用的路径时(called elsewhere "equal-cost" paths),他们被保存在一个单独的路由表项目中。每一个"equal-cost"路径由下列字段区别: Next hop 当转发业务到目的地址时用路由器出口。在broadcast, Point-to-MultiPoint and NBMA网络中,下一跳包含去往目的地址路径中下一个路由器的IP地址(如果有)。 广播路由器(Advertising router) 只对区域间和AS外部路径有效。该字段指示路由器ID,引导到该路径的summary- LSA 或AS-external-LSA是由这些路由器广播的。 64 11.1 路由表查找 (Routing table lookup) 当接收到一个IP数据包,OSPF路由器就在路由表项目中查找去往包目的地址的最佳匹配。路由表项目则提供输出端口和下一跳路由器来转发IP包。本节描述在路由表项目查找最佳匹配的过程。 查找开始前,应该将"discard"路由表项插入到路由器的每个“活跃”区域地址范围路由表中(see Section 3.5). (一个区域范围被认为是“活跃”的,如果该范围包括一个或多个域内路径可达的网络)。"discard"项目的目的地址是有与其相连的“活跃”地址范围描述的多个地址,而且每个“活跃”项目的路径类型设置为“域间”("inter-area")。[10] 注意下面描述的步骤可能不能产生最佳路由表项,(如所有现存的路由表因为某些原因被剪除),或最佳路由表项可能是上面所述的“Discard”路由表项,在这些情况下,包的Ip目的地址认为不可达,代替进行转发,包将被放弃并发出不可达的ICMP目的地址消息给包的源地址。 1、 从路由表中选择全部匹配的路由表项,每个路由表项描述一个(或多个)IP地 址范围的路径,如果数据包的IP地址在一个表项的IP地址范围内,则路由表 项是匹配的,(多个表项与数据包匹配是可能的,如缺省路由与所有包匹配) 2、 减少匹配的路由表项到那些具有优先权的Path,Type(的表项),见11节。OSPF 有四个路径层,内部路由(Intra)优先权最大,然后依次是域间(Inter)、Type 1的外部(External)和Type 2 的外部路径 3、 选择提供最佳匹配的其余路由表项,也就是说选择具有最窄IP地址范围, 【11】,如:具有Address/Mask对为(128.185.1.0,0xffffff00)的表项比 128.185.0.0,0xffff0000)的对更详细,缺省路由是最不详细的,因为它和所有 的目的地匹配。 路由表可能有几个项目与目的地址匹配。此时,匹配最长的路由表项目被认为是“最佳匹配”。寻找最佳匹配的另一种方法是选择这样的项目,他指定的IP地址范围最小。例如,两个项目的地址/掩码对分别为(128.185.1.0, 0xffffff00) 和(128.185.0.0, 0xffff0000),则认为前者是最佳匹配。默认路由因为匹配所有目的地址,所以被认为是最不匹配的路由。(需注意的是,对任何单路由表项目,可能会有多路径的情况。这种情况下的计算参见Sections 16.1, 16.2, and 16.4 总能找到具有最优惠路径类型的路径, 如Section 11中描述)。 如果没有匹配的路由表项目,或最佳匹配项目在“discard”项目上,则认为包的IP目的地址不可到达。该包被丢弃,并向包的源地址发送一个ICMP目的地址不可达的信息。 11.2 无区域的路由表实例 图2是一个自治系统图。未配置OSPF区域。每个输出接口(outbound interface)显示一个单个metric。Router RT6'的路由表计算过程如Section 2.2.中描述。结果路由表如‘表12’所示。目的地址类型为缩写:‘N’—网络;‘R’—路由器。 此例中没有多个相同费用最短路径的实例。另外,无区域的情况下,没有域间路径。 路由器RT5和RT7是AS边界路由器。域内路由计算到RT5和RT7。允许RT5和RT7计算到被广播的目的地址的外部路由(i.e., Networks N12, N13, N14 and N15)。假设RT5和RT7广播的所有AS-external-LSAs是域外1型metrics.结果,计算得到到目的地址N12-N15的域外1型路径。 65 Type Dest Area Path_Type Cost Next Adv. Hop(s) Router(s) ____________________________________________________________ N N1 0 intra-area 10 RT3 * N N2 0 intra-area 10 RT3 * N N3 0 intra-area 7 RT3 * N N4 0 intra-area 8 RT3 * N Ib 0 intra-area 7 * * N Ia 0 intra-area 12 RT10 * N N6 0 intra-area 8 RT10 * N N7 0 intra-area 12 RT10 * N N8 0 intra-area 10 RT10 * N N9 0 intra-area 11 RT10 * N N10 0 intra-area 13 RT10 * N N11 0 intra-area 14 RT10 * N H1 0 intra-area 21 RT10 * R RT5 0 intra-area 6 RT5 * R RT7 0 intra-area 8 RT10 * ____________________________________________________________ N N12 * type 1 ext. 10 RT10 RT7 N N13 * type 1 ext. 14 RT5 RT5 N N14 * type 1 ext. 14 RT5 RT5 N N15 * type 1 ext. 17 RT10 RT7 Table 12: The routing table for Router RT6 (no configured areas). 11.3 有区域的路由表实例 一个OSPF区域配置如图6所示。 RT4的路由表描述该区域的配置,RT4至Area 1有连接且和Backbone有连接。从RT4 看来,AS就象图7和图8所示的一连串的图表。结果路由表如表13所示。 RT5和RT7是AS 边界路由器。RT3、4、7、10、11是区域边界路由器。需注意,区域 边界路由器RT3有两个路由项目,因为他与RT4共用两个区域(Area 1 and the Backbone). Backbone路由由全部区域边界路由器计算。用于确定域间路由。需注意,所有域间路 由都与Backbone有关;此时计算路由器就是区域边界路由器自身。路由信息在区域边界被 缩短。这个例子中,我们假设Area 3已经定义,因此当广播进入Backbone时(by Router RT11),网络N9-N11和到H1的主路由都被压缩为单个路由。注意该路由的费用是单个部分 费用的最大植。在RT10和RT11之间有一个虚链路配置。若没有这个虚链路配置,RT11就 不能为网络N9-N11和 主机H1广播到Backbone的 路由,在RT4的路由表中,将没有这些网 络的项目。该例中到网络N12有两条等价的路径,他们的下一跳相同(Router RT5). 如果在RT4和RT3之间培植一个虚链路,则RT4的路由表将得到改善(例如,路由表中 的一些路径将变短)。新的虚链路与区域边界路由器RT3(in Table 13)的第一个项目相连 (通过Area 1的一个域内路径)。虚链路费用为1。虚链路会引起路由表项目改变,如Table 14。 66 Type Dest Area Path Type Cost Next Adv. Hops(s) Router(s) __________________________________________________________________ N N1 1 intra-area 4 RT1 * | N N2 1 intra-area 4 RT2 * |Router Table N N3 1 intra-area 1 * * |IN Area 1 N N4 1 intra-area 3 RT3 * | R RT3 1 intra-area 1 * * | __________________________________________________________________ N Ib 0 intra-area 22 RT5 * | N Ia 0 intra-area 27 RT5 * | R RT3 0 intra-area 21 RT5 * |Router Table R RT5 0 intra-area 8 * * |IN Backbone R RT7 0 intra-area 14 RT5 * | R RT10 0 intra-area 22 RT5 * | R RT11 0 intra-area 25 RT5 * | ___ ____ ____ ____ ____ ____ _____ ____ ____ ____ ____ ___| N N6 0 inter-area 15 RT5 RT7 | N N7 0 inter-area 19 RT5 RT7 | N N8 0 inter-area 18 RT5 RT7 | N N9-N11,H1 0 inter-area 36 RT5 RT11 | __________________________________________________________________ N N12 * type 1 ext. 16 RT5 RT5,RT7 |2条等值路局 N N13 * type 1 ext. 16 RT5 RT5 | N N14 * type 1 ext. 16 RT5 RT5 | N N15 * type 1 ext. 23 RT5 RT7 | Table 13: Router RT4's routing table in the presence of areas. Type Dest Area Path Type Cost Next Adv. Hop(s) Router(s) ________________________________________________________________ N Ib 0 intra-area 16 RT3 * N Ia 0 intra-area 21 RT3 * R RT3 0 intra-area 1 * * R RT10 0 intra-area 16 RT3 * R RT11 0 intra-area 19 RT3 * ________________________________________________________________ N N9-N11,H1 0 inter-area 30 RT3 RT11 Table 14: Changes resulting from an additional virtual link. 67 12(链路状态广播(LSAs) AS 中的每个路由器发布一个或多个LSAs。本节定义5种不同类型的LSAs,LSAs在Section 4.3描述。搜集LSAs表格形成链路状态数据库。每个LSA类型有其独立的功能。Router-LSAs 和 network-LSAs描述一个区域的路由器和网络是如何互相关联的。Summary-LSAs提供一种缩短区域路由信息的方法。AS-external-LSAs提供一种通过AS透明广播externally-derived路由信息的方法。 每个LSA包含一个标准的2 0字 个人自传范文3000字为中华之崛起而读书的故事100字新时代好少年事迹1500字绑架的故事5000字个人自传范文2000字 节头部。LSA头部在下面讨论。 比特 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 LS经历时间 * 选项 LS类型 & 链路状态ID & 广播路由器 & * LS序列号 LS校验和 * 长度 ――――――― 公共LS头 ―――――― 12.1 LSA头部 LSA头部包含LS类型、链路状态ID和广播路由器字段。三字段的联合唯一地标示LSA。 同时,AS中一个LSA的可能存在多个实例(Instance)。必须确定哪个实例是最新的。通过检查LS顺序,LS校验和,LS经历时间字段即可确定。这些字段也包含在20字节的LSA头部。 几个类型的 OSPF packet列于 LSAs中.当实例不重要时,LSA只提交其LS类型,链路状态ID和广播路由器(见链路状态请求包)字段。否则,LS序列号,LS经历时间和LS校验和都必须提交。下面详细介绍LSA头部字段。 12.1.1 LS经历时间 该字段是以秒为单位计算的LSA经历时间。作为16比特无符号整数处理。LSA发布时,经历时间设置为‘0’。 在‘扩散’过程的每一跳,必须将经历时间增加InfTransDelay1。LSAs在每个路由器的数据库中也老化(are also aged as they are held in each router's database.)。 LSA的经历时间增长不能超过MaxAge. 计算路由表时不考虑具有MaxAge的LSAs。当LSA的经历时间首次达到MaxAge,他将重新扩散。具有MaxAge的LSA,当不再需要他保持数据库的同步时,最终从其他数据库中删除该LSA。 关于LSAs经历时间的其他信息,查阅Section 14。 当路由器接收到两个LSA实例,两个都有相同的LS序列号和LS校验和标识时,路由器检查LS经历时间。具有MaxAge经历时间的实例总是作为最新的被接收;这准许尽快从路由域中删除老的LSAs ,if the ages differ by more than MaxAgeDiff, 具有较小经历时间的实例作为最新的被接收。 [12]详细内容参见 Section 13.1 。 68 12.1.2 选项(Options) LSA头部的选项字段指示哪个可选能力与LSA有关。OSPF的可选能力在Section 4.5描述。这种规格定义了一种可选能力,用E-比特表示。未用比特置‘0’。 E-比特表示OSPF的外部路由能力(ExternalRoutingCapability)。在与Backbone和non-stub areas (see Section 3.6)相关联的所有LSAs中,E-比特均要设置。在所有AS-external-LSAs中也要设置。在所有与的stub area有关的router-LSAs,network-LSAs and summary-LSAs中,E比特需重置。对所有的LSAs,设置E比特只是为了通知,并不影响路由表的计算。 12.1.3 LS类型 类型字段指示LSA的格式和功能。不同类型的LSA有不同的名字(e.g., router-LSAs or network-LSAs). 本备忘录定义所有的LSA类型,除了AS-external-LSAs (LS type = 5),都只在单个区域内传播。AS-external-LSAs 在除stub areas (see Section 3.6)之外的整个AS内传播。表15简要的描述了每个LSA。 LS Type LSA description ________________________________________________ 1 router-LSAs.描述收集的路由器接口状态,详细信息参见Section 12.4.1. 2 network-LSAs.包括一个同网络相连的所有路由器的列表。详细信息参见 Section 12.4.2。 3 or 4 的summary-LSAs.描述域内路由,能在区域边界聚合路由信息。由区域边界 路由器发布,类型3 summary-LSAs描述到网络的路由,类型为4的 summary-LSAs描述到AS boundary 路由器的路由。 5 AS-external-LSAs.由AS边界路由器发布,描述到AS外部目的地址的路由 AS-external-LSA可以描述AS的一个缺省路由 。 Table 15: OSPF link state advertisements (LSAs) 12.1.4 链路状态ID 标识LSA描述的路由域的一个片。对应LSA的类型,链路状态ID代表的值如表16所示: LS Type Link State ID _______________________________________________ 1、 初始路由器的Router ID 2、 网络DR(Designated Router)的IP 接口地址 3、 目的网络的IP地址 4、 描述AS边界路由器的 Router ID 5、 目的网络的IP address. Table 16: The LSA's Link State ID. 实际上,类型3 summary-LSAs (LS type = 3)和AS-external-LSAs (LS type = 5),链路状态ID附加有一个或更多的目的网络“主机”比特设置。例如,当用掩码255.0.0.0,为网络10.0.0.0发布一个AS-external-LSA时,链路状态ID 可被设置为从10.0.0.0到 69 10.255.255.255 范围内的任意值(虽然10.0.0.0在任何时候都可以用)。任意设置某个主机比特,就允许一个路由器为两个具有同一地址但掩码不同的网络发布单独的互不相关的LSAs。细节参见Appendix E。 当LSA描述一个网络(LS type = 2, 3 or 5)时,从包含在LSA中的网络/子网掩码,可以容易的获得网络的IP地址。当LSA描述路由器时(LS type = 1 or 4),链路状态ID描述的就是路由器的‘OSPF Router ID’。 当AS-external-LSA (LS Type = 5)描述一个缺省路由时,他的链路状态ID 设为DefaultDestination (0.0.0.0)。 12.1.5 广播路由器(Advertising Router) 该字段指示发布LSA的OSPF Router ID。对router-LSAs,该字段与链路状态ID字段完全相同。Network-LSAs是由网络的目的路由器发布的。Summary-LSAs由区域边界路由器发布。AS-external-LSAs由AS边界路由器发布。 12.1.6 LS序列号 序列号字段为有符号32比特整形数。用于检测旧的和复制的LSAs.序列号空间是linearly ordered.。具有最大序列号(作为有符号的32比特整形数进行比较)的LSA是最新的 。可用2**31描述序列号空间。 序列号 -N(0x80000000)保留(未用)。-N + 1 (0x80000001)为最小的序列号(因此是最老的);这个序列号常常用于InitialSequenceNumber。路由器第一次发布任何LSA时,用InitialSequenceNumber.以后,每次路由器发布一个新的LSA实例,序列号加1。当序列号增至大于最大值N-1(0x7fffffff; also referred to as MaxSequenceNumber)时,LSA的当前实例必须首先从路由域清除(flushed)。一旦所有的邻居确认了扩散(flood),就可以发布一个具有InitialSequenceNumber序列号的新实例。 12.1.7 LS checksum 该字段是LSA整个内容的校验和,不包括LS经历时间。这样使得增加LS经历经历时间时,不必更新校验和。LSA头部还包括LSA长度(以字节计);LSA长度减去LS经历时间字段长度(2个字节)就是参加校验和的数据个数。 校验和用于检查LSA中的数据误码。LSA扩散或在路由器内存中都可能发布误码。LS校验和字段为非零;出现零值则认为校验和失败。或者说,校验和计算为不可选项。 在两种情况下,需证明校验和:(1)接收到链路状态更新包;(2)链路状态数据老化期间。在这两种情况下,如检验校验和失败,分别导致两种行为。细节参见第13和14节。 每当LS序列号识别两个LSA实例相同时,需要检验LS校验和字段 。如果校验和不同,则认为LS校验和大的实例是最新的。细节参见Section 13.1。 70 12.2. 链路状态数据库(The link state database) 路由器为他所属的每个区域,拥有分别的数据库。属于同一区域的所有路由器拥有该区域的统一的数据库。 每个区域的数据库总是分别处理。每个区域的最短路径是分别计算的(see Section 16)。区域链路状态数据库的组件只在本区域扩散。最后,当发布一个邻接(区域A)时,只有区域A的数据库在两个路由器之间synchronized。 区域数据库包括router-LSAs,network-LSAs和summary-LSAs(都列表在区域数据结构中)。另外,外部路由(AS-external-LSAs)包含在所有的非Stub(non-stub)区域数据库(see Section 3.6)。 OSPF的一个操作必须能访问一个区域数据库的individual pieces。此查询功能基于一个LSA的LS类型,链路状态ID和广播路由器。[14]有一个关于数据库中每个LSA的最新实例(the most up-to-date)。另外,用此查询功能,路由器能决定他发布的LSA中是否有自己,如果有,可查到LS序列号。 下列情况时,将一个LSA添加到一个路由器数据库:(1)扩散过程中接收到的LSA;(2) 路由器自己发布的LSA(Section 12.4)。下列情况时,从一个路由器数据库删除一个LSA:(1) 扩散期间,已被一个新实例重写的LSA(Section 13);(2) 路由器发布了一个(他自己发布的LSA的)新实例(Section 12.4);(3) LSA的经历时间超时,从路由域中清除(Section 14).每当从数据库中删除一个LSA时,必须从所有邻居的链路状态重传列表中移走该LSA(see Section 10)。 12.3. 服务类型描述(Representation of TOS) OSPF当前版本的向后兼容能力规格([Ref9]), TOS—--这一特有信息可包含在router-LSAs, summary-LSAs 和 AS-external-LSAs中。OSPF LSAs 中TOS的编码规格如表17所示。该表说明了OSPF编码与IP包头的TOS字段(defined in [Ref12])的对应关系。OSPF编码用十进制整数表示,IP包头的TOS字段用在[Ref12]中使用的二进制TOS值表示。 SPF encoding RFC 1349 TOS values __________________________________________ 0 0000 normal service 2 0001 minimize monetary cost 4 0010 maximize reliability 6 0011 8 0100 maximize throughput 10 0101 12 0110 14 0111 16 1000 minimize delay 18 1001 20 1010 22 1011 24 1100 71 26 1101 28 1110 30 1111 Table 17: Representing TOS in OSPF. 12.4 发布LSAs 一个路由器进入任何给定的OSPF区域,都要发布单独的LSAs。每个路由器发布一个router-LSA.如果路由器是区域中任何网络的代表路由器(DR),他将为这些网络发布network-LSAs。 区域边界路由器为每个已知的域间目的地址,发布一个单独的summary-LSA。AS边界路由器为每个已知的AS外部目的地址,发布一个单独的AS-external-LSA。每次广播一个目的地址,这样,可以扩散任何单个路由器的变化,而不必重新扩散整个路由集合。在扩散期间,一个单个的链路状态更新包可携带多个LSAs。 例如,考虑图6中RT4。他是一个区域边界路由器,有一个到区域1的连接,和一个到骨干网的连接。RT4发布5个不同的LSAs,进入骨干网(一个router-LSA, 每个网络N1-N4各一个summary-LSA)。RT4还将发布8个不同的LSAs进入区域1(一个router-LSA,7个 summary-LSAs,图7所示)。如果RT4已经被选举为网络3的代表路由器(DR),他还将为N3发布一个network-LSA进入区域1。 在同一个图中,RT5将发布3个不同的AS-external-LSAs (one for each of the networks N12-N14)。这些AS-external-LSAs 将扩散到整个AS,假定没有区域配置为Stub网。然而,如果区域3已经配置为一个Stub区域,则到网络N12-N14的AS-external-LSAs将不会扩散到区域3(见Section 3.6)。而是RT11发布一个缺省的summary-LSA,将其扩散到区域3(see Section 12.4.3).这通知区域3的所有内部路由器将他们的外部业务发送给RT11。 每当发布一个LSA的一个新实例,他的LS序列号加1,LS经历时间设为0,计算LS校验和,把LSA附加到链路状态数据库,并扩散到适当的接口。安装LSA到链路状态数据库的细节参见Section 13.2。关于扩散新发布的LSAs的细节,见Section 13.3。 以下10种事件能引起发布一个LSA的一个新实例: (1) 路由器自己发布的LSAs 的LS 经历时间字段达到了LS更新时间( LSRefreshTime)。 此时,发布LSA的一个新实例,尽管LSA的内容(apart from the LSA header)是相同 的。这保证所有LSAs的发布周期不变。LSAs 周期性的更新是链路状态算法所需要的。 唯一描述不可达目的地址的LSAs不必刷新,而应从路由域中清除(see Section 14.1). 当需要由LSA的变化描述某个事件时,发布一个新的LSA。然而,在MinLSInterval 期间,不能发布两个相同的LSA实例。这可能要求由 up to MinLSInterval ,来延迟 下一个实例的发布。当且仅当新LSA的内容不同时,这些事件应引起发布一个新LSA: (2) 一个接口状态的变化(see Section 9.1).这时,需要发布一个新的router-LSA实例。 (3) 一个连接到网络的DR的变化。应发布一个新的router-LSA。而且,如果该路由器自身 是现在的DR,他还应发布一个新的network-LSA。如果该路由器自身不再是DR,他为 网络曾发布的任何network-LSA,都应从路由域中清除。(see Section 14.1). (4) 一个邻居路由器改变to/from FULL 状态。需要发布一个新的router-LSA实例。而且, 如果该路由器自身是连接到网络的DR,他还应发布一个新的network-LSA。 下列4种事件仅与区域边界路由器有关: 72 (5) 路由表中,增加/删除/修改一个域内路由。将在每个相连的网络中,引起发布一个 summary- LSA (为该 route)。(but NEVER for the Backbone). (6) 路由表中,增加/删除/修改一个域间路由。将在每个相连的区域中,引起发布一个 summary- LSA (为该 route)。(but NEVER for the Backbone). (7) 路由器变为一个区域的新连接。该路由器必须为路由器的路由表中所有相关的域内和 域间路由,发布summary-LSAs进入新的相连区域。细节参见Section 12.4.3。 (8) 当路由器的配置虚链路状态改变时,应向虚链路的转换区域(see the discussion of the router-LSA's bit V in Section 12.4.1)发布一个新的router-LSA,同样需向骨 干区域发布一个新的router-LSA。 最后两个事件只与AS 边界路由器(and former AS boundary routers)有关 (9) 一个外部路由的改变,该外部路由是由外部路由协议(如BGP)获得的。这引起一个 AS 边界路由器发布一个新的AS-external-LSA实例。 (10) 一个路由器不再是一个AS边界路由器,或许在重启之后。这时,路由器应清除他先 前发布的所有AS-external-LSAs。这些 LSAs 可以通过Section 14.1中规定的未到经 历时间程序清除。 下面详细解释每种LSA的结构。通常,这些章节描述LSA本身的内容(例如,20字节LSA头部后面的部分).有关LSA头部构造的信息,参见Section 12.1。 12.4.1 路由器LSAs( Router-LSAs) 一个路由器向他所在的每个区域发布一个Router-LSAs。这样一个LSA描述到区域的路由器链路状态集。不久,LSA 通过特定的区域扩散。 路由器LSAs的格式如Appendix A (Section所示。A.4.2)。 LSA的前20字节包括公共LSA头部(在Section 12.1中讨论)。router-LSAs的LS类型值=1。路由器通过在router-LSAs中设置适当的比特(分别设置bit B and bit E,)来指示自己是否一个区域边界路由器或是否一个AS边界路由器。这使路由表中能存储到这些类型路由器的路径,以便summary-LSAs and AS-external-LSAs 的后续处理。当路由器活跃于两个或更多的区域时,尽管当前不属于OSPF骨干区域,都应设置比特B。Stub(stub)区域的router-LSA不设置比特E(Stub区域不包含AS边界路由器)。 另外,当且仅当路由器是一个或多个以区域A作为转换(Transit)区域的邻接虚链路的终点时,为区域A设置比特V。设置V比特,可以使区域A中的其他路由发现该区域是否支持业务量(see TransitCapability in Section 6)。 73 .................................... . 192.1.2 Area 1 . . + . . | . . | 3+---+1 . . N1 |--|RT1|-----+ . . | +---+ \ . . | \ _______N3 . . + \/ \ . 1+---+ . * 192.1.1 *------|RT4| . + /\_______/ . +---+ . | / | . . | 3+---+1 / | . . N2 |--|RT2|-----+ 1| . . | +---+ +---+8 . 6+---+ . | |RT3|----------------|RT6| . + +---+ . +---+ . 192.1.3 |2 . 18.10.0.6|7 . | . | . +------------+ . . 192.1.4 (N4) . .................................... Figure 15: Area 1 with IP addresses shown router-LSA描述到区域的路由工作连接(i.e., interfaces or links)。依据所在网络 的种类,每个链路被分类(typed)。每个链路用链路ID作为标记。链路ID给定链路另一端 的名字。表18总结了类型字段和链路ID字段的取值。 链路类型 描述 链路ID _________________________________________________________ 1 Point-to-point link Neighbor Router ID 2 Link to transit network Interface address of Designated Router 3 Link to stub network IP network number 4 Virtual link Neighbor Router ID Table 18: Link descriptions in the router-LSA. 另外,为每个链路指定链路数据(Link Data)字段。该字段给出32比特关于该链路的 特有信息。对到转换网络的链路,点到点链路和虚链路,该字段指定与路由器接口相关的 IP接口地址(需要由路由表计算,见Section 16.1.1)。对到Stub网络的链路,该字段指定 Stub网络的IP地址掩码。对unnumbered的点到点链路,链路数据字段应设置为unnumbered interface's MIB-II 【Ref8】ifIndex value。 最后,指定所用链路的费用支出。链路的支出费用可配置。支出费用一般非零,到Stub 74 网络的链路除外。 假定一个路由器想要为区域A建立一个router-LSA,需进一步描述建立链路描述列表的过程。路由器检查他的接口数据结构集。对每个接口,执行下列操作: , 如果所在网络不属于区域A,则LSA中不附加链路,并检查下一个接口。 , 如果接口状态为Down,不附加链路。 , 如果接口状态为Loopback,只要不是到无标号unnumbered点到点网络,则附加类型 3链路(Stub网络)。链路ID设置为IP接口地址,链路数据设置为掩码0xffffffff (指示一个主机路由),且费用设置为‘0’。 , 否则,根据OSPF接口类型,在router-LSA中附加相应的链路描述。点到点接口链 路的描述在Section 12.4.1.1规定,虚链路描述在Section 12.4.1.2规定, broadcast and NBMA接口链路描述在12.4.1.3,点到多点接口链路描述在12.4.1.4 规定。 考虑所有的路由器接口后,通过检查区域A中附加的主机列表把主机附加到router-LSA。类型3`链路代表一个主机路由,其链路ID为主机的IP地址,链路数据为全‘1’的掩码(0xffffffff), and cost the host's configured cost (see Section C.7)。 12.4.1.1 描述点到点接口 对于点到点接口,路由器LSA(router,LSA)加了一个或者多个链路描述,如下所示: , 如果相邻路由器充分接近fully adjacent,加一个1型链路(点到点)。链路的标 识=相邻路由器的路由器标识。对于编号的(numbered)点到点网络,链路数 据应该指定IP接口地址。对于未编号的(unnumbered)点到点网络,链路数据 域应该指定接口的MIB,II【Ref8】ifIndex值。成本(cost)应该被发给点到点 接口的输出成本。 , 另外,只要接口的状态是“点到点”(并且不管相邻路由器的状态),就应该加 一个3型链路(残余网络(stub network))。这种Stub有两种形式: 选择1 假定相邻路由器的IP地址已知,将3型链路的链路标识发给相邻的IP地址, 链路数据发给掩码(mask)0xffffffff(指出一个主机路由),成本发给接口的设 定的输出成本。 选择2 如果一个子网已经被被指派给点到点链路,将3型链路的链路标识=子网的IP 地址,链路数据=子网的掩码(mask),成本=接口的设定的输出成本。 12.4.1.2 描述广播和NBMA接口 对于描述广播和NBMA接口,路由器LSA加了一个单一的链路描述,如下所示: , 如果接口状态是在等待,加一个3型链路(stub network)——链路的标识被发 给隶属网络(attached network)的IP网络好,链路数据发给隶属网络地址掩码, 成本等同(cost equal)于接口设定的输出成本。 , 另外,已经有一个被指派的路由器选出来给隶属网络。如果这个路由器与被指 75 派的路由器充分邻近(fully adjacent),或者如果这个路由器本身就是被指派的 路由器而且与至少一个其他路由器充分邻近,就加一个单一的2型链路(运输 网络)——将链路标识发给隶属网络被指派的路由器(可能是这个路由器本身) 的IP接口地址,链路数据发给路由器自己的IP接口地址,并且成本等同(cost equal)于接口设定的输出成本。否则,就象接口状态是正在等待加一个链路(见 上面)。 12.4.1.3 描述虚链路 对于虚电路,只有当虚邻居充分邻近时才给LSA路由器加一个链路描述。在这种状况,就加一个单一的4型链路(虚链路)——链路标识发给邻居的路由器标识,链路数据发给与虚电路关联的IP接口地址,并且成本发给路由表计算期间为虚链路计算的成本(见15节)。 12.4.1.4 描述点到多点接口 对于点到多点接口,路由器LSA加了一个或者多个链路描述,如下所示: , 加一个单一的3型链路(stub network)——链路标识发给路由器自身的IP接 口地址,链路数据发给掩码0xffffffff(指出一个主机路由),并且成本(cost) 被置0。 , 对于每一个与接口充分接近的邻居,加一个1型链路(点到点)——链路标识 发给相邻路由器的路由标识,链路数据发给IP接口地址,并且成本等同于接口 设定的输出成本。 12.4.1.5 路由器的例子 考虑路由器RT3产生的路由LSA群,如同Figure 6所描绘的。包含路由器RT3的区域(Area 1)已经被用红笔描出,同Figure 15中实际网络地址一致。假定所有RT3的接口地址的最后一个字节是3,给定它接口地址192.1.1.3和192.1.4.3,且其他路由器有类似的地址配置。另外,假定所有的链路都可运行,且路由器标识被指定为最小的IP接口地址。 RT3发起两个路由器Route_LSA,一个为了Area 1,另一个为了中枢(Backbone)。假定路由器RT4已经被选出作为为网络192.1.1.0被指派的路由器。然后RT3为了Area 1发起的路由器Route_LSA在下面显示。它显示出RT3与Area 1有两个连接,其一是往传输网络192.1.1.0的一个链路,其二是往stub网络192.1.4.0的一个链路。注意,传输网络由它被指派的路由器的IP接口确定(也就是说,链路标识,192.1.1.4,这是往192.1.1.0被指派的路由器RT4的IP接口)。同时注意RT3已经指出它是一个区域边沿路由器。 RT3为了Area 1的路由器Route_LSA 76 LS age = 0 ;always true on origination Options = (E-bit) ; LS type = 1 ; indicates router-LSA Link State ID =192.1.1.3 ; RT3's Router ID Advertising Router = 192.1.1.3 ; RT3's Router ID bit E = 0 ; not an AS boundary router bit B = 1 ;area border router #links = 2 Link ID = 192.1.1.4 ;IP address of Desig. Rtr. Link Data = 192.1.1.3 ;RT3's IP interface to net Type = 2 ;connects to transit network # TOS metrics = 0 metric = 1 Link ID = 192.1.4.0 ;IP Network number Link Data = 0xffffff00 ;Network mask Type = 3 ;connects to stub network # TOS metrics = 0 metric = 2 下面说明RT3为了中枢的路由器LSA。它指出RT3有一个单一的附件给中枢。这个附件 是通过一条未编号的点到点链路到路由器RT6。RT3已经再一次指出它是一个区域边沿路由 器。 RT3为了中枢的路由器LSA LS age = 0 ;always true on origination Options = (E-bit) ; LS type = 1 ;indicates router-LSA Link State ID = 192.1.1.3 ;RT3's router ID Advertising Router = 192.1.1.3 ;RT3's router ID bit E = 0 ;not an AS boundary router bit B = 1 ;area border router #links = 1 Link ID = 18.10.0.6 ;Neighbor's Router ID Link Data = 0.0.0.3 ;MIB-II ifIndex of P-P link Type = 1 ;connects to router # TOS metrics = 0 metric = 8 77 12.4.2 网络LSA 一个网络LSA为每一个运输广播或者NBMA网络而产生(一个运输网络有两个或多个隶属路由器)。网络LSA描述所有隶属于网络的路由器。 为网络被指派的路由器发起这个LSA。 这个被指派的路由器仅仅当它与网络至少一个其他路由器充分邻近才发起这个LSA。这个网络LSA充满了整个包含这个运输网络的区域,并且仅在与此。网络LSA列出了那些与被指派的路由器充分邻近的路由器;每一个充分邻接的路由器由它的OSPF路由器标识标定。在这个列表中被指派路由器包括了它自身。 网络LSA的链路状态标识是被指派路由器的IP接口地址。这个由网络地址掩码(同样包含在网络LSA中)屏蔽的值产生了网络IP地址。 一个原来是网络被指派的路由器的路由器,但是现在不是了,就应该冲洗掉(flush)它先前引起的网络LSA。这个LSA不再在路由表计算中被使用。通过过早的增加这个LSA的年龄(age)到最大年龄和再淹没冲洗掉它(见14.1节)。另外,在那些稀少的路由器的路由器标识发生变化的情况中,任何一个由于这个路由器原来的路由器标识而产生的网络LSA必须被冲洗掉。既然这个路由器可能不知道它原来的路由器标识是什么,这些网络LSA通过让它们的链路标识等同于这个路由器IP接口地址之一和它们的广告路由器等同于与路由器当前路由器标识不同的某个值来指出(更多细节见13.4节)。 12.4.2.1 网络LSA的例子 再一次考虑Figure 6中的区域结构。在Area 1中网络LSA为网络N3指定,在Area 2中为网络N6和N8指定,在Area 3中为网络N9指定。假定路由器RT4已经被选定为网络N3的被指派路由器,下面的网络LSA由RT4产生,代表了网络N3(见Figure 15所示的地址分配): 网络N3的网络LSA(Network-LSA for Network N3) LS age = 0 ;always true on origination Options = (E-bit) ; LS type = 2 ;indicates network-LSA Link State ID = 192.1.1.4 ;IP address of Desig. Rtr. Advertising Router = 192.1.1.4 ;RT4's Router ID Network Mask = 0xffffff00 Attached Router = 192.1.1.4 ;Router ID Attached Router = 192.1.1.1 ;Router ID Attached Router = 192.1.1.2 ;Router ID Attached Router = 192.1.1.3 ;Router ID 12.4.3. 摘要LSA(Summary-LSAs) 摘要LSA描述的目的地要么是一个IP网络,一个AS边界路由器,要么是一个IP地址 78 的范围。摘要LSA仅仅在一个单一区域内被整个泛滥(flooded)。所描述的目的地在这个区域的外部,但仍然属于这个自治系统(Autonomous System)。 摘要LSA由区域的边沿路由器发起(originated)。用来在一个区域内做广告的精确的摘要路由通过依照下面描述的运算法则检查路由表结构(见11节)而被决定。注意:只有域内的路由被广告(advertise)进中枢,而域内(intra,area)和交互域(inter,area)的路由都被广告进其他区域 。 为了决定哪一个路由进入一个隶属区域A作广告,每一个路由表(Entry)项目按如下方式被加工。记住每一个路由表项目描述一组到一个特殊目的地的等价(equal,cost)最佳路径: , 只有网络和AS边界路由器的目的地类型在摘要LSA中被广告。如果路由表入口 的地址类型是区域边沿路由器,就检查下一个路由表入口。 , AS外部路由从未在摘要LSA中被广告。如果这个路由表入口(Entry)有类型1 外部或者类型2外部的路径类型(Path-type of type 1 external or type 2 external),就检查下一个路由表入口。 , 另外,如果与这一组路径相关联的区域是区域A本身,就不要为这个路由产生 一个摘要LSA。【17】 , 另外,如果与这一组路径相关联的下一跳属于区域A本身,就不要为这个路由 产生一个摘要LSA。【18】这是一个距离矢量协议的裂口水平逻辑的逻辑等价物 (This is the logical equivalent of a Distance Vector protocol's split horizon logic)。 , 另外,如果路由表成本等于或者超出值LSInfinity,那么就不能为这个路由产 生一个摘要LSA。 , 另外,如果这个路由的目的地是一个AS边界路由器,那么当且仅当这个路由表 入口描述到AS边界路由器的首选路径时发起(originate)一个摘要LSA(见 16.4节的第三步)。如果是这样,就为目的地发起一个类型4的摘要LSA——链 路状态标识等同于AS边沿路由器的路由器标识,metric等同于路由表入口成 本。注意:如果区域A已经被设定为一个stub area,那么就不应该产生这些 LSA。 , 另外,目的地类型是网络。如果这是一个交互域路由,就为目的地产生一个类 型3的摘要LSA——链路状态标识等同于网络的地址(如果有必要,链路状态 标识也能规定一个或者多个网络的主机比特装置(have one or more of the network's host bits set);细节见附录E),metric等同于路由表成本。 , 还剩下一种情况是网络的域内路由。这意味着网络包含在路由器的直接隶属区 域之一中。总而言之,这个信息在出现在摘要LSA中之前必须被浓缩。记住一 个区域有一个设定的地址范围列表,每一个范围包含一个(地址,掩码)对和 一个要么广告要么不广告的状况指示。大多数情况为每一个范围(range)发起 一个单一的类型3 摘要LSA。当一个范围状态指出为广告,就产生一个类型3 摘要LSA——链路状态标识等同于范围地址(如果有必要,链路状态标识也能 规定一个或者多个范围的主机比特;细节见附录E),成本等同于任何一个组成 网络的最大成本。当范围状态指出为不广告时,类型3摘要LSA被抑止,并且 组成网络相对于其他域保持隐藏。 默认情况下,如果一个网络不包含在任何明确设定的地址范围,就产生一个类型3的摘要LSA——链路状态标号等同于等同于网络地址(如果有必要,链路状态标识也能规定一个或者多个范围的主机比特;细节见附录E),metric等同于网络路由表成本。 79 如果一个区域有能力运送运输交通(transit traffic)(也就是说,它的TransitCapability被设为真(TRUE)),关于中枢网络的路由信息在被概述进区域前不应该被压缩。传输区域中的中枢网络的广告也不应该被压缩。换一句话说,当发起摘要LSA进入传输区域时中枢的设定范围应该被忽略。 如果一个路由器为一个目的地广告一个摘要LSA,而目的地然后就变得不能到达,这个路由器必须通过把它的年龄(age)置为最大年龄(MaxAge)和重新淹没从路由域中冲洗掉这个LSA(见14.1节)。同样,如果目的地仍然可以到达,但是按照上面的流程不能再被广告(也就是说,它现在是一个交互域路由,而它曾经是一个与一些非中枢区域相关联的域内路由;这样对于中枢它应该不再能被广播),这个LSA也应该被从路由域中冲洗掉。 12.4.3.1 发起摘要LSA进入stub areas 当区域A是一个OSPF stub area时,12.4.3节的运算法则是可选的。根据12.4.3节的运算法则,与一个stub area相联的区域边沿路由器能够发起摘要LSA进入区域,或者能够仅仅发起一个摘要LSA的子集,很可能是受结构控制。发起的LSA越少,stub area的链路状态数据库就越小,进一步减小对于它的路由器资源的要求。然而,省略LSA也可以导向次一等的最佳(sub,optimal)交互域路由,虽然路由将继续运行。 如同在12.4.3节中指定的,类型4摘要LSA(ASBR,summary,LSAs)从来没有被发起进入stub areas。 在一个stub area,每一个区域边沿路由器发起一个“默认摘要LSA”进入这个区域而不是引入外部的路由。默认摘要LSA的链路状态标识被置为默认目的地(DefaultDestination),metric被置为(每个域(per,area))结构参数StubDefaultCost。注意:StubDefaultCost并不需要在所有的stub area的区域边沿路由器被同一设定。 12.4.3.2 摘要LSA的例子(Examples of summary-LSAs) 再次考虑Figure 6中的区域结构。路由器RT3、RT4、 RT7、 RT10和RT11都是区域边沿路由器,因此是发起摘要LSA。考虑特别的路由器RT4。它的路由表如同11.3节的示例一样计算。RT4发起摘要LSA进入中枢和区域1两者中。进入中枢,路由器RT4为网络N1,N4的每一个发起单独的LSA。进入区域1,路由器RT4为网络N6,N8和AS边界路由器RT5、RT7发起单独的LSA。它同样将主机路由Ia和Ib浓缩进一个单一的摘要LSA。最后,到网络N9、N10、N11和主机H1的路由有一条单一的摘要LSA广告。这个浓缩最初是由路由器RT11执行的。 这些LSA在Figure 7和8中有图解说明。路由器RT4发起的摘要LSA中的两个跟在其后。正被讨论的网络和路由器的实际IP地址已经在Figure 15中被指定。 网络N1的摘要LSA,由路由器RT4发起进入中枢(Summary-LSA for Network N1, originated by Router RT4 into the Backbone) LS age = 0 ;always true on origination Options = (E-bit) ; LS type = 3 ;Type 3 summary-LSA Link State ID = 192.1.2.0 ;N1's IP network number Advertising Router = 192.1.1.4 ;RT4's ID metric = 4 80 AS边界路由器RT7的摘要LSA,由路由器RT4发起进入区域1(Summary-LSA for AS boundary router RT7 originated by Router RT4 into Area 1) LS age = 0 ;always true on origination Options = (E-bit) ; LS type = 4 ;Type 4 summary-LSA Link State ID = Router RT7's ID Advertising Router = 192.1.1.4 ;RT4's ID metric = 14 12.4.4. AS外部LSA(AS-external-LSAs) AS外部LSA描述到自治系统外部目的地的路由。大多数AS外部LSA描述到明确的外部目的地的路由;在这些情况下LSA的链路状态标识被发给目的地网络的IP地址(如果有必要,链路状态标识也能设置一个或者多个网络的“主机”比特;细节见附录E)。然而自治系统的一个默认路由能在一个AS外部LSA中被描述——通过将LSA的链路状态标识置为默认目的地(DefaultDestination)(0.0.0.0)。AS外部LSA由AS边界路由器发起。一个AS边界路由器为它所获悉的每一个外部路由发起一个单一的AS外部LSA,或者是通过另一个路由协议(比如BGP),或者是通过结构信息。 AS外部LSA唯一的一类LSA,它们在整个自治系统被掩没;所有其他类型的LSA只在一个单一区域中明确。然而,AS外部LSA不在进入/整个stub areas中被淹没(见3.6节)。这些使得stub areas外部的链路状态数据库大小能够缩减。 外部路由广告的metric能够是两种类型之一。类型1的metrics和链路状态metric可比。类型2的metrics被假定比任何AS内部路径的成本都大。 如果路由器为一个目的地广告了一个AS外部LSA,而然后目的地就变得无法到达了,于是这个路由器就必须通过将它的年龄设为最大年龄和淹没从路由域中冲洗掉这个LSA(见14.1节)。 12.4.4.1 AS外部LSA的例子(Examples of AS-external-LSAs) 再考虑Figure 6中图示的AS。有两个AS边界路由器:RT5和RT7。路由器RT5为网络N12,N14发起三个AS外部LSA。路由器RT7为网络N12和N15发起两个AS外部LSA。假定RT7已经通过BGP获悉了它到N12的路由,并且它希望给AS广告一个类型2的metric。则RT7将为N12发起如下的LSA: 路由器RT7为网络N12发起的AS外部LSA(AS-external-LSA for Network N12,originated by Router RT7) LS age = 0 ;always true on origination Options = (E-bit) ; LS type = 5 ;AS-external-LSA Link State ID = N12's IP network number Advertising Router = Router RT7's ID bit E = 1 ;Type 2 metric metric = 2 Forwarding address = 0.0.0.0 81 在上面的例子中,转发地址部分已经被设置为0.0.0.0,指出外部目的地的包应该被交换到广告OSPF路由器(RT7)。这个并不总是需要的。考虑Figure 16中图示的例子。一个普通网络联了三个OSPF路由器(RTA、RTB和RTC)。只有其中之一,RTA,正在和非OSPF路由器RTX交换BGP信息。则RTA必须为它从RTX中获悉的那些目的地发起AS外部LSA。通过使用AS外部LSA的交换地址部分,RTA能够指定这些目的地的包能够直接被交换到RTX。如果没有这个特征,路由器RTB和RTC将进行额外的一跳来到达这些目的地。 注意:当交换地址部分非零时,它应该指向属于另一个自治系统的一个路由器。 同样也能够为默认路由指定一个交换地址。举个例子,在Figure 16中RTA可能想指定指定所有去往外部的包应该默认的被交换到它的BGP peer RTX。作为结果发生的AS外部LSA如下面图示。注意链路状态标识被设为默认目的地(DefaultDestination)。 路由器RTA包通过RTX交换发起的默认路由(Default route, originated by Router RTA Packets forwarded through RTX) LS age = 0 ;always true on origination Options = (E-bit) ; LS type = 5 ;AS-external-LSA Link State ID = DefaultDestination ; default route Advertising Router = Router RTA's ID bit E = 1 ;Type 2 metric metric = 1 Forwarding address = RTX's IP address 在Figure 16中,假定用RTX代替RTA和RTB来交换BGP信息。在这种情况下,RTA和RTB将发起同样的一组AS外部LSA。这些LSA——如果他们指定同样的metric,既然它们将指定同样的目的地和交换地址(RTX)——在功能上将等同。这个导致了effort的一个清晰的复制品。如果仅仅RTA和RTB之一发起这组AS外部LSA,路由将保持不变,并且链路状态数据库将减少。然而,哪一个路由器发起这些LSA必须被明确定义(否则两者都不可以,或者发起者的特性可以振荡((otherwise neither may, or the identity of the originator may oscillate))。因此指定了下列的规则:如果彼此可以到达两个路由器发起功能相等的AS外部LSA(也就是说,同一目的地、成本和非零交换地址),然后由有最高OSPF路由器标识的路由器发起的LSA被使用。有较低OSPF路由器标识的路由器然后能冲洗掉它的LSA。冲洗掉一个LSA在14.1节中被讨论。 + | +---+.....|.BGP |RTA|-----|.....+---+ +---+ |-----|RTX| | +---+ +---+ | |RTB|-----| +---+ | | +---+ | |RTC|-----| +---+ | | 82 + Figure 16: Forwarding address example 13. 扩散流程(The Flooding Procedure) 链路状态更新包为淹没LSA提供了机制。一个链路状态更新包可以包含几个截然不同的LSA,并且扩散到(淹没)每一个LSA离(起)源点一个单跳以上。为了使得扩散流程可靠,每一个LSA必须个别地被确认。Acknowledgments在链路状态Acknowledgments包中被传送。许多个别的承认也能被聚合到一个单一的包中。 当收到一个链路状态更新包时扩散流程开始了。在交给扩散流程之前,接收到的包上已经进行了很多一致性检查(见8.2节)。特别的,链路状态更新包已经与一个特殊的邻居——一个特殊域——相关联。如果这个邻居处在比交换次要的状态,这个包应该被丢弃而不进行进一步的操作。 除AS-External-LSA外所有类型的LSA都与一个特殊域相关联。然而,LSA不包含一个区域部分。一个LSA域必须从链路状态更新包报头中演绎出。 对于每一个包含在一个链路状态更新包LSA,进行下列步骤: (1) 确认LSA的LS检查总和(checksum)。如果这个checksum最终显出为无效, 丢弃这个LSA并且从链路状态更新包中获得下一个。 (2) 检查LSA的LS类型。如果这个LS类型未知,丢弃这个LSA并且从链路状态 更新包中获得下一个。这个规范中定义了LS类型1,5(见4.3节)。 (3) 否则如果LSA是一个AS外部LSA(LS类型,5),而且这个域已经被设定为一 个stub area,丢弃这个LSA并且从链路状态更新包中获得下一个。AS外部 LSA不在进入/整个stub areas中被淹没(见3.6节)。 (4) 否则如果LSA的LS年龄等于(MaxAge )最大年龄,当前在路由器的链路状态 数据库中没有这个LSA的instance,并且路由器的邻居都不在交换或者装载 状态,那么就进行以下动作:a)通过发送一个链路状态确认包(Link State Acknowledgment packet)回复给发送邻居确认收到了这个LSA,然后b)丢 弃这个LSA,检查链路状态更新包中列出的下一个LSA(如果有的话)。 (5) 否则,找到目前包含于路由器的链路状态数据库中的这个LSA的instance。 如果没有数据库副本,或者接收到的LSA比数据库副本中的要新(哪一个LSA 更新的定义见下面的13.1节),那么必须执行下面的步骤: (a) 如果已经有一个数据库副本,并且如果这个数据库副本在小于 MinLSArrival秒数前通过淹没接收到和安装了(太快),就丢弃这个 新的LSA(不对它确认)且检查链路状态更新包中列出的下一个LSA (如果有的话)。 (b) 否则立刻扩散这个新的LSA到路由器接口的子集(见13.3节)。在 一些情况下(比如,接收接口的状态是DR并且LSA是从非备份DR (Backup DR)的路由器中接收到)这个LSA将通过接收接口被反向淹 没(返回)。这个事件应该通过确认处理为随后的使用而被注出(见 13.5节)。 (c) 从所有邻居的链路状态retransmission列表中移走当前的数据库 副本(已经Flooded但没有被确认的在Retransmission)。 (d) 在链路状态数据库中安装新的LSA(代替目前的数据库副本)。这可 83 能导致路由表计算被确定时间。另外,用当前时间(也就是说,它接 收到的时间)timestamp新的LSA。除非MinLSArrival秒数已经流逝, 否则淹没流程不能覆盖新装的LSA。LSA的安装流程在13.2节中进一 步讨论。 (e) 可能的话,通过接收接口回送一个链路状态确认包确认收到LSA。 这在下面13.5节中解释。 (f) 如果这个新的LSA指出它由接收路由器自身发起(比如,考虑一个 自发起LSA),这个路由器必须进行特殊行动,或者更新LSA或者在某 些情况下从路由域中把它冲洗掉。自发起LSA如何进行探测和后继操 作的描述见13.4节。 (6) 另外,如果发送邻居的链路状态请求列表上有一个LSA的instance,数据库 交换过程中发生了一个错误。在这种情况下,通过为发送邻居产生邻居事件 BadLSReq重新启动数据库交换过程,并且停止处理链路状态更新包。 (7) 另外,如果接收到的LSA与数据库副本中的情况相同(也就是说,两个都不 是更加新的),则应该执行下面两个步骤: (a) 如果LSA为接收邻接在链路状态retransmission列表中列出,那么 路由器本身正在为这个LSA期待一个确认。路由器应该通过从链路状 态retransmission列表中移去这个LSA来将接收到的LSA作为一个确 认对待。这被称为一个“暗示确认(implied acknowledgment)”。这 个事件应该通过确认处理为随后的使用而被注出(见13.5节)。 (b) 可能的话,通过接收接口回送一个链路状态确认包确认收到LSA。 这在下面13.5节中解释。 (8) 另外,数据库副本更加新。如果数据库副本的LS年龄,最大年龄、LS序列号 等于最大序列号(MaxSequenceNumber),那么简单的丢弃接收到的LSA而不确 认(在这种情况下,LSA的LS序列号被包装起来,并且在任何新的LSA被传 入前必须完完全全的冲洗掉最大序列号LSA)。否则的话,将数据库副本放进 一个链路状态更新包中回送给发送邻居。链路状态更新包应该直接发送给邻居 Unicast。为了这样做,不要把LSA的数据库副本放在邻居的链路状态 retransmission列表中,并且不要确认已接收到的(非新近的)LSAinstance (LSA instance)。 13.1 决定哪一个LSA更新一些(Determining which LSA is newer) 当一个路由器遇到了一个LSA的两个instance,它必须决定哪一个更新。这在上面提 到的将接收到的LSA和它的数据库副本比较时发生。这个比较也必须在数据库交换过程期间 进行,而数据库交换过程在邻接提出时发生。 一个LSA由它的LS类型、链路状态标识和广告路由器标定。对于同一个LSA的两个 instance,LS序列号、LS年龄和LS检查总和部分被用来决定那个instance更新: , 有较新的LS序列号的LSA更新。LS序列号空间的解释见12.1.6节。如果两个 instance有相同的LS序列号,那么: , 如果两个instances有不同的LS检查总和,那么检查总和较大的instance(作 为一个16比特的无符号整数考虑)被认为更新。 84 , 否则,如果只有一个instance将它的LS年龄置为最大年龄,则年龄为最大年 龄的instance被认为更新。 , 否则,如果两个instances的LS年龄部分有多于MaxAgeDiff的不同,有较小 (年轻)LS年龄的instance被认为更新。 , 否则,这两个instances被认为是同样的。 13.2 数据库中安装LSA(Installing LSAs in the database) 在数据库中安装一个新的LSA——要么是作为扩散(淹没)的结果,要么是一个最近自己发起的LSA——可能引起OSPF路由表结构被重新计算。新LSA的内容应该与老的instance相比较——如果还存在。如果没有差别,就没有必要重新计算路由表。在将一个LSA与它先前的instance相比较时,下列情形都被认为是内容上的区别: , LSA选项部分已经变了。 , LSA instances之一将LS年龄设为最大年龄,而其他的没有。 , LSA报头的长度部分已经变了。 , LSA的主要部分(也就是说,20比特的LSA报头外的任何部分)已经变了。注 意:这里把LS序列号和LS检查总和的变化排斥在外。 如果内容不同,那么路由表的下面条目必须依赖(按)新的LSA的LS类型部分被重新计算: 路由器LSA和网络LSA(Router-LSAs and network-LSAs) 整个路由表必须被重新计算,从为每个域(并不仅仅是那些链路状态数据库发生变化的区域)进行最短路径计算开始。最短路径计算不能被限制在单一的发生变化的区域的原因是基于AS边界路由器可能属于多重区域这个事实。一个发生在当前提供最佳路径的区域的变化可能促使路由器使用一个不同区域提供的域内路由。【19】 摘要LSA(Summary-LSAs) 摘要LSA描述的到目的地的最佳路由必须重新计算(见16.5节)。如果这个目的地是一个AS边界路由器,那么也有必要重新检查所有的AS外部LSA。 AS外部LSA(AS-external-LSAs) AS外部LSA描述的到目的地的最佳路由必须重新计算(见16.6节)。 同样,当新的LSA被安装时,任何LSA的旧的instance必须被从数据库中移走。这个旧的instance也必须从所有邻居的链路状态retransmission列表中移走(见第10节)。 13.3 扩散流程的下一步(Next step in the flooding procedure) 当接收到一个新的(以及更新近的)LSA时,它必须通过某组路由器接口被淹没。这一节描述淹没流程的第二部分(第一部分是第13节中操作),即选择流出接口和将LSA加入适当的邻居的链路状态retransmission列表中。淹没流程的这一部分同样包括了邻居的链路状态请求列表的维护。 85 这一节对于路由器自身发起的LSA的淹没同样适用(见12.4节)。对于这些LSA,这一节提供了全部淹没流程(也就是说,举个例子,既然还没有从邻居接收到LSA并且因此不必被确认,那么13节的操作没有被执行)。 依据LSA的LS类型,LSA只能通过特定的接口被淹没。下面定义的这些接口被称为合格的接口: AS外部接口(AS-external-LSAs (LS Type = 5)) 整个AS范围内,AS外部LSA被淹没,除了stub areas(见3.6节)。合格的接口都是路由器接口,不包括虚链路和那些隶属于stub areas的接口。 所有其他LS类型(All other LS types) 所有其他类型对于一个单一区域(区域A)是明确的。合格的接口是所有那些隶属于区域A的接口。如果区域A是中枢,那么这里包括所有的虚链路。 所有与上面的合格接口相关联的邻接的链路状态数据库必须保持同步。这通过在每一个合格接口执行下面的步骤实现。应该注意这个流程可能决定不通过一个特殊接口淹没一个LSA,如果有很大的可能性那些隶属的邻居早已经接收到了这个LSA。然而,在这些情况下,淹没流程必须完全确认这些邻居最终的确接收到这个LSA,所以这个LSA仍然被加入了每一个邻接的链路状态retransmission列表。对于每一个合格接口: (1) 检查每一个隶属于这个接口的邻居,以决定它们是否必须接收这个新的LSA。 为每个邻居执行了下面的步骤: (a) 如果这个邻居处于比交换次要的状态,那么它不参与淹没并且应该检查下 一个邻居。 (b) 另外,如果邻接还不完整(邻居状态是交换或者加载),则检查与这个邻接 相关联的链路状态请求列表。如果列表中有一个新LSA的instance,那么 它指出相邻路由器早就有这个LSA的一个instance。将这个新的LSA与邻 居的副本相比较: , 如果这个新的LSA旧一些,则检查下一个邻居。 , 如果两个副本是同一个instance,那么从链路状态请求列表中删除这个 LSA,并且检查下一个邻居。【20】 , 另外,这个新的LSA更新近些。从链路状态请求列表中删除这个LSA。 (c) 如果这个新的LSA从这个邻居中接收到,则检查下一个邻居。 (d) 在这一点,我们并不确定这个邻居有这个新LSA的一个最近的instance。 为邻接将这个新的LSA加入链路状态retransmission列表中。这样保证淹 没流程是可靠的;这个LSA将周期的被重传直到见到来自邻居的一个确认。 (2) 现在路由器必须决定是否通过这个接口淹没新的LSA。如果在前一步,LSA没有 被加入任何一个链路状态retransmission列表,就没有必要通过这个接口淹没 LSA,并且应该检查下一个接口。 (3) 如果这个新的LSA是从这个接口接收到的,并且它要么从指派的路由器 (Designated Router)要么从备份指派路由器(Backup Designated Router) 接收到,则可能所有的邻居已经接收到这个LSA。因此,检查下一个接口。 (4) 如果这个新的LSA是从这个接口接收到的,并且接口状态是备份状态(Backup) (也就是说,路由器本身是备份指派路由器),则检查下一个接口。指派路由器 将在这个接口进行淹没操作。然而,如果这个指派路由器使路由器(就是备份 指派路由器)失望,将中止重传更新。 86 (5) 如果这一步达到了,则这个LSA必须通过这个接口被淹没。通过接口发送一个 链路状态更新包(包括这个新的LSA作为内容)。当它被复制进输出链路状态更 新包时(除非LS年龄部分达到了最大年龄的最大值),LSA的LS年龄必须通过 信息传输中继(InfTransDelay)(必须大于0)被增加。 在广播网络,链路状态更新包是多点传送的。为链路状态更新包指定的IP地址依赖于接口状态。如果接口状态是DR或Backup,应该使用地址AllSPFRouters。否则,应该使用地址AllDRouters。 在非广播网络,必须发送分离的链路状态更新包给每一个邻近邻居(即那些处于交换或者更高状态的邻居),作为单播。这些包的目的地IP地址是邻居的IP地址。 13.4 接收自发起LSA(Receiving self-originated LSAs) 一个路由器通过淹没流程接收自发起LSA是一个普通事件。一个自发起LSA被探测到当:或者1)LSA的广告路由器(Advertising Router)与路由器自己的路由器标识等同;或者2)LSA是一个网络LSA并且它的链路状态标识与路由器自身的一个IP接口地址等同。 然而,如果接收到的自发起LSA比路由器实际发起的最新instance要新,则这个路由器必须进行特殊操作。接收到这样一个LSA指出在这个路由域中有上一次它被重新启动之前,这个路由器发起的LSA。在多数情况下,路由器必须因此将LSA的LS序列号比接收到的LS序列号提升一,并且发起LSA的一个新的instance。 可能有路由器不想再发起接收到的LSA这种情况。可能的例子包括:1)这个LSA是一个Summary,LSA或AS外部LSA并且路由器不再有到目的地的一个(可广告的)路由;2)这个LSA是一个网络LSA,但是路由器不再是网络的指派路由器,或者3)LSA是一个网络LSA,它的链路状态标识是路由器自身IP接口地址之一,但是它的广告路由器与路由器自身的路由器标识不等同(这最后一种情况应该,并且它指出既然发起这个LSA路由器的路由器标识已经变了)。所有这些情况下,这个LSA应该通过增加接收到的LSA的LS年龄到最大年龄和重新淹没(reflood)从路由域中被冲洗掉,而不是更新这个LSA(见14.1节)。 13.5 发送链路状态确认包(Sending Link State Acknowledgment packets) 每一个新近接收到的LSA必须被确认。这通常通过发送链路状态确认包实现。然而,确认也能通过发送链路状态更新包被暗中实现(见13节的第7步的a)。 许多确认可以被一起聚合进一个单一的链路状态确认包。这样的一个包通过接收到LSA的接口被往回发送。这个包能够以两种方法之一发送:在一个间隔计时器上延时和发送,或者直接发送给一个特殊的邻居。所用的详细的确认策略依赖于收到LSA周围的环境。 发送被延迟的确认要完成几件事:1)促进把多样的确认包装进一个单一的链路状态确认包,2)使得一个单一的链路状态确认包能够立刻指出对几个邻居的确认(通过组播),以及3)打乱隶属于一个普通网络的不同路由器发送的链路状态确认包。一个路由器延时传输间固定的间隔必须很短(小于RxmtInterval)或者不需要的重发将跟着发生。 直接的确认被直接发送给一个特殊的邻居,作为接收到复制的LSA的响应。当复制品被接收到,直接确认就立刻被发送。在multi-access网络,这些确认被直接发送到邻居的IP 87 地址。 发送链路状态确认包的精确过程在Table 19中描述。收到LSA周围的环境在左栏列出。然后执行的确认操作在右栏的两者之一中列出。这个操作由所关心的接口的状态决定;处于备份状态的接口与处于其他所有接口状态的接口行为表现不同。延迟的确认必须被递送给所有与接口相关联的邻近路由器。在广播网络,这个通过发送延时链路状态确认包完成,和多播传送一样。所用的目的地IP地址有赖于接口的状态,如果接口状态是DR或者Backup,则使用目的地AllSPFRouters;在所有其他状态,使用目的地AllDRouters。在非广播网络,延迟链路状态确认包必须用单播到每一个邻接(如邻居状态>= Exchange的邻居)个别的发送。 因状态而进行的操作: 环境 备份状态(Backup) 所有其他状态 LSA已经通过接收接口被向不发送确认 不发送确认 后淹没(见13节第5步b) LSA比数据库副本更新,但是如果从指派路由器接收到广发送延迟的确认 通过接收接口被向后淹没 告就发送延迟的确认,否则什 么也不做 LSA是一个复制品并且被作如果从指派路由器接收到广不发送确认 为一个暗指的确认对待(见告就发送延迟的确认,否则什 13节第7步a) 么也不做 LSA是一个复制品并且不被发送直接确认 发送直接确认 作为一个暗指的确认对待 LSA的LS年龄等同于最大年发送直接确认 发送直接确认 龄,并且在链路状态数据库 中没有LSA最近的instance, 且路由器的邻居都不处于交 换或者加载状态(见13节第 4步) Table 19:发送链路状态确认(Sending link state acknowledgements) 作为多点传送发送上面的包背后的推理用一个例子可以进行最好的解释。考虑Figure 15中描述的网络结构。假定对于网络N3,RT4已被选作指派路由器,RT3作为备份指派路由器。当路由器RT4对网络N3注满(flood)一个新的LSA时,它由路由器RT1、RT2和RT3接收到。这些路由器将不在N3网把这个LSA回注,但是它们仍然必须保证它们的链路状态数据库与它们邻近的邻居保持同步。同样的,RT4和RT3都在等着看来自RT1和RT2的确认。这最好通过象多点传送一样发送确认来完成。 Backup DRs的确认的逻辑性的理由有一点轻微的不同,在LSA的flooding期间的执行情况不同(见13.3节第4步)。 13.6 重传LSA(Retransmitting LSAs) (通过一个)扩散到一个邻接(淹没flood)的LSA被置于邻接的链路状态回送重传列表上(the adjacency's Link state retransmission list)。为了确认淹没(flooding)是可靠的,这些LSA必须被重传(回送)直到它们被确认。重传之间的时间长度是一个可配置的per-interface的值,RxmtInterval。如果对于一个接口这个值设的太低,不必要的回 88 送将跟着发生。如果这个值设的太高,面对丢失的包,淹没(flooding)的速度可能受影响。 几个重传的LSA可能适合一个单一的链路状态更新包。当LSA准备被重传时,只有数量适合于一个单一链路状态更新包的应该被发送。只要一些LSA被确认了或者临近回送(retransmission)计时器下一次开始的时候,另一个重传包能被发送。 携带回送信息(retransmissions)的链路状态更新包总是以单播(unicast)一样的形式直接发送给邻居。在multi-access网络,这意味着retransmissions被直接发送给邻居的IP地址。当它被复制进输出(outgoing)链路状态更新包时,每一个LSA的LS年龄必须通过信息传输延时(InfTransDelay)(必须>0)被增加(直到这个LS年龄备份达到最大年龄的最大值)。 如果一个邻近路由器进入Down状态(go down),则直到这个邻接被OSPF的问候协议(Hello Protocol)破坏时,回送才发生。当邻接被破坏,链路状态回送列表被清除。 13.7 接收链路状态确认(Receiving link state acknowledgments) 在交给flooding流程之前,已经对一个接收到的链路状态确认包上进行了很多一致性检查。特别是它已经与一个特殊邻居相关联。如果这个邻居处在次于Exchange的状态,则这个链路状态确认包被丢弃。 否则,对于链路状态确认包中的每一个确认,将执行下面的步骤: , 被确认的LSA是否在链路状态回送列表上有一个为了邻居的instance,如果没 有,检查下一个确认。否则: , 如果这个确认是为了包含在列表上的同一个instance,则从列表上移走这一条 并且检查下一个确认。否则: , 记录这个有问题的确认,并且检查下一个。 14. 老化链路状态数据库(Aging The Link State Database) 每一个LSA有一个LS年龄部分。这些LS年龄以秒数表示。一个LSA的LS年龄部分当它被包含进一个路由器的数据库时被增加。同样的,当为了通过(out)一个特殊接口flooding而被复制进一个链路状态更新包时,LSA的LS年龄通过InfTransDelay被增加。 一个LSA的LS年龄从没有被增加到超过最大年龄这个值。有最大年龄的LSA在路由表计算中不被使用。当一个路由器使它的链路状态数据库变老时,一个LSA的LS年龄可能达到最大年龄。【21】这时候,路由器必须尝试从这个路由域中冲洗掉这个LSA。这仅仅需要通过reflooding最大年龄的LSA来完成,就好像它是一个新近被发起的LSA(见13.3节)。 当为一个新近形成的邻接建立一个数据库摘要列表时,链路状态数据库中现存的任何最大年龄LSA被加入邻居的链路状态回送列表,而不是邻居的数据库摘要列表。更多细节见10.3节。 一个最大年龄LSA必须立刻从路由器链路状态数据库中被移走只要同时满足:a)它不再包含在任何邻居链路状态回送列表中;b)路由器的邻居没有一个处在Exchange或Loading 89 状态。 在老化链路状态数据库的操作中,当一个LSA的LS年龄偶然达到了CheckAge的一个倍数时,它的LS检查总和应该被检验。如果这个LS检查总和不正确,就探测到了一个或者记忆错误,并且最低限度路由器本身应该被重新启动。 14.1 LSA的早熟老化(Premature aging of LSAs) 一个LSA能通过将它的LS年龄设为最大年龄而被从路由域中冲洗掉,同时单独留下它的LS序列号,随后reflooding这个SLA。这个流程与冲洗掉一个LS年龄自然到达最大年龄值的LSA的进程一样(见14节)。特别的,这个最大年龄LSA被立刻从路由器的链路状态数据库中移走,只要:a)它不再包含于任何一个邻居链路状态回送列表中;以及b)路由器的邻居没有一个处在Exchange或Loading状态。我们称将一个LSA的LS年龄设为最大年龄为“早熟老化(premature aging)”。 当到了包装一个自发起LSA的序列号部分的时候就使用早熟老化。在这一点,当前的LSA instance(LS序列号为最大序列号(MaxSequenceNumber))必须在一个新的序列号等同于初始序列号(InitialSequenceNumber )的instance能够被发起前,被过早老化和从路由域中冲洗掉。更多信息见12.1.6节。 举例来说,当路由器先前广告的外部路由器之一不再可到达时,就能使用早熟老化。在这种环境中,路由器能够通过早熟老化从路由域中冲洗掉它的AS外部LSA。这个流程对于二选一更可取,即指定LSInfinity的一个metric来为目的地发起一个新的LSA。当在flooding过程中出乎意料地接收到自发起LSA时早熟老化同样被使用。(见13.4节)。 一个路由器仅可以过早的老化它自身的自发起LSA。这个路由器不可以过早的老化其他路由器发起的LSA。一个LSA被认为是自发起的,当或者1)LSA的广告路由器(Advertising Router)与路由器自身的路由器标识等同;或者2)LSA是一个网络LSA并且它的链路状态标识和路由器自身的IP接口地址之一等同。 15. 虚链路(Virtual Links) 单一的中枢区域(区域标识,0.0.0.0)不能被断开,否则自治系统的一些区域会变得不可到达。为了建立/维持中枢的连通性,虚链路能够被设定贯穿非中枢区域。为连接服务的虚链路在物理上分开了中枢的组成部分。一个虚链路的两个终端(endpoint)是区域边沿路由器。虚链路必须被设定在两个路由器中。每一个路由器中的设定信息由另一个虚终端(另一个区域边沿路由器)和这两个路由器共同拥有的非中枢区域(称为传输区域)组成。虚链路不能通过stub areas被设定(见3.6节)。 虚链路被视为好像它是一个属于中枢和连接两个区域边沿路由器的未编号的点到点网络。尝试在虚链路上建立一个邻接。当这个邻接被建立,则这个虚链路将被包含进中枢路由器LSA中,并且适合这个中枢区域的OSPF包将在这个邻接上流动。作为一个“虚邻接”在这份文档中已经提及到这样一个邻接。 在每一个终端路由器,通过为另一个终端路由器检查路由表项来发现成本(cost)和虚链路的生存能力(入口的关联区域必须是设定的传输区域)。这被称为与虚链路的相应路由 90 表项。当它的相应路由表项可以到达时,一个虚链路的InterfaceUp事件发生。反过来,当它的相应路由表项不可以到达时,InterfaceDown事件发生。换一句话说,虚链路的生存能力由穿过传输区域两个终端之间的一条域内路径的存在所决定。注意:潜在路径已经花费(cost)了大于十六进制的0xffff(一个路由器LSA中花费的接口的最大尺寸)的一条虚链路,应该被认为是不具备可操作性的(即,将它当作路径不存在一样对待)。 其他关于虚链路的细节如下所示: , AS外部LSA从未在虚邻接上被flood。既然在整个虚链路的传输区域同样的AS 外部LSA已经被flood,那么这将成为努力的副本。因为同样的原因,在数据 库交换过程期间也不在虚邻接上总结AS外部LSA。 , 一条虚链路的成本(cost)没有被设定。它被定义为两个定义区域边沿路由器 之间的域内路径的成本。这个成本出现在虚链路相应的路由表项。当一个虚链 路的成本变化的时候,应该为中枢区域发起一个新的路由器LSA。 , 就同虚链路的成本和生存能力由路由表建立过程(通过为另一个终端的路由表 入口的建筑)决定一样,虚接口的IP接口地址和虚邻居的IP地址是一样的。 这些在通过虚链路发送OSPF协议包时使用。注意:当虚链路终端之一(或者两 个都)通过一个未编号的点到点链路连接传输区域时,也许就不可能计算任一 个虚接口的IP地址和/或虚邻居的IP地址,从而导致虚链路失败。 , 在为了中枢的每一个终端的路由器LSA中,虚链路被当作一个类型4链路描绘 ——链路标识被置为虚邻居的OSPF路由器标识,且链路数据被置为虚接口的 IP地址。更多信息见12.4.1节。 , 当且仅当它作为一个传输区域为一个或者多个充分邻近的虚链路(见第6节和 16.1节的TransitCapability)服务时,一个非中枢区域能够携带运输数据交 通(carry transit data traffic)(即考虑过的一个“运输区域(transit area)”)。当中枢为了概括进其中的时候(见12.4.3节),以及理由计算期间(见 16.3节),这样的一个区域需要特殊对待。 , 为一个虚链路设定了链路状态回送间的时间,RxmtInterval。这在两个路由器 之间预期的round-trip delay上应该是适当的。对于一个虚链路来讲这可能很 难估计;通过使它太大来犯错会好一些。 16. 路由表计算(Calculation of the routing table) 这一节详细说明OSPF路由表计算。通过使用它隶属区域的链路状态数据库作为输入,一个路由器运行下面的算法,来一步一步建立它的路由表。在每一步,路由器必须单独的一块块的访问链路状态数据库(比如,一个特定路由器发起的一个路由器LSA)。这个访问由12.2节中讨论的查找功能来履行。这个查找操作可能返回一个LS年龄等于最大年龄的LSA。这样的一个LSA不应该在路由表计算中被使用,并且被作为好像查找操作已经失败来对待。 OSPF路由表的组织在11节中解释。11.2和11.3节中有路由表建立过程的两个例子。这个过程能够被分割成下面几步(Step): (1) 当前的路由表无效。通过乱写(scratch)重建路由表。老的路由表被保存以便 路由表入口中的变化能够被识别。 (2) 通过为每一个隶属区域建立最短路径树计算域内理由。特别的,所有目的地类 91 型是“区域边沿路由器”的路由表入口在这一步被计算。这一步分为两部分描 述。起先,仅仅考虑那些路由器和运输网络间(transit?)的链路来建造树。 然后stub网络合并进这棵树。在区域的最短路径树计算期间,为了第4步中的 后继使用,区域的TransitCapability也被计算。 (3) 通过检查摘要LSA,交互域路由被计算。如果路由器隶属于多重区域(即它是 一个区域边沿路由器),仅仅计算中枢摘要LSA。 (4)在一个域内,边界路由器连接一个或多个传输域(transit area)(即具有TransitCapability的非骨干域),检查传输域相应的summary-LSA,确认通过传输域产生的路径是否优于上面(2)和(3)产生的路径。 (5)通过AS-external-LSA,统计到外部目的地的路由器。AS的边界路由器已经通过上面步骤(2),(4)确定了位置。 下面对步骤(2),(5)作进一步解释。 上面计算造成的路由表项发生改变,会导致OSPF协议进一步动作,比如域内路由发生变化,边界路由器就会发出新的summary-LSA。关于路由表变化造成的OSPF的完整操作,参见16.7一节。 16.1 计算域内最短路径树 通过计算产生和一个域Area(后面统一称作域A)关联的域内路由的集合。路由器以自己为根节点计算最短路径树[22],最短路径树的形成要通过以下两个步骤: (1)只考虑路由器间的和传输网间的链路,采用Dijkstra算法,利用链路状态 数据库的子集形成一个树。 (2)考虑到stub网的链路,给树添加叶子。 上面的过程可以通过第2节的图形术语来解释。整个域的链路状态数据库用直连图表示,图的结点Vertices为路由器、transit网和stub网。上面的第一步,只考虑transit结点(即路由器和transit网络)以及它们之间的链路,在最短路径计算过程中,每个transit节点都与下面的数据有关: Vertex(node)ID:32比特,和vertex type(路由器或者网络)一起唯一的标识 了节点。对于路由器结点,Vertex ID为该路由器的OSPF Router ID;对网络结点,为网络代表路由器的IP地址。 An LSA:每个transit结点都有一个相关的LSA。对于路由器结点,为router-LSA, 对于transit网络,为network-LSA(由网络代表路由器发 出)。不管那种情况,LSA的Link State ID都等于上面的 Vertex ID。 List of next hops:从根到该结点的当前最短路径集合的下一跳列表,如果具有 相等cost多路径的能力,可以有多个最短路径。每个下一跳 代表了向目的转发数据时的该路由器的出口。在广播、点到 多点以及NBMA网络中,下一跳还包括下一个路由器的IP地 址。 Distance from root:表示从根结点开始的当前最短路径集合的链路状态cost值。 路径的链路状态cost值是路径上各段链路cost值(通过 router-LSA和network-LSA进行广告)的累加值。如果一个 路径的cost值小于另一个,则认为这个路径更短。 上面的第一步即Dijkstra算法,可以归结为以下过程,每次重复该算法时,都会生成 92 一个候选结点列表,也就找到了从根到这些结点的路径,但不必是最短的路径。尽管如此, 离根最近的候选结点保证了是最短的路径,这个候选结点就从候选结点列表中删除,加进最 短路径树中,然后检查它的邻接结点是否可以补充到候选列表或者修改候选列表。接着重复 这个算法,直到候选结点列表空为止。 算法的详细步骤如下。注意,下面计算的是Area A的最短路径树,所有提到的查找链 路状态数据库都是指Area A的数据库。 (1)初始化算法涉及到的数据结构,清空候选结点列表,初始化最短路径树,只 保留根结点(即进行该计算的路由器)。将Area A的TransitCapability置 为FALSE。 (2)刚加进最短路径树的结点称为vertex结点V,检查与结点V相关的LSA,这是 个根据结点ID查找链路状态的过程,如果是router-LSA,并且V比特为1 (见A .4.2),则Area A的TransitCapability置为TRUE。任何情况下, LSA都提供了该链路到某个邻接结点的cost。对于每个被描述的链路(用结 点V和结点W联合表示): (a)如果是到stub 网络的链路,则检查结点V的LSA中的下一个链路。 只有在上面计算的第2步骤中才考虑到stub网络的链路。 (b)否则,W就是一个transit结点(路由器或者transit网络)。在 Area A的链路状态数据库中查找结点W的LSA(router-LSA或network-LSA)。 如果这个LSA不存在或者存在但LS的age等于MaxAge或者LSA中没有到达 结点V的返回链路,则检查结点V的LSA中的下一个链路[23]。 (c)如果最短路径树中已经有结点W,则检查LSA中的下一个链路。 (d)计算从根到结点W的路径的cost值D。D等于到结点V的最短路径 的链路状态cost,结点V和W间链路的advertised cost。如果D为: o 大于候选列表中结点W对应的值,则检查下一个链路。 o 等于候选列表中结点W对应的值,则计算利用广告链路产 生的下一跳的集合。目的结点W和父结点V作为计算的输 入,计算过程详见16.1.1。得到的下一跳集合将列入候选 列表中对应结点W的下一跳值。 o 小于候选列表中结点W对应的值,或者W还没有加进候选 列表中,则将结点W加进候选列表中,指示从根结点到结 点V的距离为D。同时计算广告链路获得的下一跳列表,从 而设置对应W结点的下一跳值。计算过程见16.1.1一节, 目的结点W和父结点V作为计算的输入。 (3)如果这一步中,候选列表为空,说明最短(transit结点的)路径树已经建 立,计算结束。否则,选择候选列表中距离根结点最近的结点加进最短路径 树,并在候选列表中删除该结点。当有多个距离根结点最近的结点时,网络 结点要优先于路由器结点被选择,这是为了便于发现所有等价路径。这种做 法和OSPF组播路由扩展(MOSPF)中采用的修订的Dijkstra算法是一致的。 (4)很可能要修改路由表。对那些需要修改的路由表项,其相应的区域要设为Area A,路径类型设为域内路径,cost值为最新计算的最短路径距离。 如果最新加入最短路径树的结点是区域边界路由器或者是AS边界路由 器,则要在路由表中加入新的表项,且目的类型设为路由器类型。该表项的 可选capabilities字段就是router-LSA中的可选字段。不妨记新加入的结 点为路由器X,如果X是某个正在计算的虚连接的终点并且Area A是该虚链 93 路的transit域,则:该虚链路已建立,上面为X计算的出口IP地址设置 为链路虚拟接口的IP地址,X的接口IP地址(包含在X的 ,这个router-LSA中)设为链路虚拟邻居的IP地址接口地址指示了到根结点的返回最短路径树,等价的,这个接口也指出了最 短路径树中返回X的父结点的接口(和16.1.1节中的计算类似)。 如果最新加进的结点是transit网络,路由表中就要加入一个相应的表 项。表项的目的地址为这个网络的IP地址,网络的IP地址可从结点ID(链 路状态ID)与其屏蔽掩码(从network-LSA中可得)获得。如果这个表项路 由表中已经有了(即路由表中已经有了到目的的内部路由),多个结点就已 经映射到了相同IP网络。例如,在新的代表路由器产生时,就是这种情况, 这时,当且仅当新发现的路径更短且新加入的结点的LSA的链路状态ID比 路由表中相应的表项的Link State Origin大时,路由表中的表项才会被新 的替代。 如果路由表中不存在与该网络相应的表项(一般情况),则要增加该IP 网络的表项,表项的Link State Origin设置为新加入结点的LSA。 (5)回到(2)重复算法 stub网络加进最短路径树是在上面计算过程的第二步,这一步中所有路由器结点都要重新检查一遍,那些在第一步被确认无法到达的结点都要丢弃。对于每个可到达的路由器结点(记做V),可以在链路状态数据库中找到它的router-LSA。接下来,检查每个在该LSA出现的stub网络链路,执行下面操作: (1)计算根结点到stub网络的距离D,D等于根结点到路由器结点的距离(上面 第一步计算可得)加上stub网络链路的通告cost。通过查找stub网络的当 前路由表项,比较D和已有的到达stub网络的最小cost,如果D大,则继 续检查LSA中的下一个stub网络。 (2)执行到这一步,stub网络的路由表项一定要更新。以目的地(即stub网络) 和父结点(路由器结点)为输入,计算利用stub网络链路可能产生的下一 跳集合(参见16.1.1),如果D和当前路由表项的cost相同,则只需简单的 把计算得到的下一跳集合加进路由表项的下一跳列表中,这时,路由表就拥 有了一个链路状态源,如果这个链路状态源是router-LSA,且其链路状态 ID小于V的Router ID,则将链路状态源重新置为V的router-LSA。否则, 如果D小于路由表项的cost,则将该路由表项的cost值用D代替,且将其 下一跳列表替换为新计算出来的下一跳集合,然后将该表项的链路状态源设 为V的router-LSA,继续检查下一个stub网络链路。 第二步中,在对路由表项的添加和修改时,对应area都要设为Area A并且路径类型要设为内部区域路径(intra-area)。当所有可达的router-LSA都计算完了以后,第二步计算也就结束了。这时,所有Area A的域内路由就都计算出来了。 协议规范并没有要求要按上面两步计算方法来计算最短路径树,但是不管什么算法,得到的最短路径树必须是一致的。正因为这样,为了在这个树中包含transit结点,transit结点间的链路一定要是双向的。值得注意的是,还有更有效的计算最短路径树的算法,如[Ref1]描述的递增SPF算法。 16.1.1 下一跳的计算 本节说明的如何计算到达某个目的的下一跳集合。每个下一跳包括用来向目的转发数据 94 包的输出接口和下一跳路由器(如果有)的IP地址。每当发现到达目的的最短路径时,都要调用下一跳计算过程,这可能发生在计算最短路径树的任何一步中(见16.1),在最短路径树计算最短路径的第一步中(first stag),当目的结点加进候选列表中时,目的结点对应的候选列表的表项修改了,则说明发现了更短路径(见第一步的step2);在第二步中,每当目的对应的路由表项修改时,就说明发现了一个更短的路径(见第二步second stag的step2)。 计算最短路径树时,当越来越短的路径被发现时,到达目的的下一跳集合的计算就可能会重复计算多次,对应目的的路由表项最后会反映出绝对最短路径的下一跳。 作为下一跳计算的输入有:(a)目的地;(b)根结点(当前计算的路由器)和目的之间的当前最短路径的父结点。父结点总是一个transit结点(即路由器或者transit网络)。 如果当前目的和根结点间的最短路径上至少有一个中间路由器,则目的结点只需简单的继承其父结点的下一跳集合即可。否则有两种情况,第一种,父结点就是根结点,这意味着目的结点要么是直连的网络要么是直连路由器,则输出接口显然就是连接目的网络/路由器的OSPF接口。如果目的结点是路由器且通过点-多点网络和本计算路由器连接,则目的结点的下一跳IP地址可以通过检查目的结点的router-LSA来确定:每个链路指示了返回计算路由器的链路,并且含有属于点-多点网络的链路数据字段,每个链路都提供了下一跳路由器的IP地址。如果目的结点是通过点-点接口直连的网络或者路由器,则不需要下一跳IP地址。如果目的结点是通过虚链路连接的路由器,则下一跳需要等16.3中的计算才能设置。第二种情况,父结点是将计算路由器和目的路由器直连的一个网络,则下一跳列表由目的结点的router-LSA决定,router-LSA的每一个链路都指出了到父结点(网络)的路径,并且链路数据字段提供了下一跳路由器的IP地址。输出接口可以从下一跳的IP地址获得(或者从父结点(网络)继承)。 16.2 域间路由计算 域间路由是通过检查summary-LSA计算出来的,如果该路由器和多个域相连(从属于多个域),则只检查主干summary-LSA;只属于一个域的路由器则只检查该域的summary-LSA。无论那种情况,下面被检查的summary-LSA都是单个域的链路状态数据库(称为Area A)的一部分。 summary-LSA由区域边界路由器发起,在区域内每个summary-LSA都是按顺序被处理,必须注意,summary-LSA描述的目的地要么是一个网络(类型3 summary-LSA)要么是AS边界路由器(类型4 summary-LSA)。对于每个summary-LSA: (1)如果LSA中的cost是LSInfinity或者LS的age等于MaxAge,则检查下一个LSA。 (2)如果LSA是计算路由器本身发起的,则检查下一个LSA。 (3)如果是类型3 summary-LSA,且summary-LSA描述的目的集合等于路由器设置的某个区域地址范围(见3.5节),且该区域地址范围是激活的(即在区域范围内存在通过内部路径可达的一个或多个网络),则summary-LSA被忽略。 (4)此外,称LSA描述的目的为N(对于类型3 summary-LSA,可以通过网络/子网掩码作用LSA的链路状态ID获得),发起LSA的区域边界路由器为BR。查找路由表中对应的区域为Area A的 BR的表项,如果没有这个表项(即在Area A内BR不可达),则针对这个LSA不作任何操作,接着考虑列表中的下一个LSA;如果存在这个表项,则LSA描述了到目的N的一条外部路径,且该路径的cost等于到BR的距离和LSA中的cost的和。记该区域间路径的cost为IAC。 (5)接下来,在路由表中查找对应目的N的表项(如果N是AS的边界路由器,则查找 95 路由表中对应区域A的路由器的表项),如果不存在这个表项或者存在的表项的路径类型为“type 1 external”或“type 2 external”,则建立到达N的区域间路径,该路径的相应的区域为Area A,cost为IAC,下一跳为到BR的下一跳列表,Advertising路由器为BR。 (6)如果路由表中存在的表项的路径为内部区域路径,则对该LSA不作任何操作(内部区域路径始终是首选)。 (7)如果路由表中存在的表项的路径为区域间路径,如果新路径cost更小,则建立新的通过BR的路径,不考虑路由表中表项的路径;如果新路径具有相同的cost,则将其加入路由表项的路径列表中。 16.3检查transit区域的summary-LSA (这一步只在连接一个或多个具有承载交互流量的非主干区域的边界路由器中执行,)非主干当非主干区域可以传输transit流量(即transit域或者在Dijkstra算法第2步中TransitCapability设为TRUE的那些区域,见16.1),而某个区域边界路由器从属于一个或多个这样的区域时,这个区域边界路由器才进行这个操作。 进行下述计算的目的是检查transit域,看是否存在比16.1和16.2中计算的更短的路径。如果发现的路径等于或短于以前计算得到的路径,那么新发现的路径就要加进路由表中。 此计算也确定了那些如16.1和16.2中介绍的下一跳为虚拟链路的目的结点实际的下一跳。经过下述计算,如果那些经16.1和16.2计算得到的路径的虚拟下一跳依然没有找到,则丢弃这些路径。 计算过程如下。所有的transit区域的summary-LSA都要依次检查,每个summary-LSA描述了transit网络,由Area A到网络N(N的IP地址可以通过LSA包含的网络/子网的掩码屏蔽LSA的链路状态ID获得)或者到AS的边界路由器N(summary-LSA为类型4的情况下)。同时假定summary-LSA由区域边界路由器BR发起。 (1)如果summary-LSA通告的cost为LSInfinity;或者LSA的Ls age等于MaxAge, 则继续检查下一个LSA。 (2)如果summary-LSA的发起者是计算路由器本身,则检查下一个LSA。 (3)查找路由表中对应N的表项(如果N是AS的边界路由器,则查找主干区域相 关的路由器的表项)。如果表项不存在;或者表项的路由类型不是intra-area 和inter-area;或者表项对应的区域不是主干区域,则检查下一个LSA。也 就是说,此计算只更新16.1找到的intra-area的路由和16.2找到 inter-area路由。 (4)查找路由表中与Area A对应的通告路由器BR相关的表项,如果没找到,则 检查下一个LSA;否则到目的N的cost为BR的Area A的路由表项的cost 与LSA中通告的cost之和,记为IAC。 (5)如果IAC小于N的相应路由表项的cost,则用BR的下一跳列表替代N的下 一跳列表,同时将N的路由表cost设为IAC;如果IAC等于N的当前cost, 则将BR的下一跳列表加进N的下一跳列表中。无论那种情况,N的路由表项 对应的区域都保持为主干区域且路径类型(intra-area或inter-area)必 须保持不变。 值得注意的是,上面的计算并没有使不可达的目的变为可达,而只是可能找到了到可达目的的更短的路径。所有通过该计算找到的更短路径都会在路由表项得到建立,summary-LSA就会向其他区域通告这个更短的路径。 我们看一个计算的实例,考虑图17的AS,只有一个非主干区域(Area 1)把主干网络 96 分成了两块,为了保持主干的连接性,在路由器RT1和RT4间设置了虚拟链路。图17的右边,网络N1从属于主干网络,虚线表示在路由器RT5和网络N1之间存在的一个intra-area类型的主干路径(cost,20)要比在路由器RT4和网络N1间的(coat,100)更短。RT4和RT5都会向Area 1通告网络N1的summary-LSA。 ........................ . Area 1 (transit) . + . . | . +---+1 1+---+100 | . |RT2|----------|RT4|=========| . 1/+---+********* +---+ | . /******* . | . 1/*Virtual . | 1+---+/* Link . Net|work =======|RT1|* . | N1 +---+\ . | . \ . | . \ . | . 1\+---+1 1+---+20 | . |RT3|----------|RT5|=========| . +---+ +---+ | . . | ........................ + Figure 17: Routing through transit areas 当主干区域按照16.1节计算出最短路径树以后,RT1也就计算出了经过RT4到网络N1的路径。但是,RT5距离网络N1更近,所以Area 1内的所有路由器都会把去网络N1的包转发给RT5,而不是RT4。但实际上,经过上面计算检查了Area 1的summary-LSA后,RT1也会将发往网络N1的包转发给RT5。注意,在此例中,虚链路使得数据流量可以经过Area 1转发,但是真正的路径并不经过这个虚链路。换言之,虚链路允许transit流量经过某个区域转发,但并没有规定真正的准确路径。 16.4计算AS的外部路由 AS的外部路由通过检查AS-external-LSA计算获得,每个AS-external-LSA依次被检查,大多AS-external-LSA都描述了到特定IP地址的路由,AS-external-LSA也可以描述到AS(Destination ID = DefaultDestination,network/subnet mask = 0x00000000)的缺省路由。 针对每个AS-external-LSA: (1)如果LSA中的cost为LSInfinity;或者LSA的Ls age等于MaxAge,则继续 检查下一个LSA。 97 (2)如果LSA的发起者是计算路由器本身,则检查下一个LSA。 (3)记LSA描述的目的地点为N,N的地址可以通过网络/子网掩码作用LSA的链 路状态ID获得。对于发起该LSA的AS边界路由器(ASBR),查找路由表中 对应的表项(一般是每个从属区域对应一个),如果不存在表项(即ASBR不 可达),则忽略该LSA,检查下一个LSA。如果有相应的表项,则LSA描述了 一个到目的N的AS外部路径,检查AS-external-LSA中定义的转发地址, 该地址指出了包转发的下一个IP地址。如果转发地址是0.0.0.0,则包发给 ASBR自己。当有多个表项时,按下面的准则选出最优的表项:(a)如果 RFC1583Compatibility参数为disabled,则按16.4.1中所述删除相应表项 (b)无论那种情况,在剩下的表项中选出cost最小的表项,如果有多个最 小的,则选最大OSPF Area ID的表项。如果转发地址非0,则查找路由表中 转发地址的表项[24],与其匹配的表项必须说明了一个intra-area或者 inter-area的路径,如果没有匹配的表项,则忽略该LSA,检查列表中下一 个LSA。 (4)设ASBR/转发地址对应的最优的路由表项的cost为X,LSA包含的cost为Y。 X是链路状态度量值,Y是类型1或2的外部度量值。 (5)查找路由表目的N对应的表项,如果没有,则建立到N的AS外部路径,下一 跳等于转发地址的下一跳列表,通告路由器为ASBR。如果外部度量类型为1 型,则路径类型也设为1外部型且cost等于X,Y。如果外部度量型为2型, 路径类型设为2外部型,链路状态cost设为X,类型2的cost为Y。 (6)比较LSA描述的AS外部路径和N的路由表项表示的路径,如果新路径更短, 则用新的路径替换已有的路由表项的路径;如果新路径等于已有的路径,则 将新的加进N的路由表项列表中。 (a)Intra-area 和 inter-area 路径始终优于AS外部路径。 (b)类型1的外部路径犹豫类型2的外部路径。如果都是类型2的路径, 则最小度量的是最优的路径。 (c)如果新的AS外部路径和已有的路由表项中的路径没有区别,且 RFC1583Compatibility为 "disabled",则按16.4.1所述,选择到 ASBR/转发地址的基于内部AS路径的最优路径。 (d)如果新的AS外部路径和已有的路由表项中的路径没有区别,则选 择cost小的路径。比较时,类型1的外部路径要考虑到转发地址 的距离和通告类型1度量值(X,Y)的和;类型2则考虑到转发地 址的距离。 16.4.1 外部路径选择 当存在多个到ASBR或转发地址的intra-AS路径时,按下面规则进行选择,当到同一个ASBR要经过多个区域或者要从几个AS-external-LSA中选择一个时,就要用到这些规则,前者所有路径都终止在同一个ASBR,而后者终止在不同的ASBR或者转发地址。不管那种情况,每个路径都要按11节定义的路由表项分别表示。本节只适用RFC1583Compatibility 为"disabled"的情况。 从最高到最低的路径选择规则如下。利用这些规则进行选择仍有可能存在几个最高的路径,这种情况下,就要利用16.4中介绍的方法,依据cost进行选择。 ?非主干区域的intra-area路径始终是最优先选择的。 98 ?非其他路径,主干intra-area路径和inter-area路径具有同等优先级。 16.5递加更新,summary-LSA 当收到一个新的summary-LSA时,没有必要重新计算全部路由表。记summary-LSA描述的目的为N(N的地址可以通过网络/子网掩码作用LSA的链路状态ID获得),记Area A为LSA从属的域。分别存在下面两种情况: 第一种:Area A是主干区域或者路由器不是区域边界路由器。此时,要经过下述计算: 1、如果已经存在到目的N的inter-area路径且N对应的路由表项是无效的, 则保存该项的值以备比较,然后针对单一目的N,重新进行16.2节的计算, 计算时,检查所有Area A中到N的路由的summary-LSA。 2、如果路由器是从属一个或多个transit区域的区域边界路由器,则要重新 进行16.3的计算。如果计算导致了到某个AS边界路由器(类型4的 summary-LSA)或转发地址的cost/路径发生了变化,则所有的 AS-external-LSA都要进行16.4的计算,否则,如果N变得不可达,只要存 在可选的外部路由,则针对单一目的N要重新进行16.4的计算。 第二种:Area A是一个transit域且路由器是区域边界路由器。此时,要进行下述计 算。 1、如果N的路由表项包含了一个或多个用到Area A的inter-area路径,则 删除这些路径。如果删除了所有的路由表项的路径,则该表项变得无效。表 项的原值要保存以备后面进行比较。 2、按16.3节所述对单一目的N进行再计算,如果计算结果导致cost 增加,则整个路由表的计算要返回到16.1规定的Dijkstra算法计算。如果 到某个AS边界路由器(类型4的summary-LSA)或者某个转发地址的cost/ 路径发生了变化,则重新检查所有AS-external-LSA,并重新进行16.4节的 计算。否则,如果N变得不可达,只要存在可选的外部路由,则针对单一目 的N要重新进行16.4的计算。 16.6递加更新,AS-external-LSA 当收到一个新的AS-external-LSA时,没有必要重新计算全部路由表。记AS-external-LSA描述的目的为N,N的地址可以通过网络/子网掩码作用LSA的链路状态ID获得。如果已经存在到达目的的intra-area 或者 inter-area的路径,则不需要再进行计算(inter-area优先)。否则,只对那些目的为N的AS-external-LSA进行16.4节的计算。计算前,N的当前的路由表项要设为无效。 16.7路由表变化时产生的事件 有时路由表项发生变化会导致OSPF域边界路由器产生其他动作,这些路由器需要针对下述路由表的变化进行动作: ?某个路由表项的cost或者路径类型发生变化。如果表项的目的是一个网络或者AS边界路由器,且不是AS外部路由的简单变化,则路由器要产生新的summary-LSA(隐含每 99 个从属区域一个summary-LSA,包括主干域)。详见12.4.3一节。如果前面的advertised entry已经被删除或者无法再向某个特定的区域进行通告,则该LSA的LS设为MaxAge,并将该LSA从routing domain开始扩散。 ?与某个设置的虚链路对应的表项发生了变化。该表项的目的为区域边界路由器。这个变化可以是虚链路的cost或viability的修改。 如果表项指示该区域边界路由器是新近可达的,则相应的虚链路就可以使用了,此时产生一个针对此虚链路的InterfaceUp事件,该事件的作用时形成虚拟链路的一个虚拟邻接(见10.3),同时计算虚链路的IP接口地址和虚邻居的邻居IP地址。 如果表项指示区域边界路由器不再可达,则相应的虚链路及其邻接就要删除,这意味着产生一个InterfaceDown事件。 如果表项的cost变了,并且建立了一个完整的虚拟邻接,则必须产生一个主干的新的router-LSA。这也会造成路由表进一步的变化。 16.8 等价多路径 OSPF协议支持到任意目的的多条等价路由,这从上述计算路由表的过程以及路由表结构的定义中都可以看出来。 多路由的每一条都具有相同的类型(intra-area,,inter-area,,type 1 external或者 type 2 external)、相等的cost以及相同的所属区域,但他们说明了不同的下一跳和Advertising router。 并不要求所有运行OSPF的路由器都要维持等价路由,可以支持固定数目的等价路由。这并不影响本规范的任何算法。 100 附录: A:OSPF数据格式 本附录描述了OSPF协议包和OSPF LSAs的格式。OSPF直接运行在IP网络层,在数据 格式描述前,先描述OSPF的封装,然后描述OSPF的 Option域,它描述了OSPF域中的一 块可能或不可能被支持的不同能力,OSPF选项包含在Hello包/数据库描述包中的OSPF LSA 中。OSPF包的格式详节A.3。OSPF的LSA在A.4节出现。。。 A.1 OSPF包封装 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version # | Type | Packet length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Router ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Area ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | AuType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Version,2, Type= 1 Hello 2 Database Description 3 Link State Request 4 Link State Update 5 Link State Acknowledgment Router ID,The Router ID of the packet's source. Hello包:Type,1 这些包周期性的在各个接口上发送(包括虚链路)以便建立和维护邻居关系,另外Hello 包可以在具有多播或广播能力的物理网络上多播。 所有连接到同一网络的路由器必须就一些参数达成一致(网络掩码 \HelloInterval\RouterDeadInterval),这些参数在Hello包中,因此邻居间的不同是禁止 101 的.有关Hello包的接受的详细解释在10.5中解释,而发送在9.5中解释. 102 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 2 | 1 | Packet length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Router ID 路由器的最大或最小Ip地址 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 主干网0.0.0.0,Subnetted是Network Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | AuType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Network Mask | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hello包的间隔 | OptionsE | Designate 值 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 路由器变成Down的时间 RouterDeadInterval | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Designated Router 的IP地址 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Backup Designated Router的Ip地址 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 已发现的 Neighbor 邻居 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... 邻居 | A.2 Options Hello包,数据库描述和全部的LSA中有Option,它使OSPF路由器支持或不支持一些可选的 能力,并将它们的能力通知给其他路由器.通过它不同能力的机械的路由器可以相混在OSPF 域中. 当用Hello包时,Options允许路由器因能力不匹配拒绝一个邻居,作为选择,当其能力在数 据库描述包中被交换时,一个路由器可以选择不转发某个LSA给邻居,因为它的功能减少.最 后,LSA中列出的能力允许路由器将流量转发到功能减少了的路由器四周,通过将他们排斥 在路由表的计算之外. Ospf的Option中定义了5个比特,虽然只有E比特有详细的描述,下面对每个比特做了简单 的描述,路由器可以将不认识的Bit在发送时清0,相反的,路由器在遇到不认识的Bit时,不 理它 E-Bit 103 +------------------------------------+ | * | * | DC | EA | N/P | MC | E | * | +------------------------------------+ The Options field E-bit描述AS-External-LSA Flooded的方式,如3.6\9.5\10.8\12.1.2节所描述 MC-Bit 该Bit描述了按照[REF18]的规定,IP多播数据报是否被转发. N/P-Bit 该比特描述了[Ref19]中说明对Type-7 LSA处理 EA-Bit 该比特描述了如[Ref20]所描述的,路由器在接受和转发External-Attributes-LSA的意愿 DC-Bit 该比特描述了路由器对[Ref21]描述的”Demand Circuits”的处理, A.3 OSPF的包格式 有5个不同的OSPF包类型,全部以24个字节开始,Fisrt描述头,Then描述每个包以及各 部分. 除Hello包外,其他的包都涉及LSA列表,如,Link State Update包实现LSA在OSPF域中 Flooding,因此,OSPF协议不能分开,除非LSA的格式也明白,LSA在A.4中描述. 对OSPF包的接受程序见8.2,发送见8.1节. A.3.1 OSPF包头 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version # | Type | Packet length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Router ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Area ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | AuType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 104 A.3.2 Hello包 Hello包的Type=1,这些周期的在包括虚链路的所有接口上发送,以便建立和维护邻接关 系,另外Hello包,在具有多播或广播能力的物理网络上多播,以动态发现邻居. 所有的连接到同一网络的路由器必须同意某些参数(网络Mask,HelloInterval和 RouterDeadInterval)他们都在Hello包中,以便不同的不能成为邻居,详细的描述接受处理见 10.5节,发送见9.5节. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version # | 1 | Packet length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Router ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Area ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | AuType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Network Mask | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | HelloInterval | Options | Rtr Pri | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RouterDeadInterval | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Designated Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Backup Designated Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Neighbor | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Neighbor ... | 105 A 3.3数据库描述包 这些包在邻接关系初始化后进行交换,它们描述链路状态数据库的内容,可以用多个包描述,, 因此要用到xu询问-相应程序,,一个是主,一个是从,主发送数据库描述包,接受的从进行应 答,相应与发送的包的DD序号相关 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 2 | 2 | Packet length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Router ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Area ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | AuType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Interface MTU | Options E |0|0|0|0|0|I|M|MS +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | DD sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +- -+ | | +- An LSA Header -+ | | +- -+ | | +- -+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... | 数据库描述包和链路状态请求包\链路状态应答包的格式十分相像,主要部分都是条目 列表,每个条目描述一个链路状态数据库片,数据库描述包的发送在10.8中,接受在10.6中. 包的其他部分由一些链路状态数据库Pieces(或部分)组成,每个数据库中的LSA由一个 头见A4.1,他包含了唯一标识LSA合LSA’现行实例的全部信息. 106 A3.4链路状态请求包 链路状态请求包Type=3,在与邻居交换数据库描述包后,一个路由器可能会发现一些链 路状态数据库已过时, 链路状态请求包用于请求邻居更新这部分数据库,可以有多个数据库 要求包.路由器发送链路状态请求包要有准确的Instance,每个Instance通过LS序列号 (Sequence\LS Checksum\Ls Age)定义,尽管这些域在链路状态请求中没什么特殊,路由器可 能更新的作为应答,, 发送见19.9节,接受见10.7节 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version # | 3 | Packet length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Router ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Area ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | AuType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link State ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Advertising Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... | 每个LSA请求用(LS Type\Link State Id\Advertising Router)来唯一标识LSA,但不 一定是Instance,链路状态包是明确要求更新的实例(不管他是什么). A 3.5链路状态更新包(Type=4) 这些包实行LSA的Flooding ,每个链路状态更新包携带着距离发源地一跳(Hop)以上的 LSA的集合,一些LSA可以包含进一个包中. 链路状态更新包在那些支持多播/广播的物理网络上进行多播,,以便Flooding程序更 可靠,Flooded LSAs用链路状态确认包进行确认,如果某个LSAs 要重发,重发的LSA经常用 单播方式进行链路状态更新包的承载,,更多的有关可靠Flooding LSA的信息见13节 A3.6链路状态确认包(Type=5) 为使FloodingLSA更可靠,被广播(Flooded)的LSA要显式地确认,这种确认通过发送合 接受链路状态确认包实现,多个LSA可以在一个链路状态确认包中确认. 依靠发送地接口和相应的链路状态更新包的发送者的状态, 107 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version # | 4 | Packet length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Router ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Area ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | AuType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | # LSAs | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +- +-+ | LSAs | +- +-+ | ... | A.4 LSA formats 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version # | 4 | Packet length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Router ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Area ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | AuType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authentication | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | # LSAs | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +- +-+ | LSAs | +- +-+ 108 有5种不同的类型LSA,都以20字节标准开始,A.4.1中将描述. 每个LSA 描述OSPF路由域的一块,每个路由器发起一个Router-Lsa,另外,一旦路由器被 选为DR,它将发起一个Network-Lsa,也有其他的LSA发起,(见12.4),所有的LSA然后被 Flooded整个OSPF域,flooding 算法是可靠的,确信所有的路由器有相同的LSA集合,(见13 节有关Lsa算法),这种集合叫Link-State数据库,利用链路状态数据库,每个路由器创建最短路 径树,产生路由表,(见11节),详细的路由表建立过程节16中描述. A.4.1 LSA头格式 在此定义5种不同类型的LSAs,每个LSA由20字节的标准头(A4.1将作解释,然后分别 介绍不同的LSA. 每个LSA描述A piece 的OSPF路由域,每个路由器发起一个路由器LSA(Router-LSA), 无论那个路由器选作Designated路由器,它将发起一个网络LSA(Network-LSA),其它类型的 LSA也可能发起,(节12.4).所有的LSAs然后flooded进入整个OSPF的路由域,泛滥 Flooding算法使可靠,确信所有的路由器有相同的LSAs集合(13节有很多泛滥Flooding算 法的信息),这些LSAs的集合叫链路状态数据库. 从该链路状态数据库出发,每个路由器建立以它自己为根的一个最短路径树,这可以产生 一个路由表(见节11),路由表的建立见节16. A 4.1路由器头 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS age | Options | LS type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link State ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Advertising Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS checksum | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 所有的LSAs有一个共同的20字节的头,这个头包含标识LSA唯一性的足够信息(LS Type,Link State ID,Advertising Router). LSA 的多个Instances可能在同一时间存在路 由域中,决定那个Instance更新是必要.这通过检查LSA 头中的LS Age\LS SequenceNumber 和LS Checksum域来实现. LS Type Description 1 Router-LSAs 2 Network-LSAs 3 Summary-LSAs (IP network) 4 Summary-LSAs (ASBR) 5 AS-external-LSAs 109 Link State ID 这部分定义了LSA所 定义的Internet环境的Portion,决定其内容的是LSA’S的LS Type, 例如在Network-LSA的Link State ID是网络Designated Router的IP接口地址.(IP地址 就源于它),进一步的讨论见12.1.4节. Advertising Router 发起LSA的路由器的Router ID.例如,Network-LSAs的该区域=网络Designated 路由器的 Router ID. LS sequence number 检测是老的LSA还是复制的,连续的LSA的Instance给出连续的LS Sequence Number.12.1.6 A.4.2 Router-LSAs +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS age | Options | 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link State ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Advertising Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS checksum | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0 |V|E|B| 0 | # links | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | # TOS | metric | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TOS | 0 | TOS metric | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... | Type=1,一个Area中的路由器发起一个Router-LSA ,该LSA描述了路由器与Area间的 连接状态和Cost,所有的到Area的路由器的连接必须在一个Router-LSA中描述,详见 12.4.1. 110 在Router-LSA中,Link State ID=路由器的OSPF Router ID,它只在一个Area中Flooded. V比特: 当V=1,路由器是将所描述的Area当成Transit的个虚连接的终点(V是虚连接的终点). 当E=1,路器是AS边界路由器(E表示边界External) 当B=1,路由器是Area边界路由器. #LINKs 表示在此LSA中描述的路由器连接的数量,它必须是路由器到Area的全部连接的总和. 一下的区域用于描述每个路由器的连接(如接口),每个路由器连接是分类的(见下面),Type域指出了连接所属的种类,它可以是到Transi网\另一路由器\或一个Stub网的连接,其他区域的描述值由连接的Type类型值决定.例如,每个连接有一个相关的32比特的Link Data field,连接到Stub是它等于网络的IP地址掩码,而其他连接类型LinkData Field描述路由器接口的IP地址 Type Description 1 Point-to-point connection to another router 2 Connection to a transit network 3 Connection to a stub network 4 Virtual link Link ID 标识该路由器连接所连的对象,值由Link’S的Type决定,当连接到也发起一个LSA 的对象时,(如另一个路由器或一个Transit网络),Link ID=邻居的LSA’s的Link State ID.这样提供了在进行路由表算法时从链路状态数据库中查找邻居的Key,详见12.2节 Type Link ID ______________________________________ 1 Neighboring router's Router ID 2 IP address of Designated Router 3 IP network/subnet number 4 Neighboring router's Router ID Link Data 数值仍由LINK’s Type 域决定,与Stub网的连接其Link Data=网络的IP地址掩码.对Unnumber的点对点连接,它=接口的MIB-II(IFINDEX VALE),对其他的连接类型它是网络接口的IP Address,这些信息的后面部分在路由表的建立过程中是必须的,当计算Ip地址的下一跳时,见16.1.1 #TOS 给该链路的不同服务类型代价值的数量(Number),不包含要求的连接代价. (referred to as the TOS 0 metric in [Ref9]).例如如果没有给出其他的TOS,该域为0. Metric 使用本路由链路的代价 为了同前面的OSPF规范向后兼容,附加的TOS-说明信息也可能被包含,在每个连接,对每个想要的TOS,TOS TOS-Specific连接信息可以编码如下: TOS IP Type of Service that this metric refers to. The encoding of TOS in OSPF LSAs is described in Section 12.3. 111 TOS metric TOS-specific metric information. A.4.3 Network-LSAs 网络LSA(Network-LSA)是为一个支持2个以上路由器的Area中的每一个广播和NBMA 网络而发起的,由网络的Designated路由器发起,它描述网络所连的所有路由器,包括 Designated路由器本身,LSA的Link State ID域列出了Designated路由器的IP接口地址. 从网络到路由器的距离是0,这就是为什么Metric在Network-LSA中不需说明的原因,详见 12.4.2 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS age | Options | 2 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link State ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Advertising Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS checksum | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Network Mask | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Attached Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... | A.4.4 Summary-LSAs Area边缘路由器发出,Summary-LSA描述区域间(Inter-Area)目的地,详细请见12.4.3 Type=3是用于(所描述的)目的地为IP网络,在这种情况下,LSA的Link State ID=IP Network (如果有可能Link State ID可以有1个或多个网络的”Host”比特设置,详细见附录 E;当目的地是一个As边界苦于去时,Type,4,Link State ID,AS边界路由器的Router ID(要看,为什么必须为每个ASBR广播Location见16.4节),除了Link State Id域的不 同外,Type,3和Type,4是相同的。 对Stub区域,Type,3的Summary也可以用于描述(每个区域Area一个)的缺省路由, Default Summary路由用于Stub Area,以代替泛滥全部的外部路由,当描述一个缺省的 Summary路由时,Summary,LSA的Link State ID被设置成DefaultDestination(0.0.0.0), 且NetWork,LSA Mask也设成(0.0.0.0). Network Mask 对类型3的Summary,LSA,它指出了目标网络的IP地址Mask,例如,当广播一个A 112 类网络地址时,可以用0xff000000.本域对Type,4的Summary,LSA来说必须为0, Metric 该路由的代价,同Router,LSA中的接口Cost的单位相同 也可以(在其中)含有附加TOS说明信息,以同以前的OSPF版本兼容,对每个期望的 TOS,其编码如下: TOS:该Metric指的IP服务类型,其在OSPF 中的编码见12.3节的描述 TOS Metric:TOS说明的Metric信息 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS age | Options | 3 or 4 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link State ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Advertising Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS checksum | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Network Mask | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0 | metric | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TOS | TOS metric | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... | A.4.5 AS-External-LSAs Type=5,这些LSA源自AS边界路由器,描述到AS外部的信息,详12.4.3节 该LSA经常用来描述一个详细外部目的地,他们的Link State ID说明一个IP网络号(如 果需要,Link State ID中可以含有1到多个主机比特,见附录E),该LSA也可以用来描述 缺省的路由,缺省的路由用在目的地没有路由说明的时候,当描述缺省的路由时,Link State ID设成DefaultDestination(0.0.0.0)且Network Mask,(0.0.0.0)。 Network Mask: 被广播的IP地址掩码,如A类网络掩码是0xff000000 Bit E : 外部Metric的类型,如E,1,Metric类型是2,说明Metric比其他路径都大;E,1,说 明和链路状态有同样的单位, Metric: 本路径的花费,Interpretation depends on the external type indication (bit E above). 113 Forwarding address 到被广播的目的地的数据流,将要在此地址被转发,0.0.0.0表示数据流在发起LSA的路由 器处转发。 External Route Tag: 与每个外部路由联系的32Bit,它不是OSPF协议本身用的,它用于两个AS边界路由器间的 通信。 也可以(在其中)含有附加TOS说明信息,以同以前的OSPF版本兼容,对每个期望的 TOS,其编码如下: TOS:该Metric指的IP服务类型,其在OSPF 中的编码见12.3节的描述 TOS Metric:TOS说明的Metric信息 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS age | Options | 5 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Link State ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Advertising Router | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LS checksum | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Network Mask | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |E| 0 | metric | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Forwarding address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | External Route Tag | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |E| TOS | TOS metric | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Forwarding address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | External Route Tag | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... | B. Architectural Constants 一些OSPF协议参数具有固定的结构值,这些参数在本文中被指定用一些名字如 LSRefreshTime,同样的命名习惯用于可配置参数,他们在附录C中定义. 下面是每个结构常量的名字,和他们的Value,和功能的简短描述: 114 LSRefreshTime: 某个特定的LSA的不同发起时间的最大间隔.如果路由器自己发起的LSA 的LS AgeField到达LSRefreshTime,将为此LSA发起一个新的Instance,尽管LSA的内容(除头外)是完全相同的,LSRefreshTime=30分钟. MinLsInterval 某个LSA发起间隔的最小时间. MinLSArrival: 对某个特定的LSA,在Flooding期间,接受新Instance间必须有的最小时间间隔,过于频繁的LSA Instance接受是不行的,MinLSAArrival=1秒. MaxAge 一个LSA可以 获得的最大Age,它将Reflooding以Flush掉路由域中的LSA (见14节),有MaxAge的LSA不用于路由的计算,MaxAge=1小时. CheckAge 当一个链路状态数据库中LSA的Age是CheckAge的倍数是,计算LSA的校验,不正确的Checksum说明存在严重错误,CheckAge=5分钟 MaxAgeDiff 当一个LSA被Flooded到整个AS,可能出现的最大时间差.LSA在Router中大多数时间在等待排队,(不老化),MaxAgeDiff=15分钟 C. Configurable Constants OSPF有很多可配置的参数,他们在下面列出,他们按功能分类(Area参数/接口参数)。相同的值给一些参数。 一些参数的设置在某些路由器组中必须是一致的,例如一个Area中的所有路由器必须同意Area参数,而与一个网络相连的所有路由器必须同意网络的IP网络号和掩码, 一些参数可以通过本规程以外的路由器的算法决定(如通过SLIP线连到路由器的主机地址),从OSPF的角度看,这些项仍是可以配置的。 C.1全局变量 一般来说,每个Area运行一个独立的OSPF协议Copy,因此,多数配置参数是建立在每个area d的基础上的,少数全局配置参数如下: Router ID 该32比特的数字在一个自治系统中是唯一标识路由器的.RouterID的一个算法是选择分配该路由器的最大或最小的IP地址.如果路由器的OSPF Router ID发生了改变,路由器的OSPF软件在新Router ID发生作用前必须复位,在复位前,为了改变它的Router ID,路由器必须Flush它发到路由与的LSA(见14.1),或者坚持最多Maxage分钟. Rfc1583Compatibility 当从多个AS-External-LSA广告中选择相同的目的地时控制,16.4节用的优先规则.当置为”Enable”时,优先法则保留RFC1583中的说明,当置出”Disable”时,优先法则是16.4.1中的那些状态,他们防止发自不同Area的相同的目的地的AS-External-LSA形成循环(见G.7),缺省微为Enabe. 115 为了减少路由循环的机会,一个OSPF路由域的所有OSPF路由器有相同的RFC1583Compatibility设置,当有路由器没有更新16.4.1描述的功能时,所有的路由器必须配置RFC1583Compatility为”Enable”,防止所有的路由循环 C.2 Area Parameters 所有属于同一个Area内的路由器必须同意Area配置,两个路由器的不协调将导致他们不可能成为邻接,从而阻止路协议和数据的交流,下面的项目必须在一个Area中配置: Area ID 这32个比特定义Area的标识,0.0.0.0为Backbone保留,如果Area是一个子网,Area ID=子网的IP Network Number. (List Of Address Ranges)地址范围列表 一个OSPF域定义成一个地址列表,每个地址范围由 以下组成: [IP Address,Mask] 描述地址范围中IP地址的集合,网络和主机根据他们是否在一个Area的地址范围内来分配Area,路由器与所连网络Area成员关系决定它是否属于多个Area. Status 设成Advertise还是DoNotAdvertise,路由信息在Area边界浓缩.Area的外部的每个地址范围至多一个路由信息(通过Summary-LSA)广播(Advertise).,路由只有且只有(IfAndOnlyIf)地址范围的状态被设成Advertise时被(向Area)广播.Unadvertised的地址范围在某个网络中存在为其他Areas故意隐藏,Advertise是缺省设置. 例如:一个子网将成为一个OSPF的Area,此Area必须配置为一个独立的地址范围,他的IP地址是子网地址,它的Mask是自然的A\B\C类地址Mask,一个对该Area的独立的路由被广播到外面,以描绘整个子网. ExternalRouterCapability AS-External-LSA将否在整个Area中Flooded,如果AS-External-LSA排斥在Area外,该Area是”Stub”,Stub内部到外部目的地将基于一个为一的缺省Summary路由,Backbone不能配置成Stub,虚链路也不能配置通过Stub Area,更多的信息见3.6节. StubDefaultCost 如果Area配置成Stub Area,路由器自己是Area边缘路由器,那么StubDefaultCost暗示了路由器必须广播进Area的缺省Summary-LSA(Cost)代价值. C.3 路由接口参数 一些可以配置的接口参数(如IP接口地址和子网掩码)其实暗示了所连节连接网络的特性,,因此,在网络所连接的所有路由器间保持一致,这些参数要在路由器接口配置: IP接口地址:该接口的IP协议地址,它在整个Internet中唯一的标识路由器,点到点链路不要求一个Ip地址,这样的点到点网络叫”Unnumbered” IP接口掩码:也即子网/网络掩码,这暗示了标识所连网络的IP接口地址部分.用IP接口掩码Masking IP接口地址,产生IP Network Number,没有定义在点到点网络/虚连接IP接口的Mask.在这些网络中,链路本身不分配IP Network Number,因此链路的每一边的地址是独立分配的,(如果分配) Area ID:相连的网络所属的OSPF Area 116 接口的输出代价(Cost):在接口上发送包(Packet)的代价,在Link State Metric中表示,它在路由器-LSA 中作为接口代价广播,一般大于0 RxmtInterval:属于该接口的邻接之间LSA重传的秒数.也用与重传数据库描述包和Link State Request包,它最好大于两个与网络相连的路由器间往返的延迟,所设的值要保守或不必重传,本Area网络的样本Value=5秒. InfTransDelay:估计Link State Update Packed在接口上传输所花的秒数, Update包含有的LSA必须在发送前使他们的Age加上该数,该值要考虑到接口上传输和传播的延迟.必须大于0,本地网地代表=1秒。 路由器优先级:8比特无符合整数,当连接到一个网上地两个路由器尝试成为DR时,具有最高优先级地优先,如果仍分不出具有Highest路由ID地路由器优先,该处为0的路由器不能成为所联网的DR,该value只在广播和NBMA网络接口配置. HelloInterval:接口上路由器发送Hello包的间隔时间(秒),在HELLO包中广播,同一网络上的所有路由器必须有同一值.HELLOInterval越小,拓扑改变越快,但将会有更多的协议流发生,样本X.25=30/本地网=10秒. RouterDeadInterval:停止听到路由器的Hello包后,到邻居声明Down前的秒数,也通过Hello包发送,它将是HelloInterval的几倍(如4),该值也要全网统一 AuType(略) Authentication Key(略) C.4 虚链路参数 虚拟链路用于恢复/增加Backbone的连接,虚拟链路可以在任何一对具有到共同Area(Non-Backbone)接口的边界路由器上配置.虚拟链路在Backbone图中作为Unnumbered点到点链路,虚拟链路必须在Area的两个边缘路由器上配置。 一个虚拟的链路在Backbone的Router_LSA中当作Backbone的独立路由器接口,因此,它有连接到路由器接口的所有参数(见C.3节)。虽然虚链路当成一个Unnumber的点到点连接,它仍然(Do)有一个相关的IP接口地址,此地址作为它沿虚链路发送Ospf的协议包的IP原(地址)。并在路由表建立期间被动态地设置,接口输出代价也被动态的设成两个路由器间的内部路径的代价,参数RxmtInterval也必须配置,且最好设成稍大于两个路由器间的往返时间,这种对虚连接的估计是困难的,最好将其一边估计大一点,虚链路中不用Router Priority。 一个虚连接用下面的两个可配置参数定义:虚链路另一端的Router ID和虚链路在其中运行的非骨干Area(指出作为虚连接的Rransit Area) C.5.NBMA 网络参数 OSPF对NBMA网络像对待Broadcast网络一样,因为有很多路由器连接在网络上,要为网络选择一个代表路由器,此路由器然后发起一个Network,LSA,它列出了NBMA网络上所连接的所有路由器。 但是由于缺少广播能力,它可能在Designated Router选择时需要配置参数,这些参数将只用于配置那些有能力成为DR的路由器(如那些网络的Router Priorty非零),同时又不具备发现邻居的程序: 所有其他邻居路由器列表: 所有连接到NBMA网络的其他路由器列表,每个路由器列出它们在网络中的IP地址, 117 因此,对列出的每个路由器,可能成为DR的能力必须被定义,当一个NBMA网络的接口出现时,路由器发送Hello包只发给那些有能力成为DR的邻居,直到发现DR的标识为止。 PollInterval: 如果一个邻居路由器变成Inactive(RouterDeadInterval 秒后没有发现Hello包),以减少的PollInterval的间隔继续发送Hello包,PollInterval远大于HelloInterval,建议X.25网络的典型值是俩分钟。 C.6.点到多点网络参数 在点到多点网络中,配置网络中可达的邻居是必要的,每个邻居用IP地址表示,DR路由器在点到多点的网络中是不必要的,故不必要配置DR能力 另外,点到多点网络的邻居可以通过低层协议(如Inverse ARP)来动态地发现。 C.7.主机路由参数 主机路由在Router,LSAs中同Stub网络一样以Mask,0xffffffff被广播,它们或者指出了路由器到点到点网络地接口,Looped路由器接口,或者直接连接地IP主机地址,(如通过Slip限连接地),对每个直接连接到路由器地主机下面地条目是必须配置的: 主机IP地址 连接到主机的Cost:发送包到主机的Cost,按照连接状态的Metric。但是主机只有一个到网络的连接,实际的配置Cost是不重要的 Area ID:主机所属于的OSPF区域。 D. Authentication(略) E.分配Link State ID的一种算法 AS-external-LSAs and summary-LSAs中Link State ID长设成所描述的网络的IP地址,但是如果在link State ID中有一个或多个网络主机“Host”比特可以设置,这允许路由器路由器为具有相同IP地址但具有不同的掩码的网络发起不同的LSA’s,这样的网络可以在出现子网和超网的地方(见[Ref10] (CIDR))。 这里为Link State ID设Host比特给出一种可能的算法,选择这种算法是一种本地决定,单独的路由器可以自有的使用不同的算法,因为首影响的LSA只是该路由器本身发出的.本算法唯一的要求是网络的IP地址要用作Link State ID(无论是否可能).这样与早期的RFC1583的OSPF实现协同有了最大的可能. 下面的算法是对AS-External-LSA,它是透明的(Clarity),完全相同的算法可以用在Summary-LSA,考虑到路由器希望为具有地址NA和Mask NM1的网络发起一AS-External-LSA,下面 的步骤用于决定LSA 的Link State ID: (1) 决定路由器是否已经用NA 作为Link State ID发起一个AS-external-LSA (在 118 此LSA中,路由器本身将作为LSA的广告路由器被列出),如不,Link State ID=NA,算法 结束,否则(已经在发起), (2) 从已经存在的AS-External-LSA中取得Mask=NM2,有两种情况: *NM1比NM2 长,在新LSA 中Link State ID=网络[NA,NM1]+设置的Host比特(如=NA或 NM1中为0的所有比特,这是网络[NA,NM1]的广播地址 *NM2比NM1长,改变已存在的LSA (将NA为Link State ID)增加Sequence Number来 说明[NA,NM1]网的LSA,同时改变mask=NM1,加入Cost.然后为老的网络[NA,NM2]发起一个新 的LSA,其LinkState ID=NA或上NM2中没有置1的位 上面的算法假设所有的Masks是连续的,这可以保证当有相同的地址的两个网络,一个 的Mask比另一个明确,同时也假设没有网络中存在一个地址等于另一个网络的广播地址,在 这两个假设的基础上Link State Id是唯一的,上面的算法也可以说成:当发起一个 AS-External-LSA ,尽量将NetworkNumber=Link State ID,当发生冲突是,检查会发现,一个 是另一个的子网,对较小Specific的网络用网络号=Link State ID,对较多Specific的,用 网络的广播地址代替(如加入主机比特=1),如果较多specific的网络是先发的,这就促使你 同时发起两个LSAs . As an example of the algorithm, consider its operation when the following sequence of events occurs in a single router (Router A). (1) Router A wants to originate an AS-external-LSA for [10.0.0.0,255.255.255.0]: (a) A Link State ID of 10.0.0.0 is used. (2) Router A then wants to originate an AS-external-LSA for [10.0.0.0,255.255.0.0]: (a) The LSA for [10.0.0,0,255.255.255.0] is reoriginated using a new Link State ID of 10.0.0.255. (b) A Link State ID of 10.0.0.0 is used for [10.0.0.0,255.255.0.0]. (3) Router A then wants to originate an AS-external-LSA for [10.0.0.0,255.0.0.0]: (a) The LSA for [10.0.0.0,255.255.0.0] is reoriginated using a new Link State ID of 10.0.255.255. (b) A Link State ID of 10.0.0.0 is used for [10.0.0.0,255.0.0.0]. (c) The network [10.0.0.0,255.255.255.0] keeps its Link State ID of 10.0.0.255. 119 F.到相同网络的多接口 至少有2中方法支持相同的IP子网的多个物理接口,两种方法都将与RFC1583协调实现(本文也然),下面作个简介,假设每个端口有独立的IP地址(否则对多接口的支持更多的是连接水(Link-Level)和ARP流量而非OSPF流量.) Method 1: 在两个接口上运行全部的OSPF功能,收发Hellos,Flooding,支持独立的接口和每个接口邻居FSMs.因为邻居可以用IP地址进行识别(在广播和NBMA中). Method 1 有以下的不利: (1) 增加了邻居和邻接的总数, (2) 失去在双向上测试,因为双向测试是基于Router ID的 (3) 在Designated Router的选择时不得不同时考虑两个接口.因为如果你同时申 明两个都是DR,你将搞乱Tie-Breaker(which is Router ID). Method 2: 在一个接口上运行OSPF(我们叫它主接口),但在Router-LSA上包含主和次接口. Method 2 有以下的不利: (1) 在Secondary接口上,失去双向测试 当主接口失败时,你必须将次接口提升至主接口的状态. 120 References [Ref1] McQuillan, J., I. Richer and E. Rosen, "ARPANET Routing Algorithm Improvements", BBN Technical Report 3803, April 1978. 1978年,ARPANET 路由算法的改进 [Ref2] Digital Equipment Corporation, "Information processing systems -- Data communications -- Intermediate System to Intermediate System Intra-Domain Routing Protocol", October 1987. 1987年,信息处理系统-数据通信—中间系统-中间系统内部域路由协议 [Ref3] McQuillan, J. et.al., "The New Routing Algorithm for the ARPANET", IEEE Transactions on Communications, May 1980. ARPANET的新路由算法 [Ref4] Perlman, R., "Fault-Tolerant Broadcast of Routing Information", Computer Networks, December 1983. 路由信息的容错广播 [Ref5] Postel, J., "Internet Protocol", STD 5, RFC 791, USC/Information Sciences Institute, September 1981. 因特网协议 [Ref6] McKenzie, A., "ISO Transport Protocol specification ISO DP 8073", RFC 905, ISO, April 1984. ISO传输协议规范ISO DP 8073 [Ref7] Deering, S., "Host extensions for IP multicasting", STD 5, RFC 1112, Stanford University, May 1988. IP多播的主机扩展 [Ref8] McCloghrie, K., and M. Rose, "Management Information Base for network management of TCP/IP-based internets: MIB-II", STD 17, RFC 1213, Hughes LAN Systems, Performance Systems International, March 1991. 基于TCP/IP的因特网络管理的管理信息基 [Ref9] Moy, J., "OSPF Version 2", RFC 1583, Proteon, Inc., March 1994. OSPF第2版 [Ref10] Fuller, V., T. Li, J. Yu, and K. Varadhan, "Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy", RFC1519, BARRNet, cisco, MERIT, OARnet, September 1993. 不分类域间路由 [Ref11] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, USC/Information Sciences Institute, October 1994. 分配数字NUMBER 121 [Ref12] Almquist, P., "Type of Service in the Internet Protocol Suite", RFC 1349, July 1992. Internet Protocol组的服务类型 [Ref13] Leiner, B., et.al., "The DARPA Internet Protocol Suite", DDN Protocol Handbook, April 1985. DARPA INTERNET Protocol组 [Ref14] Bradley, T., and C. Brown, "Inverse Address Resolution Protocol", RFC 1293, January 1992. 反向地址解决协议 [Ref15] deSouza, O., and M. Rodrigues, "Guidelines for Running OSPF Over Frame Relay Networks", RFC 1586, March 1994. 在FR网上运行OSPF的指导方针 [Ref16] Bellovin, S., "Security Problems in the TCP/IP Protocol Suite", ACM Computer Communications Review, Volume 19, Number 2, pp. 32-38, April 1989. TCP/IP组中的保密问题 [Ref17] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April 1992. MD5信息-文摘算法 [Ref18] Moy, J., "Multicast Extensions to OSPF", RFC 1584, Proteon, Inc., March 1994. OSPF的多播扩展 [Ref19] Coltun, R. and V. Fuller, "The OSPF NSSA Option", RFC 1587, RainbowBridge Communications, Stanford University, March 1994. [Ref20] Ferguson, D., "The OSPF External Attributes LSA", work in progress. OSPF的外部属性LSA [Ref21] Moy, J., "Extending OSPF to Support Demand Circuits", RFC 1793, Cascade, April 1995. [Ref22] Mogul, J. and S. Deering, "Path MTU Discovery", RFC 1191, DECWRL, Stanford University, November 1990. 路径MTU的发现 [Ref23] Rekhter, Y. and T. Li, "A Border Gateway Protocol 4 (BGP- 4)", RFC 1771, T.J. Watson Research Center, IBM Corp., cisco Systems, March 1995. 边界网关协议4 :BGP-4 [Ref24] Hinden, R., "Internet Routing Protocol Standardization Criteria", BBN, October 1991. 因特网路由协议标准化标准 122 注解 [1]The graph's vertices represent either routers, transit networks, or stub networks. Since routers may belong to multiple areas, it is not possible to color the graph's vertices. [2]It is possible for all of a router's interfaces to be unnumbered point-to-point links. In this case, an IP address must be assigned to the router. This address will then be advertised in the router's router-LSA as a host route. [3]Note that in these cases both interfaces, the non-virtual and the virtual, would have the same IP address. [4]Note that no host route is generated for, and no IP packets can be addressed to, interfaces to unnumbered point-to-point networks. This is regardless of such an interface's state. [5]It is instructive to see what happens when the Designated Router for the network crashes. Call the Designated Router for the network RT1, and the Backup Designated Router RT2. If Router RT1 crashes (or maybe its interface to the network dies), the other routers on the network will detect RT1's absence within RouterDeadInterval seconds. All routers may not detect this at precisely the same time; the routers that detect RT1's absence before RT2 does will, for a time, select RT2 to be both Designated Router and Backup Designated Router. When RT2 detects that RT1 is gone it will move itself to Designated Router. At this time, the remaining router having highest Router Priority will be selected as Backup Designated Router. [6]On point-to-point networks, the lower level protocols indicate whether the neighbor is up and running. Likewise, existence of the neighbor on virtual links is indicated by the routing table calculation. However, in both these cases, the Hello Protocol is still used. This ensures that communication between the neighbors is bidirectional, and that each of the neighbors has a functioning routing protocol layer. [7]When the identity of the Designated Router is changing, it may be quite common for a neighbor in this state to send the router a Database Description packet; this means that there is some momentary disagreement on the Designated Router's identity. 123 [8]Note that it is possible for a router to resynchronize any of its fully established adjacencies by setting the adjacency's state back to ExStart. This will cause the other end of the adjacency to process a SeqNumberMismatch event, and therefore to also go back to ExStart state. [9]The address space of IP networks and the address space of OSPF Router IDs may overlap. That is, a network may have an IP address which is identical (when considered as a 32-bit number) to some router's Router ID. [10]"Discard" entries are necessary to ensure that route summarization at area boundaries will not cause packet looping. [11]It is assumed that, for two different address ranges matching the destination, one range is more specific than the other. Non- contiguous subnet masks can be configured to violate this assumption. Such subnet mask configurations cannot be handled by the OSPF protocol. [12]MaxAgeDiff is an architectural constant. It indicates the maximum dispersion of ages, in seconds, that can occur for a single LSA instance as it is flooded throughout the routing domain. If two LSAs differ by more than this, they are assumed to be different instances of the same LSA. This can occur when a router restarts and loses track of the LSA's previous LS sequence number. See Section 13.4 for more details. [13]When two LSAs have different LS checksums, they are assumed to be separate instances. This can occur when a router restarts, and loses track of the LSA's previous LS sequence number. In the case where the two LSAs have the same LS sequence number, it is not possible to determine which LSA is actually newer. However, if the wrong LSA is accepted as newer, the originating router will simply originate another instance. See Section 13.4 for further details. [14]There is one instance where a lookup must be done based on partial information. This is during the routing table calculation, when a network-LSA must be found based solely on its Link State ID. The lookup in this case is still well defined, since no two network- LSAs can have the same Link State ID. [15]This is the way RFC 1583 specified point-to-point representation. It has three advantages: a) it does not require allocating a subnet 124 to the point-to-point link, b) it tends to bias the routing so that packets destined for the point-to-point interface will actually be received over the interface (which is useful for diagnostic purposes) and c) it allows network bootstrapping of a neighbor, without requiring that the bootstrap program contain an OSPF implementation. [16]This is the more traditional point-to-point representation used by protocols such as RIP. [17]This clause covers the case: Inter-area routes are not summarized to the backbone. This is because inter-area routes are always associated with the backbone area. [18]This clause is only invoked when a non-backbone Area A supports transit data traffic (i.e., has TransitCapability set to TRUE). For example, in the area configuration of Figure 6, Area 2 can support transit traffic due to the configured virtual link between Routers RT10 and RT11. As a result, Router RT11 need only originate a single summary-LSA into Area 2 (having the collapsed destination N9-N11,H1), since all of Router RT11's other eligible routes have next hops belonging to Area 2 itself (and as such only need be advertised by other area border routers; in this case, Routers RT10 and RT7). [19]By keeping more information in the routing table, it is possible for an implementation to recalculate the shortest path tree for only a single area. In fact, there are incremental algorithms that allow an implementation to recalculate only a portion of a single area's shortest path tree [Ref1]. However, these algorithms are beyond the scope of this specification. [20]This is how the Link state request list is emptied, which eventually causes the neighbor state to transition to Full. See Section 10.9 for more details. [21]It should be a relatively rare occurrence for an LSA's LS age to reach MaxAge in this fashion. Usually, the LSA will be replaced by a more recent instance before it ages out. [22]Strictly speaking, because of equal-cost multipath, the algorithm does not create a tree. We continue to use the "tree" terminology because that is what occurs most often in the existing literature. [23]Note that the presence of any link back to V is sufficient; it 125 need not be the matching half of the link under consideration from V to W. This is enough to ensure that, before data traffic flows between a pair of neighboring routers, their link state databases will be synchronized. [24]When the forwarding address is non-zero, it should point to a router belonging to another Autonomous System. See Section 12.4.4 (2) for more details. 126
本文档为【OSPF协议V2】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_842972
暂无简介~
格式:doc
大小:602KB
软件:Word
页数:227
分类:互联网
上传时间:2017-09-21
浏览量:25