專利名稱:在設備中向預訂客戶端分發相關路由選擇信息庫更新的制作方法
技術領域:
本發明的一個實施例涉及通信和計算機系統,尤其是路由器、分組交 換系統和其他設備;更具體而言, 一個實施例涉及在某一設備中維護向預 訂客戶端分發相關路由選擇信息庫更新的操作,所述設備例如是(但不局 限于)路由器、分組交換或其他通信和/或計算設備。
背景技術:
通信工業正在迅速變化以適應于新興的技術和不斷增長的客戶需求。 這種對于新應用和現有應用的性能增長的客戶需求正在驅動著通信網絡和 系統提供商采用具有更快速度和容量(例如更大的帶寬)的網絡和系統。 在嘗試實現這些目標時,許多通信提供商常用的方法是使用分組交換技 術。公共和專用通信網絡正被越來越多地用諸如因特網協議(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所操縱的數據,用于實現根據實施 例的功能。存儲設備3Q3是另一類型的計算機可讀介質, 一般包括固態存 儲介質、盤驅動器、磁碟、聯網服務、磁帶驅動器和其他存儲設備。根據 實施例,存儲設備303 —般存儲將被處理元件301執行的計算機可執行指 令和/或處理元件301所操縱的數據,用于實現根據實施例的功能。圖4A-C示出無限多個系統中的一些示例性系統,其中根據本發明的 范圍和精神,客戶端預訂請求與特定路由和路由選擇改變類型相關的更 新。首先,圖4A示出在一個實施例中使用的相關路由更新機制410。如 圖所示,相關路由更新機制410包括本地路由選擇數據庫416,其可以是 RIB或另一路由選擇數據庫進程的復制。本地路由選擇數據庫416允許相 關路由改變通知器412在不使用原始RIB或其他路由選擇數據庫進程的任 何資源的情況下査詢本地路由選擇數據庫416。當然, 一個實施例不包括 本地路由選擇數據庫416,而是與原始RIB或其他路由選擇數據庫進程交 互。在一個實施例中,本地路由選擇數據庫416從外部RIB、多播邊界網 關協議(MGBP)進程或其他路由選擇數據庫進程接收RIB路由更新,本地路由選擇數據庫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和地址條目63G、 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。考慮到本發明的原理可被應用到很多可能的實施例,將意識到,這里 參考附圖描述的實施例及其方面僅僅是示例性的,不應被看作對本發明范 圍的限制。例如,本領域技術人員將發現,很多進程塊操作可被重新排 序,以在其他操作之前、之后或與它們基本同時被執行。而且,在各種實 施例中可以使用很多不同形式的數據結構。這里描述的本發明想到了落入 所附權利要求及其等同物范圍內的所有這樣的實施例。
權利要求
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所述的裝置,其中所述用于識別出所述特定路由更 新對應于所述至少一個依賴路由中的所述特定路由的裝置包括用于對所述 一個或多個數據結構執行一個或多個査找操作以識別一個或多個條目的裝 置,其中所述一個或多個條目中的至少一個標識所述客戶端對所述至少一 個依賴路由的改變感興趣。
全文摘要
路由改變被處理和過濾,以向客戶端通知客戶端感興趣的那些路由選擇更新。在一種配置中,從客戶端接收到指示客戶端感興趣的路由更新的網絡地址集合和感興趣的路由選擇改變類型集合(203)。一個或多個數據結構據此被填充以該信息(210)。響應于接收到路由更新,對數據結構執行一個或多個查找操作,以識別該特定路由是否是特定客戶端感興趣的路由,和/或依賴于該特定路由的任何路由是否是客戶端感興趣的(222)。客戶端被告知感興趣的改變。在一個實施例中,路由改變類型也被與感興趣的路由選擇改變類型集合進行匹配,并僅在感興趣的路由改變也匹配感興趣的路由選擇改變類型的情況下通知客戶端(213)。
文檔編號H04L12/56GK101133412SQ200480033679
公開日2008年2月27日 申請日期2004年9月30日 優先權日2003年12月10日
發明者保羅·亞瑟·延森, 林敏潔, 洛倫佐·維西薩諾, 雷尹·莫漢提 申請人:思科技術公司