应用路由选择协议的堆叠式路由器 【技术领域】
本发明涉及基于信息包的通讯系统,该系统采用编址信息包进行系统中单元之间的信息传输,更特别地,是关于多个路由选择实体的“堆叠”或“层叠”以使其看起来构成一个单一的逻辑路由选择实体。本发明特别地涉及路由选择协议的改编,特别是路由器的“堆叠”或“层叠”中的开放式最短路径第一协议(OSPF协议,open shortest path first protocol)。
背景技术
具有多个用于与其它单元或用户连接的端口的网络单元如转换器,通常都由固定数量的端口组成,以实现运作地效率。已知“堆叠”或“层叠”这些单元可以通过相互连接以及共用一个控制或管理系统以由多个单独的单元构建一个单一的转换或路由选择实体来实现。一个特定的例子已在我们2002年2月2日申请的英国专利(申请号:0202425.5)中被公开(公开号GB-2384956-A)。
众所周知,路由器不同于网桥,是其它设备在不同的网络或子网络之间发送信息包所需要的。因此,需要路由器以对信息包进行实质性处理,例如一个与MAC地址相关的变化,该变化是根据一个指向某网络地址定义的目标的选定的发送。此外,路由器最好能够执行路由选择协议,该路由选择协议通常包括广告功能和收听功能,通过该广告功能某路由器可以通过发送路由器的信息包以及其能够抵达的网络通知其它路由器;收听功能通过响应这些信息包建立路由选择列表,该列表用于生成发送的数据,比如MAC地址,以及相对向信息包的网络地址导出的端口编号。
前述的应用描述了一个路由选择单元的级联堆叠,其中每个单元都能够发送在其外部端口收到的信息包。这些路由选择单元能够引导一项旨在选出一个引导路由器的选举,以将网络和介质访问控制地址提供给该堆叠中其它单元的路由器界面。该堆叠被组织成只有引导路由器才能执行一个完整的路由选择协议,而从属单元具有该路由选择协议内的选定的功能,尽管受到抑制,但是仍具备完全的路由选择能力。
堆叠的路由器的一个重要的特点是提供了恢复力,也就是说,提供了这样一种功能,即使堆叠中单元间的连接发生故障,或者堆叠中的一个单元出现故障,该功能可以使堆叠或至少是堆叠中剩余的部分在适当的操作中得以继续。恢复力通常要求在堆叠或网络级联中提供至少一个或者多个闭合路径。一个简单的例子是连接堆叠“顶端”的单元与“底端”的单元,以允许堆叠中单元之间的连通,不管它们中的哪一个出现故障。
作为替换,连通性的维持可以借助于堆叠中连接一个以上单元的相邻转换单元得以维持。
恢复力的一个特点(特别是当其涉及不在堆叠中的单元的时候)是,当一组功能单元与堆叠中的其它单元分离时,能够启动一个新的选举。考虑到临时中断的堆叠可以被重新连接,恢复力的另一个的优点是能够避免同一堆叠或一个堆叠的剩余部分中有两个选出的主控单元。共同申请的英国专利(申请号0220013.7,申请日2002年8月29日,公布号GB-2386524-A)公开了一种堆叠式路由器单元,其中一个引导单元或主控单元能够转变到主控路由选择状态,并在该状态下将其地址作为广告向该网络中其它单元传播。当某单元收到该广告后,可以转变到一个主控桥连状态,同时其路由选择功能被停止。这个功能的目的是使一个堆叠区段中的一个单一的单元变成一个主控单元;也可以启动用于重新连接的堆叠的引导或主控单元间的谈判,并将因此而能够根据上述应用对堆叠中的路由选择界面实施控制。
前述专利申请还公开了恢复性堆叠路由器的更多的细节,其所公开的内容在此引作参考。
如上文所述,路由器的一项功能就是执行一个路由选择协议以确定指向一个网络目的地的一条路由。用于这一目的的一个重要协议就是OSPF协议。在例如RFC-2328 OSPF第二版(Ascend通讯公司,1998年4月)中对OSPF协议以介绍的形态进行了全面的描述。以下假设读者已经具备了该协议方面的知识,因为这里将要引作参考。另一个已知的路由选择协议即RIP(路由选择信息协议)。
【发明内容】
在执行一个用于堆叠的恢复性路由器的方案时,理想的是堆叠(不管被配置成哪一种特定构形)可以被改变或增加,通过例如往堆叠中增加单元,或从堆叠中移除单元。
理想的是将一个路由选择协议作为一个逻辑路由器执行,以在堆叠中的多个物理路由器上有效运行。然而,普通的路由选择协议以及特定的OSPF协议均不提供实现以上功能的任何方法。
已知使用虚拟路由冗余协议(VRRP)可以为OSPF和其它协议提供冗余。这种协议动态地选择一个虚拟路由器(即主控器),以发送信息包到一个备份单元。如果主控单元故障或失灵,则备份单元将取代它的位置。然而,在这个协议下的运行不能实现通过该路由器的路由选择载荷的分配。特别是“备份”路由器不用于路由传输,除非主控单元失灵。
与本发明相关的各路由选择协议包括一个数据库(这里称为“网络数据库”),该数据库含有该网络中来自路由器的路径或连接信息。对于OSPF协议来说,该数据库是一个“连接状态”协议,即已知的“连接状态数据库”(LSDB)。对于诸如RIP(一个“远程矢量”协议)的协议而言,有一个相应的数据库,该数据库定义了一个矢量,该矢量代表源自路由器、经由该网络中相关节点的路径。
有一些(但不是全部)路由选择协议的操作也需要协议状态设备,例如协议状态机。对于当前的OSPF协议,“协议状态设备”由一个界面状态机(ISM)和一个“邻里状态机(NSM)”组成。RIP就是一个不需要协议状态设备的路由选择协议的例子。
因此,需要提供一种能够使路由选择协议(比如堆叠中的OSPF)和特别是网络数据库(例如用于OSPF的连接状态数据库)实现同步的方法,这需要协议状态设备,如用于界面状态机(ISM)和邻里状态机(NSM),位于多个单元,以使协议在堆叠中的多个物理路由器上运行,而无需设置一个常用的备份单元(该备份单元不会进行路由选择,除非主控路由器单元失灵)。
然而,主要的困难是,尽管按照路由选择协议(如OSPF),当路由器都完全执行协议时能够实现路由器之间的同步操作,但当一个从属单元根据恢复性堆叠的要求不能发送信息(例如连接状态信息,该信息要求它必须成为一个单独的、可以识别的路由选择实体)时,按照该协议的同步将会失灵。
在本发明的一个优选形态中,一个堆叠的网络路由器相互连接并组织成构成一个单一的路由选择实体,所述路由器包括一个单一的主控路由器和至少一个从属路由器;
a)每一个路由器均能完整执行一项路由选择协议,每一个路由器均有一个各自的网络数据库;
b)所述主控路由器只能完整执行所述协议,只有所述主控路由器根据所述协议产生和发送网络广告,以及接收来自其邻里的各种类型的更新信息;
c)每一个从属路由器都侦测(snoop)来自邻里的网络更新信息;
d)所述主控路由器向每一个从属路由器发送校验数据,该校验数据指示主控路由器的网络数据库的当前状态;
e)每个从属路由器将校验数据与从属路由器的单独网络数据库中相应的数据进行比较,以确定所述从属路由器的单独网络数据库是否与主控路由器的网络数据库同步;和
f)如果所述比较显示从属路由器的单独网络数据库与所述主控路由器的网络数据库不同步,则从属路由器请求一条源自所述主控路由器的网络广告。
其中,因为在诸如OSPF的连接状态协议中,堆叠中每一个路由器均具有用于操作协议的协议状态设备,所以主控路由器最好向每一个从属路由器发送直接更新信息,以使每一个从属路由器中的单独协议状态设备与所述主控路由器的单独协议状态设备同步操作。
本发明的其它方面涉及一个路由器的堆叠、一个能够在这种堆叠中操作的网络单元,以及一种操作路由器堆叠的方法。
根据本发明,堆叠优选的是由至少一个主控单元(最好是根据前述申请的一个选定的主控单元)和一个或多个从属单元组成。一个连接将存在于主控单元和每一个从属单元之间。该主控单元用于运行完整的路由选择协议,通过传输控制协议向每一个从属单元发送直接更新信息。这些直接更新信息可以包括用于协议状态设备(例如用于该OSPF协议的介面状态机和邻里状态机)和每一个从属单元的网络数据库(例如每个从属单元中用于OSPF协议的连接状态数据库)的特定信息包形式。
每一个从属单元均可以纯粹按照从主控单元接收的直接更新信息运行其协议状态设备(如果提供的话)。网络数据库的同步可以根据对网络更新信息包的侦测,以及将由此接收的信息与从主控单元发送来的校验数据信息进行的比较。该校验数据可以包括网络广告报头(header)。优选的,为了确保校验数据的接收,校验数据由主控路由器根据诸如TCP的程序控制协议以信息包的形式向从属路由器发送,所述程序控制协议能够确保一旦检测到信息包的丢失,能够察觉并恢复该信息包。如果收到的校验信息中的信息与从属单元中的不符,从属单元可以请求源自主控单元的网络广告的一个完整的拷贝。用这种方式,网络数据库中只有一部分被发送到每一个从属单元,因此降低了单元间所需要的带宽。
通过保持运行时间内从属单元的同步,如果主控单元或与主控单元的连接发生故障,从属单元中的一个能够接管整个路由选择协议的运行而无需中断操作;因此,堆叠不会与网络中的其余部分脱离同步。本发明还提供通过TCP直接更新信息的合并时间的同步,使主控路由器在更新一个刚刚加入堆叠的单元时能够维持与其邻里之间的关系。
【附图说明】
图1为一个路由器单元的示意图。
图2显示了两个路由器单元的级联连接。
图3显示了一个恢复性状态机。
图4显示了一个单元的堆叠。
图5显示了一个堆叠结构。
图6显示了一个OSPF信息包报头。
图7显示了OSPF的堆叠通信。
图8显示了一个ISM信息格式。
图9显示了一个ISM介面描述。
图10显示了一个ISM的控制程序。
图11显示了一个“邻里”的描述。
图12显示了一个TCP直接更新信息与打包的多邻里描述。
图13是一个用于“自我来源”连接状态广告的流程示意图。
图14是TCP辅助侦测的流程示意图。
图15-20显示了堆叠中合并情形的各个阶段。
【具体实施方式】
以下结合附图对本发明作进一步的说明。
结合后面将要描述的图3,图1显示了一个的网络单元,该网络单元用于按照图2所示的方案的一个恢复性堆叠。图1和3所示的单元即为本发明的使用堆叠式路由选择协议的单元的一个例子。
该单元具有多个普通或“面板(front panel)”端口1和至少一个“级联”端口2。“级联”端口可以是一个位于单元之间的独立的专用连接,或者是一个用于执行“级联”功能的面板端口中的一个。该单元包括至少一个(通常是多个)“硬件”网桥,或者“层2”交换机3。每个端口1与网桥3中的至少一个相连,该(或每个)级联端口连接到所有网桥,或连接到一个与所有网桥相连的“逻辑”端口相连。该单元包括一个路由器4,该路由器至少有两个(在所示的例子中为三个)路由器界面5。每个路由器介面5只与一个网桥相连,尽管每一个网桥可以与一个以上的路由器界面5相连。对于每个界面而言,都存在一些方式(如寄存器)用以存储一个MAC地址、以及用于该界面的网络(IP)地址。对于网桥和路由器的控制,以及如图1所示的状态机的建立,有一个通过CPU6构建的处理器,该CPU6在适当的存储器中包含一个管理中介(management agent)7和一个路由选择协议8。该路由选择协议控制着路由选择列表9。嵌入该单元(例如用于该管理中介的一个介面)的也可以是单元的常规地址,例如其MAC地址10和网络(IP)地址11。这些地址用于路由器的管理,比如通过一个外部网络监督器,根据已知的经验,这些地址可以由CPU提供给路有器界面。如下文将要描述的那样,该路有器介面可以被启动(在这种情况下该单元可以用作路由器)或关闭(在这种情况下该单元可以用作网桥)。
图1所示的路由选择单元的常规形态是硬件。网桥的主要目的是提供信息包的转换,比如在同一子网或VLAN上的转换,以及发送往返于路由器4的信息包。在端口1和端口2接收到且无需路由选择的信息包将由网桥中的一个进行接收,并按照相关网桥执行的中介访问控制(层2)转换进行发送。该路用器通常需要修改该信息包,以提供给它一个新的源MAC地址,通过协调和通常的验算校验和来给信息包报头减掉一个“存活时间”(TTL)值。该路由器将向一个通过合适的路由选择信息协议方式建立的路由选择列表求助,以能够计算用于发送的信息包的下一个跳转(hop)。
本发明采用以太网TCP/IP,但并不局限于这种特定的应用。比如,也可以使用帧中继SCTP/IP或ATM。
图1所示的单元可以如图2或图4所示被堆叠。一个堆叠中可以有更多的单元,比如4个或8个,但是为了简洁起见,图示的堆叠只有两个或者三个单元。实现级联的物理连接本身是现有技术已知的,例如在GB-2383507-A中或2003年1月3日申请的,申请号为0300011.4的英国专利申请。
在本发明的一个优选实施例中,堆叠中的所有单元都能够发送它们所接收的信息包,拥有端口(需要发送的信息包在其上被接收)的单元即发送的单元。如果发出端口位于一个不同的单元上,经路由选择后,信息包的发送将通过桥连到拥有发出端口的单元来进行。通过这种方式,尽管堆叠中有多个路由器,但只有一个被卷入任意给定信息包的发送。那里将只有一个路由选择跳转,以使其看起来是堆叠外的实体,就好象该堆叠只含有一个单独的路由器。
如GB-2384956-A和GB-2386524-A中所描述的,堆叠中的单元可以进行一次选举,选举可以基于控制信息包或帧的交换,以根据一些预定的标准(比如哪一个具有最低端MAC地址)决定堆叠中的哪一个单元将成为导引或主控单元,以及哪一个将成为下属或从属单元。这样做的意义在于,导引或主控单元(为方便起见以下简称“主控单元”)将执行完整的路由选择协议以及地址解析协议,而其它单元(为方便起见以下简称“从属单元”)将具有选定的、与这些被抑制的协议相关的辅助功能,以使它们不传播例如RIP(路由选择信息协议)或ARP(地址解析协议)信息包。这与在堆叠内保持一个单一的路由选择体的概念是一致的,并很大程度地节约了信息包所占用的带宽(主要是级联),该信息包否则将根据这些协议被传播。
此外,同样如GB-2384956-A和GB-2386524-A所述,主控路由器界面将使用与其它单元的相应介面相同设置的IP地址,最好是相同的MAC地址(以下将被解释)。这可以通过使路由器中的一个,最好是主控路由器,将其MAC地址借给其它(从属)路由器来得以实现。
用于(特别的)堆叠的路由器的恢复性的目的,是在堆叠中的一个单元发生故障或单元间的级联发生故障时,使路由器界面保持运作。要提供这种恢复性,各单元内需要配置适当的功能,而且理想的是各单元之间能够通过级联以外的方式进行通讯。为这个目的,连接到路由器的外围设备可以配置成具有与路由器单元的冗余的物理连接。依靠这个配置可以向不同的设备提供不同等级的恢复性。通常,交易平衡(trade-off)是端口与恢复性的比值,比如配置的恢复性越强,则堆叠的路由器单元得到的附加端口就越少。
图2显示了信息包出入路由器堆叠的级数(progression)。图2所示的例子中假设信息包是从单元0的前一个跳转21接收的,并将通过单元1的级联通过,然后由单元1的面板端口发出到下一跳转22。
在图2中,单元0具有面板端口1、级联端口2、网桥3和路由器4。单元1具有面板端口1a、级联端口2a、网桥3a和路由器4a。
在图2所示的系统中,来自前一跳转21的信息包被一个面板端口1接收,同时,其MAC目标地址设置到路由器4。这个信息包通过一个网桥3桥联到路由器4,路由器4会将MAC目标地址改为下次跳转所需要的地址(以及将源MAC地址改为路由器4的地址),进行路由选择阶段通常需要的任何其他修改(比如验算一个校验和),并将信息包送到相关的网桥,以使信息包在级连20处被发出,本实施例中通过端口2。
当然,第一个单元接收到的大量的信息包可以只通过一个面板端口1发出。这些信息包的接收与发送与本发明并不直接相关。然而,因为那些需要发送的信息包将被路由器4发送,在接收单元,这些信息包将不必通过级连发送到另一个用于发送的单元。
当信息包由单元1通过级连端口2a接收,目标MAC地址早已设定到下一个跳转。因此,它能够从属于网桥3a搜索到的一个普通的MAC地址,以获得用于下一个跳转的端口编号。单元1中无需介入路由器4a。
地址的出借
为了使堆叠容易操作,每个单元中的路由器界面将使用与其它单元中的相应界面相同设置的IP地址,最好是相同的MAC地址,如下文将要说明的那样。这可以通过使路由器中的一个(这里称为“主控”路由器)将其路由器界面IP地址和MAC地址借给其它路由器(这里称为“从属路由器”)得以实现。这些术语不仅用于说明借出地址和借入地址,也用于说明一些次要的操作差异,不同于发送信息包的主要任务,该任务由所有路由器共同分担;这些差异将在下文进行说明。
如上所述,堆叠或区段中的各单元能够进行(最好是定期的)一个选举,以决定堆叠或区段中的哪一个是主控单元,哪一个是从属单元。作为(当前)主控单元的一个单元掌握主控资质;无主控资质的单元为从属单元。资质的丧失以下显示为一个“丧失主控(LostMaster)”的信号(源自主导选举的CPU或其它设备);得到资质显示为一个“得到主控(GetMaster)”的信号。新选举结束后,如果某一现行的主控单元继续拥有该资质,就意味着产生了一个“主控保留(MasterRetained)”。
复原状态机
图3所示的状态机是使复原能力付诸实施的方法的一个例子。在GB-2386524-A中对其进行了更为全面的描述,但为了方便起见,此处加以部分复述。该状态机最好具有如下所述的6个主要状态31-36,作为用于状态间转换的前提。状态机最好建立在软件上,但硬件形式也是可行的。
复原状态机由CPU6进行初始化设置。这将创建复原状态机任务,并进入初始状态。初始状态等待一个显示该单元是否是一个主控单元或从属单元的结果。一旦这些结果中的一个出现,过程即开始确定该单元将在层2(Layer 2)模式或层3(Layer 2)模式下运行。
复原状态机说明
以下根据各种状态对状态机进行说明。以下段落中将定义各种“事件”。状态机包括一个计时器,以下段落中对计时器的各类时间间隔进行了定义。
状态说明
a、初始化状态31
这种状态的目的是等待完成界面设置。这在启动时,或在从属单元需要重新设置其界面以与主控单元相一致时发生。当该单元根据前述的选举确定了其在堆叠中是“主控”单元还是“从属”单元之后,该状态机就离开(退出)这种状态。如果该单元是主控单元,则该状态机将计时器设定到某一个值,这里称为“ARP收听时间(ARP LISTEN TIME)”(限定了一个预订的最大时间,该时间对于收听ARP信息包以确定一个将产生冲突的L3主控单元是必需的和适当的),并转换到“收听L3主控(Listen for L3 Master)”状态32。如果该单元是从属单元,则状态机转换到“L3从属(L3 Slave)”状态33。
b、收听L3主控状态32
如果该单元被选为主控单元,则进入这个状态。这个状态的目的是确认在堆叠或区段被允许在一个路由选择模式下运行前,没有其它“L3主控单元”在运行。
如果收到适当的ARP请求,则已经存在一个(不同的)路由选择区段的主控单元,因此用于本地单元的路由选择需要被关闭。状态机将向本地堆叠段中的所有其它单元发送一个“停止路由选择(Disable Routing)”指令,将计时器设定到一个值,这里称为“ARP接收时间(ARP RECEIVE TIME)”;然后转换到“L2主控(L2 Master)”状态33。
如果计时器(在状态31中设定)超时(以使不再收到确定冲突主控单元的ARP信息包),则计时器被设定到一个值,这里称为“L3竞争时间(L3 VIE TIME)”,同时堆叠状态机转换到“L3主控(L3 Master)”状态34。
当状态机处于“收听L3主控”状态32时,如果收到某“丧失主控”信号,则该状态机转换到“L2从属(L2 Slave)”状态36(见下)。
c、L2主控状态33
这是这样一种状态,其中该单元是一个主控单元,但该单元与堆叠段中的其它单元可以桥连却不能路由选择。
如果收到一个主控ARP,则计时器被设定到“ARP接收时间(ARP RECEIVE TIME)”值,同时该状态机回复到相同的(L2主控)状态。
如果发生ARP超时(说明与现存的L3主控单元的连接中止),则计时器被设定到“L3竞争时间(L3 VIE TIME)”值,同时状态机转换到“L3主控”状态34。
如果在状态33下收到一个“丧失主控”的信号,则状态机转换到“L2从属”状态35。
如果在状态33下产生一个“主控维持”信号,则将一条“停止路由选择”指令发送到该堆叠中的所有其他单元,同时状态机回复到相同的“L2主控”状态。
d、L3主控状态34
在这种状态下,单元将定期地发送ARP请求,以确定路由器界面中的一个。尽管与本发明不直接相关,但一个单元可以具有“默认”界面和非默认界面,实际操作中,识别的网络地址可能就是编号最低的非默认界面的地址。如果收到一个较低的MAC主控ARP(Lower MAC Master ARP),则该机将(在其它的动作中)向堆叠段中的所有其它单元发出“停止路由选择”指令,并转换到“L2主控”状态33。
如果主控资质丧失,则状态机将转换到“L3从属”状态36。
如果收到一条“主控维持”信号,则该单元将向区段中的所有其它单元发送一条“启用路由选择”指令,同时保持在L3主控状态。如果该单元收到一条一个单元已经“消失”指示,结果也是相同的(见下)。
e、L2从属状态35
如果得到一条“主控资质”信号(得到主控),则该计时器设定到“ARP接收时间(ARPRECEIVE TIME)”值,同时状态机转换到“L2主控”状态33。
如果收到一条“启用路由选择”指令,则路由选择界面被启动,状态机转换到L3从属状态36。这种情况将在区段中只能桥联的单元被允许路由选择时出现。
f、L3从属状态36
如果得到“主控资质”,则计时器设定到“ARP收听时间(ARP RECEIVE TIME)”值,同时状态机转换到“L3主控收听(Listen for L3 Master)”状态32。
如果收到一条“停止路由选择”指令,则路由选择界面被停止,同时状态机转换到“L2从属(L2 Slave)”状态35。
可以注意到,图3所示不是状态机唯一的组织方式。例如,主控资质丧失的影响在状态32和34可能是不同的:两种情况都可能导致转换到L2从属状态35。而且,也可能从初始化状态31转换到“收听L3主控”状态32,或转换到L2从属状态35,而不是L3从属状态36。
堆叠协议介绍
如上所述,本发明的目的是实现单元的堆叠在堆叠变化时的平稳转变,不管是堆叠中单元的增加,还是单元或连接从堆叠中移除或实质性切断。有两种“情形”与这种连接相关。在这里将它们称为“‘堆叠拆分’情形”和“‘堆叠合并’情形”。这将参考图4予以说明。
图4显示了一个三个单元的堆叠,三个单元分别是单元1、单元2、和单元3,通过一个级连连接20相连接(如图2所述)。这些堆叠的单元通过两台“外围(edge)”转换器ES1和ES2而具有外部连同性。图4对应于GB2386524-A中的一张图,通过该在先文件可以变得更加清楚,图3所述的复原状态机特别地用于处理级联故障的困难,以使各单元只需通过边缘转换器的实现即能保持象一个堆叠一样运行。
开始时假设单元1为“主控单元”,单元2和单元3为从属单元。如果单元1发生故障,则图3和在先申请所述的复原协议将在单元2和单元3之间选举一个新的主控单元。
例如,假设单元2被选为主控单元,因为单元1发生故障后,单元2在该堆叠中的编号较低。单元2检测不到单元1,但是包含单元2和3的堆叠可以继续进行路由选择。对于协议堆叠,这种故障的情形就是“堆叠拆分”的情形。尽管单元1拥有协议主控的功能,但是现在这个任务必须由单元2来承担。
第二种故障的情况是从属单元中的一个发生故障。我们假设是单元2。单元1将保留主控地位,同时包含单元1和单元3的堆叠将继续进行路由选择。对于协议堆叠而言,这种故障的情形属于“堆叠拆分”的情形。单元1继续拥有协议主控的功能。
第三种情况是单元1和单元2之间的级联连接发生故障。在单元2和单元3之间将选出一个新的主控单元。单元2被选中,因为它在堆叠中的编号最低。单元2检测到单元1仍然能够运行并开始在“层2模式”下运行。当单元进入该模式时,如前所述,IP界面被关闭,也使路由选择协议界面被关闭。结果,该单元的路由选择将停止。单元2将指导单元3在层2模式下运行。对于路由选择协议堆叠,这种故障的情形属于“堆叠拆分”情形。单元1将继续拥有路由选择协议主控的功能。
如果单元2与单元3之间的级连连接发生故障,则单元1和单元2将继续运行而不发生变化。单元3将变成其单一单元堆叠的主控单元。单元3将检测到前主控单元、即单元1仍然能够运行,并将进入L2模式下的运行。路由选择协议堆叠属于“堆叠拆分”的情形。单元1将继续拥有路由选择协议主控的功能。
如果一个新的从属单元、即单元4(图未示)加入该堆叠,单元1仍将是主控单元。对于路由选择协议堆叠,这种情形属于“堆叠合并”的情形,单元4需要与主控单元同步。
现在,让我们假设单元1故障后再次加入该堆叠。当单元1故障时,单元2变成了主控单元。如果单元1复原,它将重新称为主控单元。将主控状态切回到单元1需要所有的IP界面被“推翻(take down)”。这将依次推翻所有的路由选择协议界面,需要路由选择协议重新启动。
如果单元2或者单元3故障后再次加入堆叠,则直至路由选择协议参与,情况与一个从属单元加入该堆叠相同。
如果单元1和单元2之间的级联发生故障,然后单元1也故障,则单元1开始时将继续作为主控单元继续运行,单元2和单元3将进入层2模式。如果单元1接着故障,则单元2将检测到该故障,然后成为主控单元。对于路由选择协议堆叠,这是一种“堆叠拆分”的情形,单元2需要接管路由选择协议主控单元的所有功能。
如果单元1故障后从该堆叠外返回,则如上所述,将出现一个新当选主控单元,即单元2。如果单元1返回,但不再是该堆叠的一部分,则单元1将检测到单元2,且单元1将保持在层2模式。
让我们假设单元1与单元2之间的级连故障后恢复。单元1将继续作为主控单元运行,单元2和单元3将进入L2模式。如果该级连随后恢复,这就与两个新的从属单元加入到堆叠中一样。这种情形属于“堆叠合并”的情形。
最后,当同时向整个堆叠提供动力时,层3堆叠将选举单元1为主控单元。这是一种“堆叠合并”的情形。
设计概述
这个实施例依赖于硬件的侦测(snooping)能力,而不是用于堆叠中单元的同步的“私下”的单元到单元的通讯。这将参考OSPF协议予以说明。但是,如前所述,侦测和更新的设备可以使用其它路由选择协议,尽管依赖各自的路由选择协议的特定设备的侦测的程度可以不尽相同。
单元到单元的路由选择协议堆叠通讯是通过TCP连接而进行的。通过TCP,主控单元发送其直接更新信息,用于可靠的传递以及防止信息包的丢失。从主控单元到每一个从属单元之间存在着一个点对点的TCP连接。该TCP连接由一个TCP信息引擎管理。这存在于OSPF软件中,如图5所示。通过选用TCP信息引擎的信息界面,OSPF的堆叠功能能够由TCP通讯特性得到保护,就如下文将要阐述的那样。
OSPF界面状态机(ISM)、邻里状态机(NSM)以及连接状态数据库(LSDB)的同步最好逐一加以单独处理,并由OSPF组件内的代码进行控制。
OSPF堆叠代码会将模块化界面并入IP组件。这些模块化界面包括功能注册呼叫和单向功能呼叫。功能注册用于从IP组件往OSPF组件传输信息。单向功能呼叫用于从OSPF组件到IP组件的信息中继。TCP界面与层3堆叠界面将在以下的段落中进一步阐述。
图5显示了用于控制OSPF协议的软件的OSPF堆叠架构。该软件包含一个OSPF组件,如该协议所述,该OSPF组件包括一个界面状态机(ISM)、一个邻里状态机(NSM)和一个连接状态数据库的同步和校验模块。这些子组件与一个连接到OSPF堆叠TCP信息引擎的OSPF堆叠信息界面相互作用。该OSPF组件包含启动OSPF堆叠所需的代码,并具有两个模块化界面,用于发送到软件的IP组件的信息的中继。一个界面,叫做层3堆叠界面,需要与包含于IP组件内的层3堆叠功能进行通讯。该界面应用从OSPF组件指向层3堆叠的直接功能呼叫,以设定或找回来自层3堆叠的信息。功能注册被用于将信息从层3堆叠传递到OSPF组件。
层3堆叠与OSPF之间共享的信息包括层3主控事件、第3层从属事件以及从属待命(ready)事件。层3主控事件说明该单元将在主控模式下运行。在例如图3中状态32和状态34之间发生转换时,或状态33与34之间发生转换时,会发生这种情况。当该事件发生时,该单元为L3主控状态,并将发送和接收OSPF协议信息。此外,本发明需要该单元将准备初始化运行时间同步程序,例如连接状态数据库(LSDB)、当一个单元出现在堆叠中时的LSA校验发送。
层3从属事件说明该单元将在从属模式下运行。这些事件将导致例如L2主控状态33(图3)和L2从属状态35之间的转换,或L3从属状态36和L2从属状态之间的临时(occasion)转换,为此路由选择被关闭。本发明中更特别的,从属单元将抑制OSPF协议信息的发送,并要求限制OSPF协议信息的接受。
从属待命事件说明一个从属单元已经完成“静态”的同步,并准备用于任意需要发生的运行时间同步程序。“静态”同步的一个例子就是LSDB转换。
前文所述的事件通常存在于“层3堆叠”,实际上也就是决定图3和GB-2386524-A所描述的状态机的软件。
TCP界面需要与包含于IP组件内的TCP功能进行通讯。该界面应用从OSPF堆叠组件指向TCP组件的直接功能呼叫,以设定或找回TCP组件中的信息。功能注册用于从TCP组件向OSPF组件传递信息。有名的的TCP接口(socket)界面可以用于指向存在于IP组件内的TCP协议引擎的信息的中继。
信息包的接收与传输
堆叠中的每一个单元都将收到一个OSPF信息包,该信息包可以是堆叠中任意一个单一的单元收到的。这个堆叠范围内信息包的接收的规定在这里称为“侦测(snooping)”。侦测是现存堆叠结构的一部分,且不需要任何功能的改变。
尽管堆叠的所有单元都将收到一个可由堆叠中任意一个单元接收的OSPF信息包,但是对收到的信息包的处理决定根据单元的状态各不相同,例如根据它是一个主控单元还是从属单元。主控单元接收和处理所有类型的OSPF信息包。这与独立单元的运行相似。但是,从属单元将接收和处理连接状态更新和连接状态确认信息包。在保持与主控单元同步时,这使得从属单元能够根据网络变化进行调节。从属单元可以接收但不需要处理“问候(hello)”、“数据库描述(database description)”、以及“连接状态请求(link state request)”三种信息包。主控单元控制从属单元的界面状态机和邻里状态机。这削减了对“问候”信息包和“数据库描述”信息包的需求。此外,从属单元最好不能发送任何响应连接状态请求信息包的连接状态更新信息包。
侦测还允许任何OSPF信息包的堆叠范围信息包接收,该OSPF信息包可由堆叠中的任何一个单一单元发送。当一个单元收到堆叠中另一个单元发送的信息包时,该单元可以说是收到了一个“自我来源(self-originated)”信息包。主控单元和从属单元都不会处理任何自我来源的信息包。该协议组织成检查并删除自我来源的信息包。
主控单元将产生和发送所有OSPF信息包的类型。这同样类似于独立单元的运行。从属单元既不产生也不传输任何OSPF信息包类型。这减少了从堆叠发出的冗余信息。
静态数据同步
静态数据同步,也叫“配置同步”,要求配置数据必须在某一合并时间(merge time)和运行时间(run time)同步。
合并时间同步
从属单元的配置必须与主控单元相同。对于OSPF协议,主控-从属同步需要在主控单元和从属单元之间共享某些信息。这些信息包括OSPF模式、OSPF路由器ID、OSPF域、OSPF范围、OSPF界面、OSPF界面细节、OSPF ASBR模式和OSPF捕捉控制。
同步方法,最好是用于配置数据的方法,是一个“拖曳(pull)”方法。各从属单元以脚本和辅助程序的方式通过主控单元拖曳信息以实现单独同步。只要一个新的主控单元被选出,则由一个从属单元执行此拖曳过程。层3堆叠同步过程应该被修订,以启动OSPF主控单元/从属单元的同步。所有从属单元上同步的配置信息也将存储在PDS。
运行时间同步
OSPF协议运行时间内单元间的同步也有必要的。
动态数据同步
为了确保堆叠的OSPF单元扮演一个单一虚拟路由器的角色,状态机和连接状态数据库必须在所有单元保持同步。所述状态机就是界面状态机和邻里状态机。OSPF协议的三个要素早已众所周知,并在前述的RFC中予以描述。
本发明的另一个方面,主控单元与从属单元间的TCP连接提供了一种确保同步的方法。
主控-从属TCP通讯信息
TCP协议用于在堆叠内的主控单元和从属单元间传递信息。TCP协议是适用的,因为它包含了诸如确认和流程控制(flow control)之类的特性。同时,TCP信息包的优先级低于系统关键性信息包(如堆叠信息包和网络协议信息包)。他们的使用(在LSDB发送给从属单元时的合并时间可能出现大的带宽)不会由于溢出它们的队列空间而反过来影响系统关键性信息包类型。
TCP信息引擎用于产生和破坏主控单元和从属单元间的TCP对话。支持TCP信息引擎的编码驻留在OSPF组件。TCP信息引擎将发送和接收用于以下目的的信息:界面状态机的同步、邻里状态机的同步、LSDB在合并时间的同步、以及侦测信息包接收的校验与恢复。
在主控-从属关系的整个生命周期内,主控-从属TCP对话将保持活跃。当一个从属单元加入到堆叠中,就会产生一个用于该从属单元的TCP对话。当一个从属单元离开堆叠时,相应的对话也将结束。如果一个新的主控被选出,则所有的对话都会结束,然后由新的主控单元重新建立。TCP信息引擎将接收有关单元加入或离开该堆叠的事件,以便作出响应打开或关闭相应的TCP对话。
一个标准的OSPF报头将用于该TCP对话的所有通讯。该OSPF报头将被用于区分ISM信息、NSM信息以及LSDB信息。
所述报头如图6所示,包括三个部分,一个“IP报头”(用于信息包的典型的报头),一个与TCP相配的TCP报头,和一个OSPF报头。
OSPF堆叠代码将通过适当定义的介面与TCP信息引擎通讯。该界面将缓冲OSPF堆叠代码,通过诸如现存堆叠单元的数量、TCP对话的状态、信息的格式等。TCP信息引擎还将提供队列机制,以用于处理临时信息的存储/溢出。
状态机与连接状态数据库之间的堆叠通讯、TCP信息引擎和TCP协议引擎如图7所示。
介面状态机的同步
界面状态机(ISM)定义了一个OSPF界面操作的状态(例如Down、DR/BDR/DR Other等)。ISM操作由界面(Up、Down、Waiting等)的基本状态和问候协议控制。
主控单元采用的介面状态和为从属单元设计的介面状态之间有着直接的关系。每一次主控单元上ISM状态的转变,都将有一个信息发送到从属单元以传播这个状态变化。
从属单元的ISM操作将从正常运行被暂停,并由主控单元控制/编排。单元间的通讯将通过TCP对话进行。ISM信息的格式如图8所示,包括一个IP报头、一个TCP报头、一个OSPF报头、以及‘n’条ISM界面描述(description)。每条界面描述的格式如图9所示,包括一个介面(IP)地址、一个“域”描述、以及一条界面状态描述。
接下来的ISM主控状态将在所述ISM信息的介面状态描述范围内通过TCP发送到所述从属单元,所述ISM信息包括:Down、Waiting、Point-to-Point、DR Other、Backup和DR。
接下来的情况是图10所示的当主控单元上一个介面状态发生变化时,一个堆叠的ISM控制程序,包括:
1、主控单元经历一个界面状态的转换;
2、主控单元的ISM堆叠代码收到界面状态变化的通知;
3、主控单元ISM堆叠代码发送一条ISM信息到含有所述新的介面状态的从属单元;
4、从属单元ISM堆叠代码在所述OSPF代码内,在其界面状态机设置所述新的介面状态。
邻里状态机的同步
邻里状态机(NSM)就其功能而言可以描述为两个组件。第一个组件为“问候协议”。该问候协议负责邻里的搜索与维护,以及确保与邻里间的双向通讯。第二个组件负责建立邻接以允许LSDB的同步和可靠的溢流(flooding)。
NSM需要在整个堆叠内同步,以使:
a)通过如主控单元那样侦测相同的LSU信息包,从属单元可以参与各LSA的溢流。通过减少如果不使用侦测可能遭遇的等待时间,这将更有效地保持新的LSA的传播。
b)故障过多的情况下,无需从属单元改变其邻接,以减少对正在进行的用户对话的干扰;和
c)来自主控单元和从属单元的SNMP/CLI/WEB界面将报告一致的数据。
这个章节归纳了用于单元的堆叠中的NSM的同步机理。
通常,NSM的同步依赖于从主控单元发送到各从属单元的直接更新。这种“客户-服务器”结构简化了堆叠分布式路由器配置中NSM的操作,代价是增加了微量的等待时间。为了可靠传输,主控单元的直接更新将通过TCP发送。这排除了NSM为任何信息包的丢失而作出补偿的需要。利用TCP连接,主控单元将发送其TCP直接更新信息到所有的从属单元。每个从属单元将通过更新其NSM以适当地响应每一条收到的信息。
问候协议
只有主控单元才运行问候协议。其它单元,即从属单元,将不直接参与该协议。这意味着主控单元将负责处理堆叠收到的任何问候信息包。这也意味着,从属单元不对问候信息包进行侦测,并且从属单元收到的每一个问候信息包必须发送到级连端口,以便主控单元能够对其进行处理。此外,只有主控单元能够产生用于所有路由器界面的问候信息包。
邻里获得(acquisition)
在通过主控单元接收第一个问候信息包的过程中,一个新的邻里被发现。这将导致产生该邻里的数据结构。一个新产生的邻里的初始状态被设定为Init(如OSPF协议所定义)。然后,主控单元向所有堆叠中的从属单元发送其“INIT”TCP直接更新信息。收到该信息后,每个从属单元均在其数据库中创建一个新的邻里结构,并将其状态设定为Init。
在主控单元丢失这个问候信息包的情况下,所述邻里结构不会被创建,但是随后的邻里的问候信息将迅速补偿这个缺陷。从属单元信息包的丢失是不确切的,因为信息包取决于来自主控单元的TCP直接更新。
邻里的维护
与邻里获得一样,只有主控单元才能进行现存邻里的维护。从属单元将依赖于来自主控单元的TCP直接更新。
所述维护基于对定期的问候信息包的处理。这既包括信息包的接收,也包括信息包的发送。
问候信息包的接受重新启动了一个静止计时器。这是一个一次性发射(shot)的计时器,其发射表示最近没有发现来自邻里的问候信息包。一个静止计时器只会在主控单元上运行,而在所有从属单元被停止。无论何时,只要主控单元处理了一个“静止计时器”事件,一个相应的“DOWN”TCP直接更新信息就会被发送到所有从属单元。
只要主控单元上发生KillNbr或LLDown的情况,则同样的“DOWN”TCP直接更新信息就会被发送。KillNbr的情况表示所有与邻里的通讯现在不可能了。LLDown的情况来自较低级别的协议,表示该邻里现在无法连接。
在收到指示与该邻里的单向通讯的问候信息包的情况下,由主控单元NSM产生所述单向(1-Way)事件。这也将促使主控单元向从属单元发送“INIT”TCP直接更新信息。
邻接的形成
不是每一对OSPF路由器都将建立一个邻接。OSPF协议定义了建立邻接所必须满足的各种条件。
作为邻接形成过程的结果,一个邻里可以决定两种状态中的一种,该两种状态为:双向(2-Way)或者全功(Full)。
双向状态指的是路由器不能建立一个邻接,但与所述邻里间存在双向通信的情况。在这种情况下,“2WAY”TCP直接更新信息将发送到所有从属单元。这可以由双向接收(2-Way Received)事件引发,或者作为AdjOk事件的结果。第一种情况在所述双向通讯被实现时发生。第二种情况由确定一个与邻里的邻接是否应当被建立的决定的作出过程所引发。
全功状态(Full state)是一个完成的邻接形成过程的结果。这种状态下,路由器完全实现同步,也就是说它们的连接状态数据库(LSDB)是相同的。要实现这种状态,路由器必须经历一系列的状态。这是先前所述的通常的OSPF协议的一部分,这里不再赘述。
为保持级联通信,只有两种邻接形成过程的中间状态/情形发信号给从属单元,这就是交换(Exchange)和全功(Full)。
交换状态(Exchange state)指的是各路由器描述其数据库时的状态。在这种状态下,各路由器完全能够发送和接收所有类型的路由选择协议信息包。这使得描述信息包能够与LS更新信息包交替使用。
NSM转换到交换状态是基于谈判成功(NegotiationDone)事件。这个事件表示发送/接收数据库描述信息包的启动。主控单元将把它与“EXCH”TCP直接更新信息一起发送给各从属单元。
转换到全功状态(Full state)由交换完成(ExchangeDone)事件(当邻里请求列表为空时)或装载完成(LoadingDone)事件引发。相应的TCP直接更新信息为“FULL”。
从属单元不参与数据库描述信息包的交换,但是它们将侦测连接状态更新信息包,其中的一些可能是主控单元发送的LS请求的结果。其假设以下条件:
1、只有主控单元才能根据收到的数据库描述信息包建立一个连接状态请求列表;
2、从属单元不发送LS请求信息包;
3、从属单元不处理任何收到的LS请求信息包。
当数据库描述信息包出错时会由多种情况。对于所有这些情况,序列号错配(SeqNumberMismatch)事件会发生,该事件能够将邻里的状态转换到交换开始(ExStart)状态。只要发生这种情况,则所述“INIT”TCP直接更新信息将被发送到所有从属单元。
表1显示了针对相关直接更新信息的NSM事件。未在表中列出的任何NSM事件均不发送给从属单元。该设计的目标是确定一个邻里可以维持较长时间的状态,以及最小化邻里状态转换的数量,以排除任何增加的等待时间。
表1主控单元NSM事件TCP直接邻里状态更新信息HelloReceived(发现一位新邻里)INITInactivityTimerDOWNKillNbrDOWNLLDownDOWNSeqNumberMismatchINIT1-WayINIT2-WayReceived2WAYAdjOk(当邻里关系不能建立或正在遭到破坏时)2WAYNegotiationDoneEXCHExchangeDone(当邻里请求列表为空时)FULLLoadingDoneFULL
NSM TCP直接更新信息
TCP直接更新信息用于指示不同的邻里变化,这些变化是:一种邻里状态(如以上表1所列)、优先级、DD序列编号、指定路由器以及指定路由器备份。
图11是一个单一邻里描述的结构,它包括一个邻里ID、该邻里的IP地址、“邻里选项”的一个字段(field)、该邻里的优先级、DD序列编号、该邻里的指定路由器以及该邻里的指定路由器备份。
当收到一条信息后,每一个字段将被拷贝到从属单元的一个邻里数据结构。这不仅允许指示与邻里状态相关的变化,而且还允许指示诸如其优先级的任意其它变化。
使用TCP协议以更加可靠地发送TCP直接更新信息。一个单一TCP直接更新信息可以包装一个以上的邻里描述。假设该描述的结构如上所示,通常经由从属单元以一个单一TCP信息包发送用于所有的邻里的所有更新是可以实现的。在极端的情况下,比如邻里的数量大与60,则每个从属单元可以要求两个TCP信息包。
图12显示了具有包装的多个邻里描述的一条直接更新信息,它包括一个IP报头、一个TCP报头、和一个OSPF报头,每一个伴随着各自的邻里描述,如图11所示。
连接状态数据库的同步
连接状态数据库(LSDB)用于存储OSPF路由器之间交换的所有网络信息。SPF算法基于LSDB的内容生成存储于路由选择列表中的路径。
LSDB需要在整个堆叠保持同步,以使每个单元可以独立进行路由选择,选择相同的下一个跳转,故障过多(fail-over)的情况时不需要LSDB重新同步,以及源于主控单元和从属单元的SNMP/CLI/WEB界面发布一致的数据。
为保持LSDB在运行时间的同步,需要考虑到LS更新(LSUpdate)和自我来源的LSA,因为LSDB只有在下列情况下才能被修改:
a)接收到由邻里发送的LSUpdate信息包中一个新的或更新的LSA;或者
b)生成了一个自我来源的LSA。
侦测的LSUpdate信息包的丢失的检测和恢复将通过TCP辅助侦探法处理;而自我来源的LSA将在堆叠内被全面同步,通过由级联上主控单元向从属单元直接发送的TCP直接信息进行。此外,为确保可靠的溢流,从属单元上重发列表的维护也将被覆盖。
自我来源的LSA
路由器自己产生的任何LSA(例如LSA报头中的广告路由器与该路由器的路由ID是相同的)将被认为是自我来源的LSA。它的产生由以下因素引发:计时器、ISM/NSM状态转换、域内/域间路由的修改/增加/删除、或连接到一个新的域。溢流时,在一个LSUpdate信息包中收到自我来源的连接状态广告(LSA)是正常的,且OSPF协议早已有了一个程序用于处理自我来源的LSA的接收。
如图13所示,主控单元产生的任何新的LSA将通过一个TCP直接信息直接发送给从属单元。收到这个信息后,从属单元将更新其LSDB。从属单元将忽略通过溢流程序侦测到的自我来源的LSA,且不会产生任何LSA。
由于单元间的时间偏移,自我来源的LSA需要由主控单元直接发送到从属单元。通过溢流,从属单元有机会接收到主控单元产生的一个更新的自我来源LSA。在这种特定的情况下,从属单元将把该LSA作为一个旧的、在上一次路由器重置前由它自己产生的LSA。然后,它将产生一个该LSA的新的情况并更新其LSDB。这将导致该LSDB丧失同步。
因为从属单元不能产生任何自我来源的LSA,如果引发产生自我来源LSA的情况在从属单元上发生,而主控单元在有机会向从属单元发送LSA前死机,则该从属单元将错过该LSA。
最优化一多个自我来源的LSA的包装
多个自我来源LSA的产生可以由一个单一事件引发。例如,如果一个指定的路由器与一个邻居建立了一个新的邻接,则路由器和网络的LSA都会产生。为了节省级联的带宽,多个自我来源LSA将在一个LSA更新TCP直接信息中通过级联由主控单元发送到从属单元。
主控单元将延迟1秒发送自我来源LSA到从属单元,以在一条信息中包装更多的自我来源LSA。
TCP辅助侦测
如图14所示,这个方法中,从属单元将对LSUpdate信息包进行侦测以保持其LSDB与主控单元的同步。主控单元和从属单元之间LSUpdate信息包的抵达顺序存在差异并不重要,只要没有达到所支持的LSA的最大数量,因为OSPF只接收最近的或最新的LSA,而忽略重复的或旧的LSA。侦测的LSUpdate信息包的丢失的检测将通过由主控单元发送的TCP校验信息被发现。
一个TCP校验信息只包含修改主控单元LSDB的LSA报头,例如重复的或较早的LSA报头将不被包含在TCP校验信息中以减少级联通信。
TCP被选为传输层协议是因为保障的传递确保了一个LSDB永远不会脱离同步。
以下是一个用于TCP辅助侦测的步骤顺序,包括信息包丢失的检测和恢复:
a)主控单元收到一条含有新的或更近的LSA的LSUpdate并相应更新其LSDB;
b)每一个从属单元将对相同的LSUpdate信息包进行侦测并更新LSDB(这是从属单元上信息包可能丢失的地方);
c)主控单元将发送一条包含LSA报头的校验信息(在一个较晚的时间)给每一个从属单元(每条校验信息可能包含一个以上的LSA报头);
d)每一个从属单元将收到该校验信息并查找其LSDB中的LSA;
e1)如果一个从属单元的LSDB中具有相同的LSA,则不再进一步处理该LSA;
e2)如果一个从属单元的LSDB中没有该LSA,或者其LSA是较早的,则该从属单元将向主控单元请求一个LSA的完整的拷贝。该从属单元还将把这个LSA报头放到丢失LSA请求列表;
f)主控单元发送从属单元请求的LSA。从主控单元收到这些更新的LSA后,LSDB将被更新,且丢失LSA请求列表中相应的LSA报头将被删除。
最优化—多个LSA报头的包装和延迟的校验
如果收到一个新的或更新的TCP校验信息后即刻发送一条TCP校验信息,那么一条TCP校验信息中只包含一个LSA报头。这里的问题就是将会有太过多的TCP确认。而且,TCP中包装一条校验信息需要代价(overhead)。为了最小化这个代价和使用的级联带宽,可以通过延迟发送将多个LSA报头包装在一个校验信息中。
有一种可能就是在从属单元有机会处理相应的LSA并更新其LSDB前,从属单元收到一条TCP校验信息。这将导致不必要的请求和恢复信息,除非从属单元缓存(buffer up)这些校验信息。通过延迟校验信息的发送,发生上述情况的可能性将被大幅降低。从属单元的LSDB中校验信息和LSA情况间的任何差异都可能被作为信息包丢失处理。
LSDB特意拆分保护
为确保LSDB的同步以及故障过多(fail-over)情况下溢流的可靠性,可以使用以下三种机制:丢失LSA请求列表,延迟的LSAck和列表重发。
丢失LSA请求列表
从属单元可以具有一些用于LSA丢失的待决的请求,所述LSA丢失由TCP校验信息检测到,但从属单元收到该更新前主控单元死机了。这些待决的请求应该在丢失LSA请求列表中。“堆叠拆分”后,新的主控单元必须通过向其邻里发送LS请求来请求这个列表上所有的LSA。
延迟的LSAck
用于确认收到LSUpdate的LSAck的发送可以被延迟(重复的LSUpdate除外),以使多个确认能够在一个信息包中被发送。如果一个主控单元在收到一条LSUpdate后,但是在发出延迟的LSAck前发生故障,则该邻里(该LSUpdate的发送方)将在重发间隔内重新发送该LSUpdate,直至新的主控单元接收到该LSUpdate并发回一条LSAck。在“堆叠拆分”时旧的主控单元错过发送LSAck不会造成任何问题,该协议具有一个嵌入(built-in)机制,能够注意这种情况。
重发列表
在溢流程序中,LSA将会填满路由器界面的某些子集,并进入重发列表。如果在重发间隔内收到一条LSAck,则重发列表中相应的LSA将被删除,否则LSA将被发送,直至收到一条LSAck。
从属单元无需保留重发列表,因为它不对LSA的重发负责。但是,在“堆叠拆分”期间如果列表丢失,则一个新的主控单元将不能向各邻里重新发送LSA。为了确保可靠的溢流,重发列表应当被保留在从属单元中。
在从属单元上保留重发列表并不难,因为当收到一个新的LSA情况时,一个LSA将被加到列表中;而当收到一条侦测的LSAck时,一个LSA情况将被删除。唯一的问题是,如果从属单元上一个侦测的LSAck丢失了,重发列表上的LSA情况将永远不会删除。
解决的办法是,当从属单元上的重发计时器届满时,不是重发LSA,而是将其从重发列表上删除。重发计时器也将被设定到确认死亡间隔(acknowledgement dead interval),那是一个多次重发的时间间隔,其确切值将是界面的死亡间隔。这里假设LSAck应当在确认死亡间隔内从邻里收到。如果该时间间隔内没有看到LSAck,则假设侦测的LSAck丢失。使用这种方法,侦测的LSAck的处理很简单,而且遍及堆叠的LSAck的同步可以被取消。
如果从属单元变成了一个主控单元,则重发计时器将被重新设置回重发间隔,且重发列表上的LSA将被重新发送直至收到LSAck。
用于数据库同步的TCP直接信息的类型
用于LSDB同步的TCP直接信息根据其用法可以分为三种类型:
a)一个校验信息;
b)一个用于LSUpdate信息丢失的请求;和
c)一个新的LSA更新信息。
所述内容、发送方和用法如以下表2所示:
表2信息类型内容 发送方用法校验LSA报头 主控单元LSUpdate信息包丢失检测LSUpdate丢失的请求LSA报头 从属单元用于LSUpdate丢失的请求新的LSA更新完整的LSA 主控单元LSUpdate丢失的恢复,在合并时间发送完整的LSDB和在任意时刻发送自我来源LSA
堆叠合并情形
当单元合并,且加入到堆叠的新的单元成为新堆叠的主控单元,然后新主控单元上的所有IP界面和所有的从属单元将被关闭(go“down”)。当所有IP界面被关闭时,所有OSPF界面也被关闭。结果,所有OSPF的邻接全部被破坏。因此,没有动态OSPF数据需要同步。这种情况下,OSPF协议被重新启动,堆叠与剩余的网络会聚,就好象一个崭新的路由器。
在单元合并且加入堆叠的新单元成为一个从属单元的情况下,主控-从属单元之间的同步将会发生。本章的重点是描述这个过程,例如主控单元和一个新的从属单元之间动态OSPF数据的同步。
合并的情形从堆叠150中的一个单元开始,该单元即主控单元(如图15中的主控单元151)。该单元是一个OSPF路由器,其与一个邻里路由器251完整邻接。
如图16所示,第二个单元152加入到堆叠中,当其收到一个“从属事件(slave event)”时成为了一个从属单元。
一个旗标(“LSDB传输未完成”)设于从属单元上,说明LSDB传输尚未完成。使用这个旗标有两个原因。第一,当LSDB被传输时,我们不希望在从属单元上运行SPF运算。因此,在运行SPF之前,这个旗标将被检查。第二,如果在完整的LSDB被发送到从属单元之前,主控单元发生故障,这将指示从属单元(将变成主控单元)该OSPF邻接必须被中断。这将确保堆叠不会处于一个不协调的状态下,即与网络的其余部分不同步的状态。
然后静态配置数据(界面、路由选择模式、计时器数据等)于是通过脚本和实用程序进行同步,并存储于PDS(如前所述)。
在静态配置数据被发送时,一个新的、指向从属单元的TCP连接被创建。
当主控单元收到一个来自从属单元的“从属单元待命(slave ready)”信号时,主控单元将开始编排所有通过TCP直接信息发送到从属单元的动态OSPF数据。请注意在静态配置完成前,主控单元不会收到“从属单元待命”信号。
因为主控单元和从属单元IP界面有可能遭遇不同步(延迟的最坏的情况),主控单元将支配从属单元上的OSPF界面状态,而不顾从属单元上的IP界面状态。
主控单元将持续追踪用于每一个从属单元的OSPF动态数据的发送状态。该发送将从一条TCP直接信息开始,该TCP直接信息包括每一个OSPF界面(例如整个界面状态机(ISM))的状态。这将把主控单元的发送状态设置到“ISM完成(ISM complete)”。
现在,如图17所示,界面状态机数据从主控单元151发送到从属单元152。
接着,如图18所示,整个邻里状态机(NSM)被发送到从属单元。这个发送带有1个或2个TCP直接信息(根据配置的邻里的数量)。NSM被发送后,主控单元的发送状态被设置到“NSM完成”。
LSDB由与特定的域相关的连接状态广告(LSA)和外部路由组成。如图19所示,TCP直接信息将从主控单元发送到从属单元,每一条包括多个连接状态广告。主控单元负责保持追踪有多少LSDB被发送到从属单元。主控单元将继续发送信息到从属单元,直到所有LSA均被发送(请注意,自我来源LSA包含在LSDB中,因此在合并时无需被单独发送}。
当主控单元正在发送时如果一个新的LSA信息包抵达,该信息包将会被处理,就好象当前发送不在进行,例如,从属单元将继续对来自路由器251的新的LSUpdate信息包进行侦测,且校验信息将由主控单元进行发送。换句话说,当LSDB被发送时TCP辅助侦测将发生。是侦测的LSUpdate信息包中的LSA情况,还是被发送的LSA情况先行到达无关紧要。从属单元只会将最新的版本放入其LSDB中,而忽略任何收到的重复的版本或旧版本。
在最后一组LSA被发送之后,主控单元将发送一条“LSDB发送完成”信息(图20)到从属单元,并将发送状态设置到“LSDB完成”。当从属单元收到该“LSDB传输完成”,它将清除该“LSDB传输未完成”的旗标,并安排SPF运行。这个旗标说明该从属单元已经完成与主控单元的同步,而且能够在主控单元故障时接管而无需改变邻里连接(而成为主控单元)。这个旗标的清除完成了用于新的从属单元的LSDB的同步。
当发生合并时,主控单元上的OSPF协议将如本文其余部分所述那样的运行。所以,比如,如果主控单元收到一个问候信息包,这将导致主控单元上邻里数据结构的一个变化,相应的TCP直接更新信息仍将发送到从属单元(不管合并的状态是什么)。同样,如果在与从属单元的同步过程中,主控单元上的界面状态机上发生了一个变化,这也将导致一条TCP直接信息被发送到从属单元。
在任何时候,如果从属单元上一个IP界面打开(go up),则SPF将被安排到该从属单元上运行。这将确保主控单元和从属单元上的路由选择列表处于同步(当两个单元被同时开启时,这特别有必要)。如前所述,如果LSDB发送尚未完成(例如设置有“LSDB传输未完成”旗标),则SPF不会运行。
堆叠拆分情形
一个“堆叠拆分”将导致(如前所述)堆叠中单元的四种情形中的一种。
A、从属单元跃升为主控单元
从非主控状态跃升到主控状态可以在多种情况(最值得注意的是堆叠拆分,但主控单元停电或级联故障的情况也是可以的)下发生。对于这些情况,层3(Layer 3)堆叠配置指挥返回到主控操作的过程。OSPF将收到层3主控事件,并执行下列功能以承担主控操作。
对于OSPF,由从属单元跃升到主控单元需要该单元发生以下行为:
i)OSPF协议信息的发送将恢复。
ii)用于所有信息包的OSPF协议信息的接收将恢复。
iii)将重发计时器由确认死亡间隔重新设置回重发时间间隔。
iv)请求丢失LSA列表上的LSA。
v)与主控单元的旧的TCP连接将被删除。
vi)与从属单元的新的TCP连接将被创建。
vii)用于低于全功(full)状态的邻里的邻接将被重建。
viii)如果只有一部分LSDB的发送发生(在LSDB发送完成旗标所标记的稳定合并状态实现之前发生拆分),邻接将被重建。
B、主控单元丢失从属单元
这个情况同样需要考虑功能。任何时候,一个主控单元丢失了一个从属单元,与该从属单元的旧的TCP连接必须被删除。
C、从属单元与新主控单元的同步
这种情况无需讨论,因为事件发生的顺序类似于那些与主控单元的同步。但是,对于这种特定情况,需要额外考虑的是与主控单元的旧的TCP连接必须被删除。
D、从属单元丢失从属单元
这种情况无需讨论,因为一个从属单元丢失堆叠中的另一个从属单元不需要功能的变化。这种情况和前一种情况在两个单元的堆叠中不会发生。
信息包丢失情形
OSPF中的重发和确认机制确保了主控单元能够从信息包的丢失中恢复过来。用于ISM、NSM和LSDB的信息通过TCP发送,因此传输也是有保障的。这样,只有从属单元上信息包的丢失需要被考虑,本章的讨论仅限于从属单元,除非另有说明。
OSPF信息包有五种类型:
1、问候
2、数据库描述
3、连接状态请求
4、连接状态更新
5、连接状态确认
在从属单元上,连接、数据库描述和连接状态请求信息包不会被侦测(见邻里状态机同步以获得更多细节),因此无需考虑信息包丢失的情况。用于连接状态更新和连接状态确认的简要功能和信息包丢失的情况将在以下讨论。
连接状态更新(LSUpdate)
连接状态更新信息包包括一组新的LSA,并被溢流一个离其起点更远的跳转(hop)。LSDB的建设只能依靠来自邻里的LSUpdate的接收和自我来源LSA的生成。
为了保持LSDB的同步,从属单元将侦测LSUpdate信息包。LSUpdate信息包的丢失将导致LSDB脱离同步。一种叫做“TCP”辅助侦测的方法将在运行时间觉察并恢复丢失的LSUpdate信息包。在合并时间,整个LSDB将被从主控单元发送到从属单元。发送过程中任何新的LSUpdate信息包的丢失也将被TCP辅助侦测捕捉并处理。
从理论上来将,TCP侦测用于在主控单元发生故障之前的瞬间的侦测LSUpdate信息包的丢失的情况是有困难的。然而发生这种情况的可能性很小。而且,如果丢失的信息包只是一个LSA更新信息包(例如只是序列编号不同,而内容相同),那么路由选择列表中相应的路由不会被更改。如果丢失的信息包是一个更新信息包,则新的主控单元不得不等候一个LSA更新间隔(30分钟)以得到下一个更新。
通过付出更为缓慢的协议汇集和更为复杂的设计的代价,上述这种情况可以被完全避免,但是这种完全避免没有必要。
连接状态确认(LSAck)
LSAck用于确认收到LSUpdate信息包中的LSA。收到LSAck后,相应LSA的重发将被停止,同时该LSA被从重发列表中删除。LSUpdate的重发和LSAck确保了溢流程序的可靠性。
从属单元将侦测LSAck,以维护其重发列表。侦测的LSAck的丢失将导致LSA永远不会从重发列表中删除,除非邻接中断,但是在从属单元上LSA不会被重发。假设LSAck将在确认死亡时间间隔(这是一个多次重发的时间间隔,其确切值将是界面的死亡时间间隔)内被收到,如果不是,则相应的LSA将从重发列表中被删除。见重发列表一章以获得更多细节。
总之,只有LSUpdate和LSAck被侦测,且它们的丢失将分别由TCP辅助侦测和计时器来处理。其它OSPF信息包将被删除,且无需从属单元对丢失进行处理。表3概括了信息包丢失的处理。
表3信息包类型侦测/删除?丢失如何处理问候删除N/A数据库描述删除N/A连接状态请求删除N/A连接状态更新侦测TCP辅助侦测连接状态确认侦测如果在一个确认死亡时间间隔内看不到的话,则从重发列表中删除相应的LSA
在一项可替换的用于同步的技术中,如前所述,主控单元将控制从属单元的ISM和NSM,但LSDB的同步最初是通过对LSUpadte信息包的侦测。LSUpdate信息包的丢失将通过比较主控单元和从属单元间的OSPF域校验和的方式被检测到。如果校验和不同,则启动一个恢复程序。这种技术可以用于比较小的网络。
用于在主控单元和从属单元之间传输数据的通讯机制不限于TCP。任何含有能够检测和恢复/重试丢失的信息包的机制的协议都可以被用于包装收到的LSUpdate并将它们发送到从属单元。