在设备中向预订客户端分发相关路由选择信息库更新

申请号 CN200480033679.9 申请日 2004-09-30 公开(公告)号 CN101133412A 公开(公告)日 2008-02-27
申请人 思科技术公司; 发明人 林敏洁; 雷尹·莫汉提; 洛伦佐·维西萨诺; 保罗·亚瑟·延森;
摘要 路由改变被处理和过滤,以向客户端通知客户端感兴趣的那些路由选择更新。在一种配置中,从客户端接收到指示客户端感兴趣的路由更新的网络地址集合和感兴趣的路由选择改变类型集合(203)。一个或多个数据结构据此被填充以该信息(210)。响应于接收到路由更新,对数据结构执行一个或多个查找操作,以识别该特定路由是否是特定客户端感兴趣的路由,和/或依赖于该特定路由的任何路由是否是客户端感兴趣的(222)。客户端被告知感兴趣的改变。在一个 实施例 中,路由改变类型也被与感兴趣的路由选择改变类型集合进行匹配,并仅在感兴趣的路由改变也匹配感兴趣的路由选择改变类型的情况下通知客户端(213)。
权利要求

1.一种在路由器内执行的用于在所述路由器内分发路由选择信息的方 法,该方法包括:
接收来自客户端的指示所述客户端感兴趣的路由更新的地址集合和感 兴趣的路由选择改变类型集合;
维护一个或多个包括与所述地址集合和所述感兴趣的路由选择改变类 型集合相对应的信息的数据结构;
接收特定路由更新;以及
响应于识别出所述特定路由更新既对应于所述地址集合中的至少一个 地址又对应于所述感兴趣的路由选择改变类型集合中的至少一个路由选择 属性,来将所述特定路由更新通知给所述客户端。
2.如权利要求1所述的方法,其中所述至少一个路由选择属性包括用 于到达所述地址集合中的地址的接口的改变。
3.如权利要求2所述的方法,其中所述将所述特定路由更新通知给所 述客户端的步骤包括将所述地址通知给所述客户端。
4.如权利要求1所述的方法,其中所述至少一个路由选择属性包括从 所述路由器到所述地址集合中的地址的路径的改变。
5.如权利要求4所述的方法,其中所述地址是从所述路由器直接可达 的。
6.如权利要求1所述的方法,其中所述至少一个路由选择属性包括关 于所述地址集合中的地址是直接可达还是不直接可达的改变。
7.如权利要求1所述的方法,其中所述至少一个路由选择属性包括到 达所述地址集合中的地址的距离的改变。
8.如权利要求1所述的方法,其中所述至少一个路由选择属性包括到 达所述地址集合中的地址的代价度量的改变。
9.一种在设备内执行的用于在所述设备内分发路由选择信息的方法, 该方法包括:
接收来自第一客户端的指示所述第一客户端感兴趣的路由更新的第一 地址集合和所述第一客户端感兴趣的第一路由选择改变类型集合;
接收来自第二客户端的指示所述第二客户端感兴趣的路由更新的第二 地址集合和所述第二客户端感兴趣的第二路由选择改变类型集合;
维护一个或多个包括与所述第一和第二地址集合和所述感兴趣的第一 和第二路由选择改变类型集合相对应的信息的数据结构;
接收特定路由更新;以及
对所述一个或多个数据结构执行一个或多个查找操作,以识别与所述 特定路由更新相对应的结果,该结果标识所述第一客户端而非所述第二客 户端,并且所述特定路由更新对应于在所述感兴趣的第一路由选择改变类 型集合中标识的特定路由选择改变类型;以及
响应于所述结果标识所述第一客户端而非所述第二客户端并且所述特 定路由更新对应于在所述感兴趣的第一路由选择改变类型集合中标识的特 定路由选择改变类型,来将所述特定路由更新通知给所述第一客户端而非 所述第二客户端。
10.如权利要求9所述的方法,其中所述一个或多个数据结构基于所述 感兴趣的第一和第二路由选择改变类型集合来维护所述第一和第二客户端 感兴趣的单个路由选择改变类型集合。
11.如权利要求9所述的方法,其中由所述一个或多个数据结构维护的 所述信息标识客户端兴趣的不同状态,其中所述兴趣的不同状态包括:所 述第一客户端对特定路由选择改变类型感兴趣、所述第二客户端对特定路 由选择改变类型感兴趣、所述第一和第二客户端两者都对特定路由选择改 变类型感兴趣,以及所述第一和第二客户端两者都不对特定路由选择改变 类型感兴趣。
12.如权利要求11所述的方法,其中所述客户端感兴趣的不同状态的 单个指示是针对所述第一和第二地址集合中的所有地址来维护的。
13.如权利要求11所述的方法,其中所述客户端兴趣的不同状态的指 示是针对所述第一和第二地址集合中的每个地址来维护的。
14.一种在设备内执行的用于在所述设备内分发路由选择信息的方 法,该方法包括:
维护包括一个或多个客户端感兴趣的路由的路由依赖性的数据结构;
接收标识特定路由的路由选择更新;
识别出所述一个或多个客户端中没有一个客户端已经预订接收对应于 所述特定路由的更新;
识别出依赖于所述特定路由的第二特定路由;
识别出所述一个或多个客户端中的特定客户端已经预订接收对应于所 述第二特定路由的更新;以及
响应于所述识别出所述特定客户端已经预订接收对应于所述第二特定 路由的更新,而将对所述特定路由的所述更新通知给所述特定客户端。
15.如权利要求14所述的方法,包括识别出对应于所述第二特定路由 的改变匹配所述特定客户端感兴趣的路由选择改变类型;并且其中所述通 知特定客户端的步骤是响应于所述识别出特定客户端已经预订接收对应于 所述第二特定路由的更新以及所述识别出对应于所述第二特定路由的改变 匹配所述特定客户端感兴趣的路由选择改变类型,来执行的。
16.一种用于在设备内分发路由选择信息的装置,该装置包括:
用于接收来自客户端的指示所述客户端感兴趣的路由更新的地址集合 和感兴趣的路由选择改变类型集合的装置;
用于维护一个或多个包括与所述地址集合和所述感兴趣的路由选择改 变类型集合相对应的信息的数据结构的装置;
用于接收特定路由更新的装置;以及
用于响应于识别出所述特定路由更新既对应于所述地址集合中的至少 一个地址又对应于所述感兴趣的路由选择改变类型集合中的至少一个路由 选择属性来将所述特定路由更新通知给所述客户端的装置。
17.一种包含用于执行用于在设备内分发路由选择信息的步骤的计算 机可执行指令的计算机可读介质,所述步骤包括:
接收来自客户端的指示所述客户端感兴趣的路由更新的地址集合和感 兴趣的路由选择改变类型集合;
维护一个或多个包括与所述地址集合和所述感兴趣的路由选择改变类 型集合相对应的信息的数据结构;
接收特定路由更新;以及
响应于识别出所述特定路由更新既对应于所述地址集合中的至少一个 地址又对应于所述感兴趣的路由选择改变类型集合中的至少一个路由选择 属性,来将所述特定路由更新通知给所述客户端。
18.一种在路由器内执行的用于在所述路由器内分发路由选择信息的 方法,该方法包括:
接收来自客户端的指示所述客户端感兴趣的路由更新的地址集合;
识别出所述地址集合中的地址依赖于的至少一个依赖路由;
维护一个或多个包括对应于所述地址集合和所述至少一个依赖路由的 信息的数据结构;
接收对应于所述至少一个依赖路由中的特定路由的特定路由更新;以 及
响应于识别出所述特定路由更新对应于所述至少一个依赖路由中的所 述特定路由,来将所述特定路由更新通知给所述客户端。
19.如权利要求18所述的方法,其中所述识别出所述特定路由更新对 应于所述至少一个依赖路由中的所述特定路由的步骤包括对所述一个或多 个数据结构执行一个或多个查找操作以识别一个或多个条目,其中所述一 个或多个条目中的至少一个标识所述客户端对所述至少一个依赖路由的改 变感兴趣。
20.一种包含用于执行用于在设备内分发路由选择信息的步骤的计算 机可执行指令的计算机可读介质,所述步骤包括:
接收来自客户端的指示所述客户端感兴趣的路由更新的地址集合;
识别出所述地址集合中的地址依赖于的至少一个依赖路由;
维护一个或多个包括对应于所述地址集合和所述至少一个依赖路由的 信息的数据结构;
接收对应于所述至少一个依赖路由中的特定路由的特定路由更新;以 及
响应于识别出所述特定路由更新对应于所述至少一个依赖路由中的所 述特定路由,来将所述特定路由更新通知给所述客户端。
21.如权利要求20所述的计算机可读介质,其中所述识别出所述特定 路由更新对应于所述至少一个依赖路由中的所述特定路由的步骤包括对所 述一个或多个数据结构执行一个或多个查找操作以识别一个或多个条目, 其中所述一个或多个条目中的至少一个标识所述客户端对所述至少一个依 赖路由的改变感兴趣。
22.一种用于在设备内分发路由选择信息的装置,该装置包括:
用于接收来自客户端的指示所述客户端感兴趣的路由更新的地址集合 的装置;
用于识别出所述地址集合中的地址依赖于的至少一个依赖路由的装 置;
用于维护一个或多个包括对应于所述地址集合和所述至少一个依赖路 由的信息的数据结构的装置;
用于接收对应于所述至少一个依赖路由中的特定路由的特定路由更新 的装置;以及
用于响应于识别出所述特定路由更新对应于所述至少一个依赖路由中 的所述特定路由来将所述特定路由更新通知给所述客户端的装置。
23.如权利要求22所述的装置,其中所述用于识别出所述特定路由更 新对应于所述至少一个依赖路由中的所述特定路由的装置包括用于对所述 一个或多个数据结构执行一个或多个查找操作以识别一个或多个条目的装 置,其中所述一个或多个条目中的至少一个标识所述客户端对所述至少一 个依赖路由的改变感兴趣。

说明书全文

技术领域

发明的一个实施例涉及通信和计算机系统,尤其是路由器、分组交 换系统和其他设备;更具体而言,一个实施例涉及在某一设备中维护向预 订客户端分发相关路由选择信息库更新的操作,所述设备例如是(但不局 限于)路由器、分组交换或其他通信和/或计算设备。

背景技术

通信工业正在迅速变化以适应于新兴的技术和不断增长的客户需求。 这种对于新应用和现有应用的性能增长的客户需求正在驱动着通信网络和 系统提供商采用具有更快速度和容量(例如更大的带宽)的网络和系统。 在尝试实现这些目标时,许多通信提供商常用的方法是使用分组交换技 术。公共和专用通信网络正被越来越多地用诸如因特网协议(IP)的各种 分组技术来构建和扩展。
可扩展性和性能对于路由器是极其重要的特征,在因特网流量增大时 尤其如此。路由选择信息库(RIB)是路由器系统上的基本软件组件。其 维护来自各种路由选择协议的路由的数据库并充当其客户端的路由选择信 息的中心源,包括转发信息库(FIB)、诸如开放最短路径优先(OSPF) 和中间系统对中间系统(IS-IS)之类的单播路由选择协议和诸如协议独立 多播(PIM)和多播源发现协议(MSDP)之类的多播路由选择协议。RIB 提供客户端用以接收所有更新的路由的接口以及客户端用以在RIB中查询 特定路由和接收相应路由选择结果的接口,如图1所示。这些路由选择查 询的示例包括查找到达目的地的下一跳地址和接口以及获得将在发送分组 时使用的最佳源地址。
诸如PIM、BGP之类的协议需要最新的路由选择信息来执行操作。例 如,PIM需要跟踪其多播拓扑表中的所有单播IP地址(即多播分布树的根 节点)的单播可达性信息的改变。PIM获知改变的速度越快,多播收敛所 花的时间就越少。轮询(pool)RIB是一种跟踪所需改变的可能方法。但 是,这导致计算效率很低,并且传播改变的等待时间很长,尤其是对于大 规模应用更是如此。而且,轮询RIB以从RIB中提取所需路由的做法既消 耗RIB资源,也消耗客户端处理资源,这在客户端协议数目和所维护的路 由数目由于利用特定路由选择协议的节点数目增长或其他因素而增长时, 可能导致性能问题。需要的是向客户端提供路由更新的新机制。

发明内容

本发明公开了用于在诸如但不局限于路由器、分组交换或其他通信和/ 或计算设备之类的设备中为预订客户端维护和分发相关路由选择改变的方 法、设备、数据结构、计算机可读介质、机制和装置等等。一个实施例从 客户端接收指示客户端感兴趣的路由更新的地址集合和感兴趣的路由选择 改变类型集合,并据此以该信息填充一个或多个数据结构。响应于接收到 路由更新,对数据结构执行一个或多个查找操作,以识别该特定路由是否 是特定客户端感兴趣的路由,和/或任何依赖于特定路由的路由是否是客户 端感兴趣的。客户端被告知感兴趣的改变。在一个实施例中,路由改变类 型也被与感兴趣的路由选择改变类型集合进行匹配,并仅在感兴趣的路由 改变也匹配感兴趣的路由选择改变类型的情况下通知客户端。路由的可扩 展路由选择改变类型的示例可以包括但不局限于下一跳地址的改变、下一 跳地址接口的改变、到该路由的路径的改变、关于该路由是否直接可达的 改变、到该路由的距离的改变、到该路由的代价的改变或者在另一度量或 路由选择信息方面的改变。
附图说明
所附权利要求详细地阐述本发明的特征。从以下结合附图的详细描述 中,可以最好地理解本发明及其优点,在附图中:
图1是示出客户端在路由选择信息库(RIB)中查询当前路由选择信 息的现有技术系统的框图
图2是示出一种示例性系统的框图,其中客户端预订请求与特定路由 和路由选择改变类型相关的更新;
图3是在一个实施例中使用的系统或其组件的框图,例如但不局限于 相关路由更新机制、RIB、客户端或其多个部分和/或其他进程
图4A-C是示出其中客户端预订请求与特定路由和路由选择改变类型 相关的更新的示例性系统的框图;
图5A-C示出了在一个实施例中使用的进程,其用于维护一个或多个 客户端感兴趣的特定路由和路由选择改变类型的一个或多个数据结构,以 及用于处理路由更新以识别是否进行了感兴趣的改变并且作为响应通知对 此感兴趣的一个或多个客户端;
图5D示出在一个实施例中使用的路由更新消息;
图6A是示出在一个实施例中用于维护路由选择信息的数据结构的框 图;以及
图6B是示出在一个实施例中包括在用于维护路由选择信息的数据结 构的条目中的字段的框图。

具体实施方式

本发明公开了用于在诸如但不局限于路由器、分组交换系统和其他通 信和/或计算设备之类的设备中为预订客户端维护和分发相关路由选择信 息库更新的方法、设备、数据结构、计算机可读介质、机制和装置等等。
这里所描述的实施例包括各种元素和限制,其中没有一个元素或限制 被视为关键的元素或限制。每项权利要求单独全面地完整陈述本发明的一 个方面。此外,这里所描述的某些实施例可以包括但不限于系统、网络、 集成电路芯片、嵌入式处理器、ASIC、方法和包含指令的计算机可读介质 等等。一个或多个系统、设备、组件等可构成一个或多个实施例,这些实 施例可包括由相同或不同系统、设备、组件等执行的权利要求的某些元素 或限制。下文中所描述的实施例体现了本发明的范围和精神内的各种方面 和配置,其中附图示出了示例性而非限制性的配置。
这里所使用的术语“分组”是指任何类型的分组或任何其他信息和数 据单元,包括但不限于固定长度信元和可变长度分组,其中每一个可以或 不可以被划分成更小的分组或信元。这里所使用的术语“分组”还指分组 本身或分组指示,例如但不限于分组的全部或部分或者分组头部、数据结 构值、指针或索引或者分组或与其相关联的信息的任何其他部分或直接或 间接标识。例如,路由器通常对分组(尤其是头部)的一个或多个字段进 行操作,因此在分组状况被操纵的同时分组的主体通常被存储在单独的存 储器中,并且基于分组(即本示例中的分组头部)处理的结果,整个分组 被转发或丢弃,等等。此外,这些分组可包含一种或多种类型的信息,包 括但不限于语音、数据、视频和音频信息。这里一般使用的术语“项目” 是指分组或其他信息或数据单元或片段、设备、组件、元件或任何其他实 体。短语“处理分组”和“分组处理”一般是指基于分组内容(例如分组 头部或其他字段)执行某些步骤或动作,这种步骤或动作可能包括或不包 括修改、存储、丢弃和/或转发分组和/或相关联的数据。
术语“地址”在这里一般是指设备、网络、其他实体或其部分的标识 值。例如,当使用分级的网络地址时,地址可以指前缀(例如IP地址 10.0.0.*)或完全指定的地址(例如IP地址10.0.0.44)。而且,地址(例 如前缀或完全指定的地址)可以由前缀和长度值代表。“路由”或“路 径”在这里一般是指介于第一节点和第二节点(例如通信或计算设备、路 由器、其他实体或其一部分)之间的途径。在第一和第二节点之间可能存 在中间节点,并且在两个节点之间可能存在多条路由或路径。而且,  “路 由(to route)”一般指路由或路径的标识或通过网络、路径或设备发送信 息(例如分组)。
在一个实施例中,路由可以由目的地地址、下一跳地址(即为到达目 的地而穿过的下一节点的地址或目的地本身的地址)和从其发送信息以到 达下一跳的外出接口标识的组合来标识;而在一个实施例中,路由可以由 单个地址或一系列地址和/或其他值来标识。在一个实施例中,用外出接 口标识值为零或另一特定值来标识从本地节点无法直接到达下一跳地址。 在一个实施例中,另一指示机制(例如标志或其他值)被用于标识下一跳 地址是否直接可达。在一个实施例中,对一个或多个数据结构执行一系列 路由查找操作(有时也称之为递归查找操作)以识别开始和目的地节点之 间的路由。在一个实施例中,基于目的地地址执行查找操作以返回路由。 如果识别出的下一跳地址不是直接可达,则基于返回的下一跳地址执行查 找操作,如此反复,直到下一跳地址直接可达为止。
术语“系统”在这里一般用于描述任何数目的组件、元件、子系统、 设备、分组交换元件、分组交换机、路由器、网络、计算机和/或通信设 备或机构,或者其组件的组合。术语“计算机”在这里一般用于描述任何 数目的计算机,包括但不限于个人计算机、嵌入式处理元件和系统、控制 逻辑、ASIC、芯片、工作站、大型机等。术语“处理元件”在这里一般 用于描述任何类型的处理机构或设备,例如处理器、ASIC、现场可编程 阵列、计算机等。术语“设备”在这里一般用于描述任何类型的机构, 包括计算机或系统或其组件。术语“任务”和“进程”在这里一般是用于 描述任何类型的运行程序,包括但不限于计算机进程、任务、线程、执行 应用程序、操作系统、用户进程、设备驱动器、原码、机器或其他语言等 等,并且可以是交互式的和/或非交互式的、在本地和/或远程执行的、在 前台和/或后台执行的、在用户和/或操作系统地址空间中执行的、程序库 例程和/或独立应用,并且不限于任何特定的存储器分区技术。在附图 (包括但不限于任何框图和流程图以及消息序列图)中示出的步骤、连 接、信号和信息处理一般可以按相同或不同的串行或并行顺序来执行,和 /或由不同的组件和/或进程、线程等来执行,和/或在不同连接上执行,并 且可与其他实施例中的功能相组合,除非这使实施例无法实现或对序列有 明示或暗示的要求(例如对于读取值、处理值的序列,值必须在处理前首 先被获取,但是某些相关处理也可能在读操作之前、之后和/或同时被执 行)。此外,术语“识别”一般用于描述直接或间接确认某事物的任何方 式或机制,这可以包括但不局限于接收、从存储器取得、确定、限定、计 算、生成等等。术语“通知”一般用于描述利用任何通信机制向某一实体 直接或间接告知某事的任何方式或机制。
此外,术语“网络”和“通信机制”在这里一般用于描述一个或多个 网络、通信介质或通信系统,包括但不局限于因特网、私有或公共电话、 蜂窝、无线、卫星、线缆、局域、城域和/或广域网络、线缆、电连接、 总线等等以及诸如消息传递、进程间通信、共享存储器等等的内部通信机 制。术语“消息”在这里一般用于描述信息,该信息块可以或不可以但 一般是经由一个或多个任何类型的通信机制来通信的。
术语“存储机制”包括任何类型的存储器、存储设备或用于维护任何 格式的指令或数据的其他机制。“计算机可读介质”是可扩展的术语,包 括任何存储器、存储设备、存储机制和其他存储和信令机制,包括诸如网 络接口卡之类的接口和设备以及其中的缓冲器,还有任何通信设备和接收 和发送的信号和计算机化的系统可以解释、接收和/或发送的其他当前和 发展中的技术。术语“存储器”包括任何随机访问存储器(RAM)、只 读存储器(ROM)、闪存、集成电路和/或其他存储组件或元件。术语 “存储设备”包括任何固态存储介质、盘驱动器、磁碟、联网的服务、磁 带驱动器和其它存储设备。存储器和存储设备可以存储将由处理元件和/ 或控制逻辑执行地计算机可执行指令,以及由处理元件和/或控制逻辑操 纵的数据。术语“数据结构”是一种可扩展术语,其指可被应用于数据以 辅助解释数据并对数据执行操作的任何数据元素、变量、数据结构、数据 库和/或一个或多个组织方案,例如但不局限于存储器位置或设备、集 合、队列、树、堆栈、列表、链表、阵列、表、指针等等。数据结构一般 被维持在存储机制中。术语“指针”和“链接”在这里一般指用于引用或 标识另一元件、组件或其他实体的某种机制,它们可以包括但不局限于对 存储器或其他存储机制或其中的位置的引用、数据结构中的索引、值等 等。
术语“一个实施例”在这里是指特定实施例,其中对“一个实施例” 的每次提及可以指不同实施例,并且在描述相关联的特征、元素和/或限 制时对该术语的重复使用不是建立每个和所有实施例必须包括的相关联的 特征、元素和/或限制的累积集合,但是实施例一般可以包括所有这些特 征、元素和/或限制。另外,短语“用于xxx的装置”一般包括包含用于 执行xxx的计算机可执行指令的计算机可读介质。
另外,术语“第一”、“第二”等等在这里一般是指不同单元(例如 第一元件、第二元件)。这些术语的使用不一定意味着某种顺序,例如一 个单元或事件发生在另一单元或事件之前,而是提供一种用于在特定单元 间进行区分的机制。另外,名词单数的使用并非限制性的,其使用一般包 括一个或多个特定事物,而并非仅有一个(例如单词“存储器”的使用一 般指一个或多个存储器,而无需指定“一个或多个存储器”或“至少一个 存储器”等等)。此外,短语“基于x”和“响应于x”被用于指示从其 导出或导致某种事物的项目x的最小集合,其中“x”是可扩展的并且不 一定描述被执行操作的项目的完整列表等。另外,短语“耦合到”被用于 指示两个元件或设备之间的某种级别上的直接或间接连接,其中耦合的设 备修改或不修改被耦合的信号或被传输的信息。术语“子集”被用于指示 一个集合的全部或部分元素的群组。术语“子树”被用于指示一个树的全 部或部分。此外,术语“或者”被用于标识对一个或多个(包括全部)联 合项目的选择。
一个实施例在路由器或其他设备内分发路由选择信息。来自客户端的 一组指示客户端感兴趣的路由更新的地址被接收,并被用于填充一个或多 个数据结构。响应于路由更新的接收,对一个或多个数据结构执行一个或 多个查找操作,以识别该路由选择更新是否是其客户端之一感兴趣的路由 选择更新,如果是,则将该特定路由更新告知相应的一个或多个对此感兴 趣的客户端(而对此更信不感兴趣的客户端一般不会得到该路由选择更新 的通知)。在一个实施例中,路由更新对应于感兴趣的已注册地址或对感 兴趣的已注册地址依赖于的路由的更新。
在一个实施例中,一组感兴趣(例如具有路由选择属性)的路由选择 改变的类型被接收并被维护在一个或多个数据结构中;并且客户端仅被告 知该路由更新是否是客户端感兴趣的路由更新,以及是否具有感兴趣的路 由选择改变的类型。这些类型的路由选择改变一般可以包括但不局限于用 于到达感兴趣的地址的接口的改变、去往感兴趣的地址的路径的改变、感 兴趣的地址是直接可达还是不直接可达的改变、到达感兴趣的地址的距离 的改变、到达感兴趣的地址的代价度量的改变等等。取决于实施例,这些 类型的路由选择改变是基于每个地址、每个客户端、每个地址每个客户 端、每个系统或基于其它来维护的。在一个实施例中,每个系统或每个地 址地维护感兴趣的路由选择改变的类型,这时客户端可能接收到不感兴趣 的更新。
在一个实施例中,相关路由更新机制只通知客户端该客户端感兴趣的 路由更新。因此,在一个实施例中,相关路由更新机制维护与关于其客户 端的路由选择信息相关的信息。这些客户端可以是任何实体,例如但不局 限于协议、应用、转发引擎和/或任何其它进程。
相关路由更新机制一般维护指示每个客户端感兴趣的那些路由的数据 结构。不同实施例使用不同技术来维护该信息。例如,一个实施例为每个 客户端维护不同的数据结构,以便响应于特定路由改变来识别哪个客户端 需要通知。一个实施例维护对于将响应于改变向哪个或哪些客户端通知特 定路由的指示。一个实施例使用相关路由更新机制的多个实例,例如对于 每个客户端使用一个实例。另外,一个实施例维护用于标识客户端之一感 兴趣的改变类型的附加信息。例如,客户端可能对可达性信息改变(例如 下一跳地址或接口的改变)、距离值改变或某种其它路由选择特性、地 址、值、度量等的改变感兴趣。该信息可以基于每个地址、每个客户端、 每个地址每个客户端、每个系统或基于其它来维护。
在一个实施例中,客户端向相关路由更新机制注册关于到特定地址的 路由选择信息的改变通知。注意,客户端可注册的地址的数目可以很小或 甚至相当大。例如,诸如PIM的客户端通常需要注册若干集中点和成千 上万个源地址。相关路由更新机制监视针对影响由其客户端注册的地址的 改变的路由更新,如果存在改变,则响应于检测到的改变向受影响的客户 端发送即时通知。
在一个实施例中,针对每个地址,相关路由更新机制一般设置一个条 目并利用客户端信息(例如路由选择属性、感兴趣的路由选择改变的类型 等等)来注释该条目。然后相关路由更新机制在RIB中查询到该地址的路 由,如果路由是递归的,则继续查询RIB,直到路由被解析出为止。然 后,将路由选择信息返回到客户端。在进行路由解析时,相关路由更新机 制还为沿路径的每个路由(例如甚至未被注册为感兴趣的地址的地址)创 建条目,并设置条目之间的依赖性信息。
该客户端信息允许客户端向相关路由更新机制指定客户端感兴趣的路 由选择改变的类型。可能的客户端信息的示例包括但不局限于直接连接的 下一跳IP地址、到下一跳的接口、路由矩阵、路由距离和提供该路由的 路由选择协议。基于路由选择属性,客户端进行选择,相关路由更新机制 为该客户端设置通知策略。这使客户端不仅能够基于针对他们感兴趣的地 址的路由的改变得到通知,还能够仅就针对感兴趣的地址的路由选择属性 方面的具有相应的指定或缺省的路由选择改变类型的改变得到通知。这是 一种基于可扩展策略的方案,因此策略可以是基于每个客户端的、每个地 址、每个客户端/每个地址或基于特定实施例所需的任何其他基础的。
在一个实施例中,相关路由更新机制维护对地址感兴趣的一个或多个 客户端的索引或其他指示,从而多个客户端可以注册对相同或不同的地址 的兴趣。当然,存在无限多种方式(例如集合、列表、阵列、矩阵、位图 等等)可用于维护地址和对与该地址相关联的路由选择改变感兴趣的一个 或多个客户端之间的对应关系(反之亦然)。而且,一个实施例为每个条 目维护一个参考计数,以便于标识一个条目在何时不再引起任何客户端的 兴趣。
在一个实施例中,客户端首先进行绑定以在相关路由更新机制内建立 该客户端专有的上下文(例如用于与另一进程中的客户端通信的连接信 息,或者由客户端指定的函数回调)。在该绑定进程期间,相关路由更新 机制还为该客户端分配一个客户端句柄。该客户端句柄唯一地映射到客户 端位图结构中的比特位置并在本质上预留该比特位置。每个条目包含一个 客户端位图,以将该条目与客户端所有者的集合相关联。如果在位图中设 置了多于一个比特,则条目被两个或更多个客户端所拥有。同样,如果位 图中的所有比特都被清除,则条目不再使用并应该被删除。当存在导致地 址的路由选择信息改变的路由更新时,相关路由更新机制使用位图结构来 确定应该向哪些客户端发送通知。
在一个实施例中,相关路由更新机制利用它的一个或多个数据库来就 相关性对所有路由更新进行检查。如果路有更新是对现有路由的添加/改 变事件或删除事件,相关路由更新机制则搜索其数据结构,如果更新是无 关的,则简单地忽略该更新。否则,确定哪些地址将受该更新影响并通知 已注册对该地址的兴趣的相应客户端。如果通知具有进程间通信(IPC) 的形式,则考虑到效率可将针对每个客户端的多个路由更新聚集在一起。 相关路由更新机制例如可以作为RIB功能的一部分或协议进程功能的一部 分来实现。
在一个实施例中,相关路由更新机制被优化,以仅仅保留必需路由来 导出针对感兴趣的地址的路由选择信息改变。这可以包括在路由是递归的 的情况下解析路由并针对在解析进程中使用的每个路由创建一个数据库条 目。
在一个实施例中,条目被存储在radix树中,因此可响应于接收到路 由选择更新而快速识别出匹配地址。为了跟踪路由依赖性,每个条目保存 一个依赖队列(例如依赖地址/条目的列表)。当更新影响特定路由时, 所有依赖条目/地址都被重解析/更新。如果这导致已注册地址的路由选择 信息的任何改变,则通知相应的一个或多个客户端。利用依赖队列(或其 他依赖性标识机制),相关路由更新机制可以在一个或多个数据库中快速 定位针对任何地址的任何路由选择属性改变,并因而触发到一个或多个客 户端的通知消息。
相关路由更新机制的一个实施例支持多路由选择源,这种多路由选择 源一般是某些客户端的期望特征,例如但不局限于多播协议。一般对于多 播协议,可以存在单播可达性信息的多个源,例如但不局限于静态多播特 有的单播路由、单播IGP/BGP路由和多播特有的IGP/EGP路由。相关路 由更新机制可以通过在多个路由选择源之间进行仲裁来充当到其客户端的 路由选择信息的中心源。
在返回附图之前,需要记住并在上下文中遵循:这里描述的是很多不 同的和可扩展的实施例中的一个或多个的很多不同方面。当然,特定特征 和实现方式的细节可能随相同或不同实施例的实现方式的变化而变化,尤 其是在响应于特定应用的需求(例如协议客户端、设备能等等)时,和 甚至基于诸如实现实施例的每个人的设计偏好之类的因素。
相关路由更新机制一般不只接收客户端感兴趣的路由更新。例如,图 2示出一个实施例,其中相关路由更新机制210从一个或多个路由选择数 据库220接收路由更新223,所述路由选择数据库220可能(也可能不) 与图1所示的路由信息库相同或类似,或者包括图1所示的路由信息库。
虽然不是必须的,但一个实施例一般从RIB接收更新,因为RIB当 前是来自多个源的大多数路由信息的仓库并且被用路由改变来更新。在一 个实施例中,无法从RIB或其他主路由选择信息源获得所有路由选择信 息,在此情况下,路由更新223是从多个路由选择数据库220接收到的, 并且一般路由选择查询和结果222与这多个路由选择数据库220通信。
图2示出的是一个或多个客户端200、相关路由更新机制210和一个 或多个路由选择数据库220。一个或多个客户端200经由消息203与相关 路由更新机制210通信以注册其预订,从而接收感兴趣的路由更新,并传 达哪些是感兴趣的路由以及传达感兴趣的路由选择改变的可能的相关性参 数/类型(例如通知路由改变、通知可达性信息的改变、通知下一跳地址 或接口的改变、通知跳距离的改变等等)。
一个或多个路由选择数据库220通过向其他设备发送和从其他设备接 收路由更新225来进行通信,以标识通信和末端设备之间的路由。相关路 由更新机制210接收来自一个或多个路由选择数据库220的路由更新 223,其中这些路由更新一般是由一个或多个路由选择数据库220标识的 所有路由更新。相关路由更新机制210处理这些路由更新223以一般过滤 掉或以其他方式减少特定客户端不感兴趣的某些或全部路由,从而使每个 客户端200一般接收相关路由更新213(例如一般比所有路由更新223要 少,并一般只有特定客户端感兴趣的路由,或基本上只有特定客户端感兴 趣的路由)。在一个实施例中,相关路由更新机制210在改变发生时向客 户换提供事件驱动通知,并因而为客户端提供快速获得最新路由选择信息 的可缩放的方式。
另外,相关路由更新机制210可以传输路由查询和结果消息222以获 得和接收所需路由信息。例如,当感兴趣的路由被注册时,相关路由更新 机制210可能需要该路由和任何中间路由的当前路由选择信息。
图3是用于运行一个或多个进程的系统及其组件300的框图,所述进 程例如是但不局限于在一个实施例中使用的相关路由更新机制、RIB、客 户端或其某些部分和/或其他进程。在一个实施例中,系统或组件300执 行与这里示出或以其他方式描述的流程图之一相对应的一个或多个进程。
在一个实施例中,组件300包括处理元件301、存储器302、存储设 备303和用于传输信息和/或发送分组、项目和/或其他信息的接口304, 这些元件一般经由一个或多个通信机制309(为图示目的被示为总线)耦 合。组件300的各种实施例可以包括更多或更少的元件。组件300的操作 一般被处理元件301利用存储器302和存储设备303来控制,以执行一个 或多个排定的任务或进程。存储器302是一种类型的计算机可读介质,一 般包括随机访问存储器(RAM)、只读存储器(ROM)、闪存、集成电 路和/或其他存储器组件。存储器302一般存储将被处理元件301执行的 计算机可执行指令和/或处理元件301所操纵的数据,用于实现根据实施 例的功能。存储设备303是另一类型的计算机可读介质,一般包括固态存 储介质、盘驱动器、磁碟、联网服务、磁带驱动器和其他存储设备。根据 实施例,存储设备303一般存储将被处理元件301执行的计算机可执行指 令和/或处理元件301所操纵的数据,用于实现根据实施例的功能。
图4A-C示出无限多个系统中的一些示例性系统,其中根据本发明的 范围和精神,客户端预订请求与特定路由和路由选择改变类型相关的更 新。
首先,图4A示出在一个实施例中使用的相关路由更新机制410。如 图所示,相关路由更新机制410包括本地路由选择数据库416,其可以是 RIB或另一路由选择数据库进程的复制。本地路由选择数据库416允许相 关路由改变通知器412在不使用原始RIB或其他路由选择数据库进程的任 何资源的情况下查询本地路由选择数据库416。当然,一个实施例不包括 本地路由选择数据库416,而是与原始RIB或其他路由选择数据库进程交 互。
在一个实施例中,本地路由选择数据库416从外部RIB、多播边界网 关协议(MGBP)进程或其他路由选择数据库进程接收RIB路由更新 421。在一个实施例中,本地路由选择数据库416向外部RIB或其他路由 选择数据库进程发送和从其接收查询和结果423。
相关路由改变通知器412从本地路由选择数据库416接收路由更新 415,该路由更新415一般是由本地路由选择数据库416接收到的所有路 由更新421。
一个或多个客户端400经由通信403向相关路由改变通知器412预订 路由更新服务。而且,一个或多个客户端400中的每一个传达哪些是感兴 趣的路由以及感兴趣的路由选择改变的可能的相关性参数/类型(例如通 知路由改变、通知可达性信息的改变、通知下一跳地址或接口的改变、通 知跳距离的改变等等)。然后,相关路由改变通知器412可以过滤或以其 他方式识别和发送路由更新407到特定的一个或多个客户端,其中发送的 一般是(基本上是)特定的一个或多个客户端感兴趣的那些路由更新。
相关路由改变通知器412处理路由更新415,从而一般过滤掉或以其 他方式减少特定客户端不感兴趣的某些或全部路由,以使得每个客户端 400一般只接收相关的路由更新407(例如一般比所有路由更新421/415 要少,并一般只有感兴趣的路由,或基本上只有感兴趣的路由)。在一个 实施例中,相关路由改变通知器412在发生改变时向客户端提供事件驱动 通知,并因此为客户端提供获得最新路由选择信息的可缩放的方式。
另外,相关路由改变通知器412可以传输路由查询和结果消息413, 以获得所需路由信息。例如,当感兴趣的路由经由信号403被注册时,相 关路由改变通知器412可能需要获得针对该路由和已注册的地址所依赖于 的任何中间路由的路由选择信息。
接下来,图4B示出相关路由更新机制450,其包括RIB 456和相关 路由改变通知器412。RIB 456是基于协议路由选择更新451来更新的, 而相关路由改变通知器412基于路由更新415和路由查询和结果413来通 知一个或多个客户端400。客户端400经由通信403向相关路由改变通知 器412预订路由更新服务。而且,一个或多个客户端400中的每一个传达 哪些是感兴趣的路由以及感兴趣的路由选择改变的可能的相关性参数/类 型(例如通知路由改变、通知可达性信息的改变、通知下一跳地址或接口 的改变、通知跳距离的改变等等)。然后,相关路由改变通知器412可以 过滤或以其他方式识别和发送路由更新407到特定的一个或多个客户端, 其中发送的一般是(基本上是)特定的一个或多个客户端感兴趣的那些路 由更新。
接下来,图4C示出相关路由更新机制480,其包括相关路由改变通 知器482。如图所示,相关路由更新机制480不包括其自己的本地RIB或 其他本地数据库;相反,相关路由改变通知器482从外部路由选择数据库 490接收路由更新495,并可选地与外部路由选择数据库490传输路由查 询和结果493。相关路由改变通知器482基于路由更新415和路由查询和 结果413来通知一个或多个客户端400。客户端400经由通信403向相关 路由改变通知器412预订路由更新服务。而且,一个或多个客户端400中 的每一个传达哪些是感兴趣的路由以及感兴趣的路由选择改变的可能的相 关性参数/类型(例如通知路由改变、通知可达性信息的改变、通知下一 跳地址或接口的改变、通知跳距离的改变等等)。然后,相关路由改变通 知器412可以过滤或以其他方式识别和发送路由更新407到特定的一个或 多个客户端,其中发送的一般是(基本上是)特定的一个或多个客户端感 兴趣的那些路由更新。
图5A-C示出了在一个实施例中使用的进程,其用于维护一个或多个 客户端感兴趣的特定路由和路由选择改变类型的一个或多个数据结构,以 及用于处理路由更新以识别是否进行了感兴趣的改变并且作为响应通知对 此感兴趣的一个或多个客户端。
图5A示出在一个实施例中使用的用于接收和处理对可能具有感兴趣 的路由改变类型的地址的客户端通知的请求的进程。处理开始于进程块 500,并前进至进程块502,其中感兴趣的路由被接收,其中可能具有对 感兴趣的路由选择改变的一个或多个类型的指示。接下来,在进程块504 中,针对接收到的具有路由选择类型指示的地址创建一个条目。在进程块 506中,该条目被插入到数据结构中,这包括在所有已注册的感兴趣的路 由的数据结构(例如radix树)中添加一个链接条目。在进程块508中, 基于接收到的地址在数据结构中执行查找操作。如进程块510所确定的, 在返回直接连接的路由之前,针对取得的下一跳地址的条目在进程块514 中被创建;该条目在进程块516中被插入到数据结构中,其中关于对先前 地址的依赖性的指示和到其父的链接也一起被插入;在进程块518中对取 得的地址执行查找操作,并且进程返回进程块510。当进程块510确定完 成时,在进程块512中,下一跳值和到达下一跳的接口被返回。如进程块 513所指示的,处理完成。
图5B示出在一个实施例中使用的用于接收和处理不再接收可能具有 感兴趣的路由改变类型的地址的客户端通知的请求的进程。处理开始于进 程块530,并前进至进程块532,其中感兴趣的路由被接收。如进程块 534所确定的,如果没有定位到条目,则处理完成,如进程块536所指 示。否则,对特定路由感兴趣的客户端的数目的参考计数被减小。一个实 施例使用这样的参考计数;而一个实施例不使用。如进程块540所确定 的,如果该条目未被其他节点所使用(例如参考计数为0或经由其他机 制),则在进程块542中,该条目被删除。如进程块544所确定的,如果 该条目具有父条目,则在进程块548中,父条目被取得并且处理返回进程 块538以基于父条目重复该进程。否则,如进程块546所指示的那样,处 理完成。
图5C示出在一个实施例中使用的用于处理路由更新以识别是否应该 发送通知指示并在应该发送的情况下识别应将其发送到哪个或哪些客户端 的进程。处理开始于进程块560,并前进至进程块562,其中路由更新被 接收并且执行查找操作。如进程块564所确定的,如果没有定位到条目, 则处理完成,如进程块566所指示的。否则,如进程块570所确定的,如 果路由更新对应于感兴趣的特定类型的路由选择改变,则在进程块572 中,相应的一个或多个客户端被通知。在一个实施例中,当路由选择改变 的类型不被使用或它们被忽略时,进程块572不被执行,处理直接前进至 进程块572,因而针对所有匹配的感兴趣的路由更新发送通知消息。
返回图5C所示的处理,如进程块574所确定的,如果在一个或多个 数据结构中存在任何依赖路由,则在进程块578中,该依赖路由被获取并 且处理返回进程块570,以对每个依赖路由重复该进程。当在进程块574 中确定不存在更多依赖路由时,如进程块576所指示的,处理完成。
图5D是出在一个实施例中使用的路由更新590。如图所示,路由更 新590包括地址591和其相应的下一跳地址592和下一跳接口59。在一个 实施例中,相关路由更新机制从一个或多个路由选择数据库接收到包括值 591-593的路由更新消息590。在一个实施例中,包括值591-593的路由更 新消息590被用于将相关路由更新通知给客户端。在一个实施例中,路由 更新消息590包括某些附加值(例如路由选择属性、距离、代价等等) 594。在一个实施例中,路由更新消息590包括一组与路由更新消息590 匹配的一个或多个已注册的地址595(即用于向客户端通知路由更新和通 知路由更新的原因)。
图6A是示出在一个实施例中用于维护路由选择信息的数据结构600 的框图。Radix树610被用于维护每个已注册的路由和其每个依赖路由。 Radix树公知是用于存储地址的,并提供了在查找操作期间识别匹配地址 的快速而有效的方式。Radix树610中的每个条目被链接(如指针615所 示)到其在数据结构600的第二部分617中的相应条目。
数据结构600的第二部分617维护对路由依赖性的指示,以使得针对 给定的路由更新,相应的受影响的已注册地址可以被容易地识别出。示出 的是根条目620和地址条目630、640、650和660,它们相应的指针 631、641、651和661指向它们各自的父条目,而它们相应的依赖链接 632、642、652和662及其相应的链接633、643、653和663链接到它们 各自的兄弟条目。例如,如果对应于地址条目640的路由更新被识别出, 则一个或多个客户端需要基于对应于地址条目540及其依赖条目650的路 由更新的通知。当然,存在无限多个可用于维护路由选择信息的一个或多 个数据结构。
图6B是示出在一个实施例中用于维护路由选择信息的数据结构的条 目680中包括的字段的框图。如图所示,条目680包括地址681;下一跳 地址682;下一跳接口683;附加值684(例如当前距离、代价等等,用 于确定是否存在由于路由更新所导致的改变);感兴趣的客户端的指示 685(例如列表、位图、数组等等);感兴趣的路由选择改变类型的指示 686;父、依赖和兄弟指针687;以及参考计数688。
考虑到本发明的原理可被应用到很多可能的实施例,将意识到,这里 参考附图描述的实施例及其方面仅仅是示例性的,不应被看作对本发明范 围的限制。例如,本领域技术人员将发现,很多进程块操作可被重新排 序,以在其他操作之前、之后或与它们基本同时被执行。而且,在各种实 施例中可以使用很多不同形式的数据结构。这里描述的本发明想到了落入 所附权利要求及其等同物范围内的所有这样的实施例。
QQ群二维码
意见反馈