專利名稱:網絡過濾驅動器的構造和運行環境的制作方法
技術領域:
本發明涉及過濾數據包。尤其是,本發明涉及用于一種抽象接口的系統、方法和計算機程序產品,以便管理將過濾器實例插入過濾器棧、從過濾器棧中除去過濾器實例,以及回避過濾器實例的功能性,而不中斷有關的協議棧操作。
背景技術:
在當今世界,大量的計算機通過計算機網絡(例如,互聯網)而彼此耦合,這使各臺計算機能夠交換數據。但是,這些計算機中的大多數計算機的耦合關系并不是直接的一對一的關系。相反,這些計算機通常處于多臺計算機被互連的網絡環境中,每臺計算機都可以與網絡中的所有其他的計算機交換數據。隨著被耦合到傳統網絡的計算機的數量的增加,通過這類網絡而被轉移的數據的數量也增長了。結果,開發了一些用于通過計算機網絡來有效、可靠地轉移數據的技術。
促進數據通過網絡來被有效轉移的一種技術是“分包”(“packetizing”)。通過分包技術,大量數據被分成較小的段或“包”。與龐大的數據相比,包所要求的用于處理的資源較少。此外,通過使用包,可以用遞增的方式來接收數據,這樣,當傳輸中發生錯誤時,必須被重新發送的數據的數量減少了。
另一種技術是使用“開放式系統互聯”(“OSI”)模型,該技術定義用于執行通信協議的聯網結構。OSI模型中將數據轉移操作分入七個不同的“層”中進行,每個層被指定執行數據轉移過程中的某些操作。雖然一些聯網應用程序已實現了每個層,但是,許多應用程序只實現用于通過網絡來轉移數據的選擇性層。由多數協議棧中引入的兩個層是傳輸層和數據鏈路層。傳輸層通常與分包的數據有關。傳輸層協議的一個例子是“傳輸控制協議” (“TCP”)。數據鏈路層通常與將位編碼成包以及將包解碼成位有關。
將數據從計算機設備發送到網絡通常包括為龐大的數據分包的一個傳輸層驅動器、將包解碼成位的一個數據鏈路層驅動器,以及將位傳輸到網絡上的網絡硬件(例如,網卡)。從網絡接收數據的計算機設備通常包括按相反順序進行的這些操作。也就是說,硬件設備接收位,數據鏈路層驅動器將位編碼成包,這些包被發送到傳輸層驅動器,進而結合成龐大的數據。當將包解碼成分派給網絡硬件的位時,以及當將位編碼成分派給傳輸層協議的包時,數據鏈路層驅動器可以對數據執行特殊的操作。這是有利的,因為數據在被發送到網絡上或被發送到更高層次的協議之前可能需要進行修改。
過去,為某個特殊的平臺編寫或指定數據鏈路層驅動器,以促進數據的兼容轉移。隨著協議和硬件設備類型的數量的激增,這導致了一些問題的產生。要刪除、添加或修改數據鏈路層驅動器所執行的操作,必須完全重寫驅動器。重寫數據鏈路層驅動器的成本十分昂貴,涉及高水平的專門技術,經常會造成現有硬件的荒廢或使這類硬件的用戶放棄被增強的功能性。此外,當計算機系統內存在多個數據鏈路層驅動器時,各種數據鏈路層驅動器中所包括的功能可能會變成多余,卻仍要求一些適當的操作。
結果,在協議棧的數據鏈路層方面,開發了一些其他的方法,用于對數據執行操作。一種這類的方法是“IP防火墻鉤”,用于當數據包在協議棧的數據鏈路層與傳輸層之間傳遞時“鉤住”這些數據包。鉤住包的好處在于可以容易地執行數據監控功能,例如,檢查包的起源地址,以確定應該對包進行處理還是放棄。但是,鉤住包的好處也有限,因為可能無法修改包并將其插回到數據流中。另外,還開發了與鉤住包不相兼容的其他更現代的聯網技術。例如,IP防火墻鉤不能與普遍使用的“互聯網連接共享”技術共同操作。
用于對通過協議棧的數據鏈路層的數據包執行操作的另一種方法是使用“中間驅動器”。中間驅動器介于傳輸層與數據鏈路層之間,可以執行傳統的數據監控和其他更先進的過濾功能(例如,數據壓縮和加密)。中間驅動器允許為協議棧添加功能性或刪除功能性,而不必重寫根本的鏈接層設備驅動器。此外,可以對多個中間驅動器進行分層,以便對通過數據鏈路層的數據執行一系列功能。
與IP防火墻鉤相比,中間驅動器所提供的功能性增加了,但是,中間驅動器存在某些固有的問題。中間驅動器的安裝和配置經常涉及合并來自一個操作系統部件(例如,注冊表)的數據或將數據提供給一個操作系統部件(例如,注冊表)。其中有中間驅動器處理操作系統數據的過濾環境是有害的,這至少有兩個原因。
從協議棧安裝或除去中間驅動器可能會要求拆卸和重建該協議棧。這可能會導致必須重建協議棧,以便添加中間驅動器的功能性。同樣,如果編寫數據的中間驅動器不被重建,則會使協議棧發生故障。拆卸和重建協議棧可能包括重新啟動計算機系統,以便為中間驅動器對數據進行適當的初始化。此外,在某些情況下,在所安裝的中間驅動器被激活之后,它可能只需要觀察網絡數據。但是,即使中間驅動器處于不活動的狀態,它也將保持被安裝并使用各種寶貴的操作系統資源,因而使網絡性能退化。
所以,我們需要的是一些系統、方法和計算機程序產品,用于按節約處理資源和網絡資源的方式來有效地過濾數據包并改變過濾操作。
發明內容
本發明的原理用于有效地過濾數據包和改變過濾操作。計算機設備中所包括的協議棧與可能包括一個或多個過濾器實例的過濾器棧有關。與協議棧有關的數據包通過過濾器實例,這些過濾器實例可以對該數據包執行過濾操作。過濾器實例可以被插入過濾器棧或從過濾器棧中被除去,所采用的方式減少了中斷有關的協議棧的可能性。
此外,可以根據數據包和/或配置參數的特征來回避與過濾器實例有關的過濾操作。可以用各種方式來回避過濾操作。當包完全避開與通信路徑(例如,數據路徑或控制路徑)有關的過濾器實例時,可以回避過濾操作。當不對所接收的數據包執行過濾器實例內部的一項或多項過濾操作時,也可以回避過濾操作。抽象接口通過調用過濾驅動器來管理過濾器棧,這些過濾驅動器促進動態地插入和除去對應于該過濾器棧的過濾器實例。
當過濾器實例被插入過濾器棧時,過濾驅動器可以從抽象接口接收參數。這些參數有助于過濾器實例的配置,以執行過濾操作。可以對過濾器實例進行配置,以便根據被輸入的數據包的特征來執行不同的過濾操作。例如,一個過濾器棧可能會既過濾“互聯網協議” (“IP”)包,又過濾“網絡分組交換”(“IPX”)包。如果合適的話,不管數據是被包括在IP包中還是被包括在IPX包中,這些參數都可能會使過濾器實例執行相同的處理。此外,如果合適的話,這些參數也可能會根據數據是被包括在IP包中還是被包括在IPX包中,來使過濾器實例執行類似(但有些不同)的處理。
較之于每個傳輸使用一個實例,所有傳輸使用一個單個的過濾器棧來過濾數據包,可以減少由計算機設備配置和保持的過濾器實例的數量。這減少了過濾器棧將被配置多余邏輯的可能性,因此也降低了與過濾數據包有關的操作的復雜程度。
當抽象接口促進將新的過濾器實例插入操作的過濾器棧時,它可能首先通知有關的協議棧將要暫停使用當前的過濾器棧。然后,抽象接口可能會暫停使用過濾器棧。暫停使用過濾器棧可能會涉及調用與當前過濾器棧中的每個過濾器實例有關的“暫停”模塊。一旦所有的過濾器實例都被暫停使用,就可以將新的過濾器實例插入過濾器棧中的適當的位置。然后,抽象接口可以通知所有協議過濾器棧將被啟動,它包括最新添加的過濾器實例的功能性。然后,可以啟動新的過濾器棧。這可能會涉及調用與新的過濾器棧中的每個過濾器模塊有關的“啟動”模塊。
當將過濾器實例插入過濾器棧時,抽象接口可以將參數(包括一個“過濾器句柄”)發送到有關的過濾驅動器。過濾器句柄實質上是一個返回地址,過濾驅動器可以使用該返回地址將與過濾器實例有關的數據傳送到抽象接口。通過使用所接收的參數,過濾驅動器可以創建“過濾器上下文”,并為有關的過濾器實例分配資源。然后,可以將有關的過濾器實例的過濾器上下文傳送到抽象接口。過濾器上下文實質上是抽象接口可用來將數據傳送到與對應的過濾器實例有關的過濾驅動器的返回地址。
可以根據所接收的參數來將過濾器實例插入過濾器棧。過濾驅動器可以將狀況代碼發送到抽象接口,指出嘗試將過濾器實例插入過濾器棧的各種結果。通過使用不同的過濾器句柄,可以將同一個過濾器的多個獨立的過濾器實例安裝到過濾器棧中。可以用一種方式來執行所有這些操作,該方式減少了拆卸有關的協議棧或重置有關的操作系統的可能性。
在數據實際轉移期間,過濾器實例可以根據其所接收的一個被輸入的數據包的特征來執行一些(而不是全部)有關的內部過濾操作。例如,當過濾器實例收到一個IP包時,它可以執行某些過濾操作;如果過濾器實例收到一個IPX包,則不會執行這些過濾操作。過濾器實例也可以被配置成用“回避”模式進行操作,其中,包完全回避與通信路徑(例如,數據路徑或控制路徑)有關的過濾器實例。由于不使用處理器資源來執行無關的過濾操作,因此,這提高了過濾過程的效率。
本發明的額外的特點和優點將在下文中加以陳述,其部分內容將從描述中顯而易見,或可以通過實踐本發明而得知。可以利用所附權利要求中所特別指出的工具和組合裝置來實現并獲得本發明的各種特點和優點。通過以下描述和所附權利要求,將更加清楚本發明的這些和其他的特點,或者,可以通過實踐如下文所述的本發明來對其加以了解。
為了描述本發明上述和其他的優點與特點的獲得方式,將參考附圖中所展示的本發明的特殊實施例,來對以上作簡要描述的本發明進行更加詳細的描述。不言而喻,這些附圖只描繪本發明的典型實施例,因此,它們不被認為是本發明范圍的限制。將通過使用附圖來更加確切、詳細地描述和解釋本發明。在這些附圖中圖1展示了為本發明提供合適的操作環境的一種示例處理系統。
圖2A展示了一些功能性部件的一個例子,這些功能性部件可以促進將過濾器實例插入過濾器棧。
圖2B展示了一些交互過程的一個例子,這些交互過程可能發生在各個功能性部件之間,以促進將過濾器實例插入過濾器棧。
圖2C展示了一些功能性部件的一個例子,這些功能性部件可以促進回避與過濾器實例有關的過濾操作。
圖3是流程圖,展示了用于將過濾器實例插入過濾器棧的方法的一個例子。
圖4是流程圖,展示了用于至少回避與過濾器實例有關的一些過濾操作的方法的一個例子。
具體實施例方式
本發明涉及系統、方法和計算機程序產品,用于過濾數據包,所采用的方式可節約處理器和網絡資源。一種抽象接口對過濾器棧進行管理,過濾器棧包括一個或多個過濾器實例。每個過濾器實例都可以對從網絡接收到的或被發送到網絡的數據包執行過濾操作。過濾器實例可以根據可完全回避過濾器實例的一個數據包或多個數據包的特征來執行不同的過濾操作。此外,過濾器實例可以被添加到過濾器棧或從過濾器棧中被除去,所采用的方式減少了必須重新啟動有關的協議棧的可能性。能夠容易地交換過濾器實例(每個過濾器實例都可以執行不同的過濾操作)的能力,這會產生許多不同的過濾選項。
要從過濾器棧添加或除去過濾器實例,可以首先暫停使用過濾器棧。暫停使用過濾器棧可以包括暫停使用過濾器棧中所包括的各個單獨的過濾器實例。當將要暫停使用過濾器棧時,可以通知利用該過濾器棧來執行過濾操作的協議棧。當暫停使用過濾器棧時,抽象接口可以調用過濾驅動器,來插入或除去過濾器實例。在插入或除去過濾器實例之后,可以將過濾器棧的新配置通知給有關的協議棧。
在操作期間,抽象接口在傳輸層與數據鏈路層之間進行操作,以管理數據包到過濾器棧的轉移。當抽象接口從數據鏈路層接收到數據包時,它將數據包傳送到過濾器棧,從離數據鏈路層最近的過濾器實例開始。然后,抽象接口可以接連將數據包依次傳送到離傳輸層較近的每個過濾器實例,直到數據包通過所有的過濾器模塊為止。然后,抽象接口可以將被過濾的數據包發送到傳輸層。
當抽象接口從傳輸層接收到數據包時,它按實質上相反的順序來執行這些操作。抽象接口將數據包傳送到過濾器棧,從離傳輸層最近的過濾器實例開始。然后,抽象接口可以接連將數據包傳送到離數據鏈路層較近的每個過濾器實例,直到數據包通過所有的過濾器實例為止。然后,抽象接口可以將被過濾的數據包發送到數據鏈路層。
在通過過濾器棧的轉移期間,不同的數據包可以由不同的過濾操作來進行過濾。這可能由數據包的特征引起。例如, “互聯網協議”(“IP”)包的過濾方式可能不同于“網絡分組交換”(“IPX”)包的過濾方式。用不同的過濾操作來過濾不同的數據包也可能由數據包的流向引起。也就是說,對從數據鏈路層被轉移到傳輸層的數據包執行的過濾操作可能不同于對從傳輸層被轉移到數據鏈路層的數據包執行的過濾操作。
可能是這種情況在一個數據流方向上,數據包完全回避過濾器實例;而在另一個數據流方向上,數據包不完全回避過濾器實例。例如,正從數據鏈路層被轉移到傳輸層的數據包可以完全回避過濾器實例,而正從傳輸層被轉移到數據鏈路層的數據包由過濾器實例進行過濾。除了數據包以外,也可以對過濾器棧進行配置,以便通過過濾器棧的控制信息完全回避過濾器實例。
本發明的實施例可以包括專用或通用計算機(包括各種部件),下文將更加詳細地加以討論。本發明范圍內的實施例還可以包括計算機可讀介質,用于攜帶或保存被存儲于其上的計算機可執行指令或數據結構。這類計算機可讀介質可以是通用或專用計算機能夠存取的任何可用的介質。舉例來說(但不作限制),這類計算機可讀介質可以包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲器、磁盤存儲器或其他磁性存儲設備,或可以被用于以計算機可執行指令或數據結構的形式來攜帶或存儲所需的程序代碼方法并可以由通用或專用計算機進行存取的任何其他的介質。
當信息通過網絡或另一種通信連接(硬連線通信連接、無線通信連接,或者硬連線通信連接或無線通信連接的組合)被轉移或提供給計算機時,計算機適當地將連接視作一種計算機可讀介質。因此,任何這樣的連接都適于被稱為“計算機可讀介質”。上述內容的組合也應該被包括在計算機可讀介質的范圍內。例如,計算機可執行指令包括可以使通用計算機、專用計算機或專用處理設備執行某項功能或某組功能的指令和數據。
圖1和以下的討論意在對可以實施本發明的一種合適的計算機環境進行簡要、一般的描述。雖然不作要求,但是,將在計算機可執行指令(例如,程序模塊)的總環境中描述本發明,這些計算機可執行指令由網絡環境中的計算機執行。通常,程序模塊包括執行特殊任務或實現特殊抽象數據類型的例行程序、程序、對象、組件、數據結構等。計算機可執行指令、有關的數據結構和程序模塊代表用于執行這里所揭示的各種方法的步驟的程序代碼方法的例子。這類可執行指令或有關的數據結構的特殊順序代表用于執行這類步驟中所描述的各種功能的對應動作的例子。
精通該技術領域的人將會理解,可以在具有許多類型的計算機系統配置的各種網絡計算機環境中實踐本發明,包括個人計算機、手持設備、移動電話、個人數字助理(“PDA”)、多處理器系統、基于微處理器的或可編程的消費電子設備、網絡PCs、小型計算機、大型計算機和類似的設備。也可以在各種分布式計算機環境中實踐本發明,在這些分布式計算機環境中,本地處理設備和遠程處理設備通過通信網絡被連接(通過硬連線鏈接、無線鏈接,或者通過硬連線鏈接或無線鏈接的組合),并且,地方處理設備和遠程處理設備都執行任務。
參考圖1,用于實施本發明的一種示例系統包括采用傳統計算機120的形式的一個通用計算機設備,傳統計算機120包括一個處理單元121、一個系統存儲器122和將各種系統部件(包括系統存儲器122)耦合到處理單元121的一個系統總線123。系統總線123可以是幾種總線結構(包括一個存儲總線或存儲控制器、一個外圍總線,以及使用各種總線構造中的任一種構造的一個本地總線)中的任何一種。系統存儲器可以包括只讀存儲器(“ROM”)124和隨機存取存儲器(“RAM”)125。基本輸入/輸出系統(“BIOS”)126可以被存儲在ROM 124中,基本輸入/輸出系統包含幫助在計算機120內的各個元件之間轉移信息的各種基本例行程序(如在啟動期間)。
計算機120也可以包括用于從磁性硬盤139讀取和對其寫入的一個磁性硬盤驅動器127、用于從可移動的磁盤129讀取或對其寫入的一個磁盤驅動器128,以及用于從可移動的光盤131(例如,CD-ROM或其他光學介質)讀取或對其寫入的一個光盤驅動器130。磁性硬盤驅動器127、磁盤驅動器128和光盤驅動器130分別通過硬盤驅動器接口132、磁盤驅動器接口133和光驅接口134被連接到系統總線123。驅動器及其有關的計算機可讀介質為計算機120提供計算機可執行指令、數據結構、程序模塊和其他數據進行非易失性存儲。雖然這里所描述的示例環境使用磁性硬盤139、可移動的磁盤129和可移動的光盤131,但是,也可以使用用于存儲數據的其他類型的計算機可讀介質,包括盒式磁帶、閃存卡、數字多用途盤片、伯努里式編碼磁帶、RAM、ROM和類似物。
包含一個或多個程序模塊的程序代碼方法可以被存儲在硬盤139、磁盤129、光盤131、ROM124或RAM125上,包括一個操作系統135、一個或多個應用程序136、其他程序模塊137和程序數據138。用戶可以通過鍵盤140、指示設備142或其他輸入設備(未示出) (例如,話筒、操縱桿、游戲手柄、圓盤式衛星電視天線、掃描儀或類似的設備)來將命令和信息輸入計算機120。這些和其他的輸入設備經常通過與系統總線123相耦合的串行端口接口146被連接到處理單元121。或者,各個輸入設備可以由其他的接口(例如,并行端口、游戲端口或“通用串行總線”(“USB”))來連接。監視器147或另一個顯示設備也經由一個接口(例如,視頻適配器148)被連接到系統總線123。除了監視器以外,個人計算機通常包括其他的外圍輸出設備(未示出)(例如,揚聲器和打印機)。
計算機120可以在使用與一臺或多臺遠程計算機(例如,遠程計算機149a和149b)的邏輯連接的聯網環境中進行操作。遠程計算機149a和149b都可以是另一臺個人計算機、服務器、路由器、網絡PC、對等設備或其他共公網絡節點。雖然圖1中只展示了內存存儲設備150a與150b及其有關的應用程序136a與136b,但是,遠程計算機149a和149b可以包括與計算機120有關的上述許多或所有元件。圖1中所描繪的邏輯連接包括這里舉例(而不是限制)提出的一個局域網(LAN)151和一個廣域網(WAN)152。在辦公室范圍或企業范圍的計算機網絡、內聯網和互聯網中,這類聯網環境很普遍。
當計算機120在LAN聯網環境中被使用時,它通過網絡接口適配器153或類似的適配器被連接到本地網絡151。當計算機120在WAN聯網環境中被使用時,它可以包括一個調制解調器154、一個無線鏈路或用于在廣域網152(例如,互聯網)上建立通信的其他裝置。調制解調器154(可以是內置的,也可以是外置的)經由串行端口接口146被連接到系統總線123。在聯網環境中,可以將與計算機120有關的所述程序模塊或其各個部分存儲在遠程內存存儲設備中。將會理解,所示的網絡連接是起示范的作用,可以使用在廣域網152上建立通信的其他方法。
在此文和隨后的權利要求中,“虛擬例行程序”被定義為不執行任何任務的例行程序。虛擬例行程序可能是一個程序模塊或一套計算機可執行指令的一個部分,它包括用于接收數據的一個頭部,但不對它所接收的數據執行操作。也就是說,從虛擬例行程序被輸出的數據與曾被輸入到虛擬例行程序的數據相同。
在此文和隨后的權利要求中,“入口點”被定義為一個程序模塊或一套計算機可執行指令的一個部分中的一個位置。外部程序模塊可以調用一個入口點,并發送被輸入的數據,以促進執行與入口點有關的指令執行。例如,虛擬例行程序可以有一個入口點。
在此文和隨后的權利要求中,“系統注冊表”被定義為可以由操作系統用來存儲配置信息的數據庫。
根據本發明,可以存儲程序模塊(包括抽象接口、過濾器棧、過濾器實例、被用來促進過濾數據包的過濾驅動器,以及有關的程序數據),并從任何與計算機系統120有關的計算機可讀介質來對其進行存取。例如,操作系統135、應用程序136、其他的程序模塊137和/或程序數據138中包括部分抽象接口、過濾器棧、過濾器實例、過濾驅動器和有關的程序數據,用于存儲在磁性硬盤139上。如前所述,可以在分布式環境中執行與過濾數據包有關的程序模塊。例如,遠程計算機設備(例如,遠程計算機149a或149b)中所包括的過濾驅動器可以促進將過濾器實例插入本地處理設備(例如,計算機120)中所包括的過濾器棧,或者,反之亦然。
圖2A表現了可用于促進將過濾器實例插入過濾器棧的一些功能性部件。如所展示的,計算機201以通信聯絡的方式被耦合到網絡205。在計算機201與網絡205之間被轉移的包可以通過包括傳輸層協議202、抽象接口203和數據鏈路驅動器204的通信路徑傳輸。計算機201可以包括在圖1討論中所參考的任何部件。網絡205可以包括在圖1討論中所參考的任何網絡環境。
抽象接口203可以與過濾器棧206和過濾驅動器210進行通信。當接收數據包時,抽象接口203可以將數據包轉移給過濾器棧206中所包括的每個過濾器實例。如果從傳輸層協議202接收數據包,則抽象接口203可以將該數據包傳送到過濾器實例207a,再依次地傳送到離數據鏈路驅動器204較近的其他過濾器模塊。如果從數據鏈路驅動器204接收數據包,則抽象接口203可以將該數據包傳送到過濾器實例211a,再依次地傳送到離傳輸層協議202較近的其他過濾器模塊。
抽象接口203可以與過濾驅動器210進行通信,以促進將過濾器實例插入過濾器棧206或從過濾器棧206中除去過濾器實例。過濾驅動器210中包括過濾器插入模塊220、過濾器啟動模塊221和過濾器暫停模塊222。圖2B表現了一些交互過程的一個例子,這些交互過程可以發生在圖2A所示的各個功能性部件之間,以促進將過濾器實例插入過濾器棧。圖3是流程圖,展示了用于將過濾器實例插入過濾器棧的一種方法。將參考圖2A和2B中所包括的功能性部件來討論圖3中的方法。
如圖3所示,可以通過暫停過濾器棧的操作來開始插入過濾器實例(動作301)。這可以包括暫停使用當前正在過濾器棧中進行操作的各個單獨的過濾器實例。可以通過調用有關的暫停模塊來暫停使用過濾器實例。例如,過濾器暫停模塊222可以促進暫停使用曾由過濾驅動器210插入過濾器棧的過濾器實例。可以通知協議棧過濾器棧將被暫停使用。
如圖2A所示,過濾器棧206包括過濾器實例210a,過濾器實例210a可能以前已由過濾驅動器210插入過濾器棧206。抽象接口203可以將數據傳送到過濾器暫停模塊222,以便使過濾器實例210a(或由過濾驅動器210插入過濾器棧206的其他過濾器實例)進入暫停狀態。當使過濾器實例進入暫停狀態時,過濾驅動器可以執行某些操作。例如,過濾驅動器可以使與過濾器實例有關的隊列包被清除,可以停止與過濾器實例有關的其他運行的操作,并可以延遲使過濾器實例進入暫停狀態,直到過濾器實例處理好未完成的包和請求為止。
可以連續暫停使用過濾器實例。例如,可以首先暫停離傳輸層協議202最近的過濾器實例。如圖2A所示,過濾器207a將會是被暫停使用的第一個過濾器實例。在成功地暫停使用離傳輸層協議202最近的過濾器實例之后,可以暫停使用下一個最近的過濾器實例(即,過濾器實例208a)。在這個例子中,如果將要暫停使用整個過濾器棧,則會按以下的順序來暫停使用其余的過濾器實例208b、209a、210a和211a。一旦過濾器實例211a(離數據鏈路層最近的過濾器實例)成功地到達暫停狀態,也就可以認為過濾器棧206進入暫停狀態。然后,可以通知協議棧過濾器棧206被成功地暫停使用。
過濾器實例可能與“例行程序處理機”有關,“例行程序處理機”是被用來促進發送、接收和要求數據包的模塊。在一個實施例中,暫停使用過濾器也可以包括與虛擬例行程序交換例行程序處理機。這樣,數據包可以通過虛擬例行程序(而不是實際的例行程序處理機)被轉移。例如,數據包可以被發送到虛擬例行程序,而不是被發送到用于接收數據包的例行程序處理機。可以由抽象接口來執行交換,以便過濾器實例在處于暫停狀態時不必處理任何新的包。
當配置過濾器實例的操作時,可能需要暫停使用該過濾器實例。可以通過局部暫停使用過濾器棧來暫停使用特定的過濾器實例。也就是說,過濾器棧中的一些過濾器實例被暫停使用,而其他過濾器實例繼續進行操作。在這些情況中,可能暫停使用離傳輸層較近的過濾器實例,而不暫停使用離數據鏈路層較近的過濾器實例。可以采用連續的方式來加以執行,離傳輸層較近的過濾器實例在離數據鏈路層較近的過濾器實例之前被暫停使用。
例如,在圖2A中,假設過濾器棧206中的所有過濾器實例當前都正在運作。如果過濾器實例208b將要接收配置參數,則可以暫停使用過濾器實例207a,再暫停使用過濾器208a,然后暫停使用過濾器實例208b。但是,在配置過濾器實例208b的期間,離數據鏈路層較近的其他過濾器實例(包括過濾器實例209a、過濾器實例210a和過濾器實例211a)可以繼續進行操作。
要重新啟動被局部暫停使用的過濾器棧,可以首先重新啟動離數據鏈路層最近的、被暫停使用的過濾器實例,然后連續重新啟動離傳輸層較近的每個被暫停使用的過濾器實例。在以上段落的例子中,將重新啟動過濾器實例208b,再重新啟動過濾器實例208a,然后重新啟動過濾器實例207a。
圖3中的方法可以包括用于重新配置過濾器棧中所包括的操作的一個步驟(步驟304)。這可以包括執行一些動作在將過濾器實例插入過濾器棧的同時,至少一個協議棧繼續能夠轉移數據(動作302)并開始操作過濾器棧(動作303)。在插入過濾器實例的同時,協議棧繼續能夠轉移數據,這有助于沿通信路徑有效地轉移數據。
將過濾器實例插入過濾器棧可以包括過濾驅動器從抽象接口接收參數。圖2B中的箭頭1展示了抽象接口203將參數發送到過濾驅動器210。被發送到過濾驅動器210的參數可以包括一個過濾器句柄,可以使用該過濾器句柄來指代所創建的過濾器實例。例如,如果箭頭1中所包括的參數曾被用來創建過濾器實例210b,則過濾驅動器210可以使用過濾器句柄,將與過濾器實例210b相對應的數據發送到抽象接口203。參數也可以包括在過濾器棧中應該插入過濾器實例的位置。例如,在圖2B中,過濾驅動器210可能已接收到一個參數,該參數曾指出應該在過濾器實例208b與209a之間插入過濾器實例210b。
將過濾器實例插入過濾器棧可以包括創建過濾器實例上下文。圖2B中的箭頭2展示了上下文創建模塊230為過濾器實例210b創建過濾器實例上下文。可以將一個過濾器的多個實例插入一個過濾器棧。例如,圖2B中展示了過濾器實例208a和208b。同一個過濾驅動器可能已將過濾器實例208a和208b插入過濾器棧206。但是,過濾器實例208a和208b可能會根據曾被用來創建它們的參數而有所不同。可以使用過濾器實例上下文來區別曾由同一個過濾驅動器創建的過濾器實例(例如,過濾器實例208a和208b)。
將過濾器實例插入過濾器棧可以包括為過濾器實例分配資源。圖2B中的箭頭3展示了資源分配模塊231為過濾器實例210b分配資源。這可以包括為過濾器實例分配內存,供進行操作;以及為隊列數據包分配內存,供過濾器實例進行處理。這些只是在將過濾器實例插入過濾器棧時可以被分配的資源的一些例子。精通該技術領域的人在閱讀此文之后將顯而易見,可以分配各種類型的資源,供過濾器實例使用。
將過濾器實例插入過濾器棧可以包括將過濾器實例上下文發送到抽象接口。圖2B中的箭頭4展示了過濾驅動器210將關于過濾器實例210b的過濾器實例上下文發送到抽象接口203。抽象接口203可以將過濾器實例上下文用作對過濾器實例210b的指代。例如,當抽象接口203將與過濾器實例210b有關的數據發送到過濾驅動器210時,抽象接口203可以將過濾器實例上下文包括在內。抽象接口203可以使用過濾器實例上下文來讓過濾驅動器210認識到所接收的數據與過濾器實例210b有關。
將過濾器實例插入過濾器棧可以包括從系統注冊表讀取可配置的參數。圖2B中的箭頭5展示了可配置參數存取模塊233從系統注冊表223讀取可配置的參數。可配置參數存取模塊233可以使用以前所接收的配置句柄來對系統注冊表進行存取。配置句柄可以是指針或其他尋址機制,它將可配置參數存取模塊233指引到系統注冊表的一個部分,與過濾器實例210b有關的參數可能位于那里。讀取系統注冊表可以包括讀取代表過濾器實例的識別號碼。
在一個實施例中,過濾驅動器登記到抽象接口,當該抽象接口發送參數(例如,由圖2B中的箭頭1代表的參數)時,它可以將配置句柄發送到過濾驅動器。抽象接口可以管理登記或將登記傳送到系統注冊表。或者,過濾驅動器可以將數據直接登記在系統注冊表。
將過濾器實例插入過濾器棧可以包括根據所接收的參數來配置過濾器實例。所接收的參數可能已從抽象接口被發送或已從系統注冊表被讀取。圖2B中的箭頭6展示了過濾器插入模塊220發送參數來配置過濾器實例210b。過濾器實例可以被配置成執行各種過濾操作例如,監控數據包,除去、插入和/或修改數據包中的數據,檢查與數據包有關的地址,壓縮數據包,為數據包加密,或其任何組合。
過濾器實例可以被配置成過濾通過“虛擬個人網絡”(“VPN”)而被轉移的數據包。例如,可以通過使用沒有真實的物質實體的虛擬連接來轉移在網絡205上被轉移的數據包。盡管依次將數據包傳遞到正確的目的地,但是,可以用臨時的方式經由各種機器來發送這些數據包。也就是說,連接不采用專門的物理線路。
過濾器實例也可以配置有一個入口點,以便接收電源管理(“PM”)和/或即插即用(“PnP”)數據。當計算機設備由于處于不活動狀態而進入待命模式時,可以將有關的電源管理數據發送到過濾器實例。同樣,如果可能影響數據包流動的外圍設備(例如,網卡)被插入計算機設備,則可以將有關的數據發送到過濾器實例。
在一個實施例中,可以使用管理接口來配置過濾器實例。管理接口可以包括一個用戶接口,其中,用戶經由輸入設備來輸入與過濾器實例有關的參數。這些參數由過濾驅動器接收,并促進過濾器實例的配置。這樣的一個例子是用戶可配置的防火墻。
配置過濾器實例也可以包括將過濾器實例與多個傳輸層協議“綁定”。當過濾器實例與傳輸層協議綁定時,它可以過濾與傳輸層協議有關的數據包。例如,如圖2A所示,過濾器實例210b可以被配置成既過濾數據包傳輸A又過濾數據包傳輸B。
不言而喻,以前所描述的過濾器實例配置只是一些例子。精通該技術領域的人在閱讀此文之后將顯而易見,可以用許多不同的方式來配置過濾器實例。
將過濾器實例插入過濾器棧可以包括證實過濾器實例被適當地插入過濾器棧。這可以包括將插入狀況發送到抽象接口。圖2B中的箭頭7和8展示了插入狀況模塊232接收對過濾器實例210b的插入狀況的證實并將插入狀況發送到抽象接口203。
返回圖3,將過濾器實例插入過濾器棧可以包括開始過濾器棧的操作(動作303)。這可以包括啟動當前被暫停使用的各個單獨的過濾器實例。可以通過調用有關的啟動模塊來啟動過濾器實例。例如,過濾器啟動模塊221可以促進啟動曾由過濾驅動器210插入過濾器棧的過濾器實例(例如,過濾器實例210a和210b)。可以通知協議棧將要啟動過濾器棧。
抽象接口203可以將數據傳送到過濾器啟動模塊221,以便使過濾器實例210a、210b或由過濾驅動器210插入過濾器棧206的其他過濾器實例進入操作狀態。可以連續啟動過濾器實例。例如,可以首先啟動離數據鏈路驅動器204最近的過濾器實例(即過濾器實例211a)。在成功地啟動離數據鏈路驅動器204最近的過濾器實例之后,可以啟動下一個最近的過濾器實例。如圖2B所示,將會是過濾器實例210a。在這個例子中,將按以下的順序來啟動其余的過濾器實例209a、210b、208b、208a和207a。一旦過濾器實例207a成功地到達操作狀態,也就可以認為過濾器棧206處于操作狀態。啟動過濾器棧也可以包括與例行程序處理機交換虛擬例行程序,以便過濾器棧206可以適當地處理數據包。然后,可以通知協議棧過濾器棧206處于操作狀態。
可能會局部重新啟動完全被暫停使用的過濾器棧。也就是說,過濾器棧中的一些過濾器實例被重新啟動,而其他的過濾器實例仍然被暫停使用。當過濾器棧中的一個特定的過濾器實例將要被重新啟動時,可能會發生這種情況。在這些情況中,可能會重新啟動離數據鏈路層較近的過濾器實例,而離傳輸層較近的過濾器實例仍然被暫停使用。可以用連續的方式來加以執行,其中,離數據鏈路層較近的過濾器實例在離傳輸層較近的過濾器實例之前被重新啟動。
例如,在圖2A中,假設過濾器棧206中的所有過濾器實例當前被暫停使用。如果將要重新啟動過濾器實例209a,則可以首先重新啟動過濾器實例211a,再重新啟動過濾器實例210a,然后重新啟動過濾器實例209b。離傳輸層較近的其他過濾器實例(包括過濾器實例208b、過濾器實例208a和過濾器實例207a)仍然可以被暫停使用。
不言而喻,圖2A和2B中所展示的模塊和箭頭只是一些例子。在不脫離本發明的精神和范圍的前提下,可以組合不同的模塊和有關的功能性。例如,過濾驅動器210可以包括一個單個的模塊,該模塊執行與將過濾器實例添加到過濾器棧有關的操作。也可能將過濾驅動器210包括為抽象接口203的一部分。同樣,與圖2B中所包括的箭頭有關的功能性的執行順序也只是起示范的作用。在不脫離本發明的精神和范圍的前提下,可以按各種順序來執行與圖2B中所包括的箭頭有關的功能性。精通該技術領域的人在閱讀此文之后將顯而易見,可以用許多不同的方式來組合模塊及其有關的功能。
除了將過濾器實例插入過濾器棧以外,本發明的實施例可以從過濾器棧中除去過濾器實例。當從過濾器棧中除去過濾器實例時,可能會使用以前所描述的各種方法來暫停使用和啟動過濾器棧。
當從過濾器棧中除去過濾器實例時,過濾驅動器可以釋放以前被分配給過濾器實例使用的資源。例如,抽象接口203可以將數據發送到過濾驅動器210,指出應該從過濾器棧206中除去過濾器實例210b。過濾器棧206可以被暫停使用,過濾驅動器210可以從過濾器棧206中除去過濾器實例210b。然后,過濾驅動器210可以釋放曾被分配給過濾器實例210b使用的資源。隨后,可以啟動過濾器棧206。可以通知有關的協議棧該過濾器棧不再包括過濾器實例210b的功能性。
圖2C表現了一些功能性部件的一個例子,這些功能性部件可以促進回避與過濾器實例有關的過濾操作。可以根據與包和/或配置信息有關的特征來回避過濾操作。回避過濾操作可以包括一個包完全回避過濾器實例和一個所接收的包回避過濾器實例的一項或多項內部過濾操作。圖4是流程圖,展示了一種用于至少回避與過濾器實例有關的過濾操作的方法的一個例子。將參考圖2C中所包括的功能性部件來討論圖4中的方法。
圖2C中展示了過濾器實例210b,過濾器實例210b被包括在過濾器棧206中。過濾器實例210b包括控制模塊215,以及過濾器操作216a、216b和216c。圖2C中展示了一個通信路徑,包通過該通信路徑從傳輸層被轉移到數據鏈路層。但是,也可以利用通信路徑來實踐本發明,包通過通信路徑從數據鏈路層被轉移到傳輸層。通信路徑可以包括一個數據路徑,數據包藉此數據路徑通過協議棧被轉移;也可以包括一個控制路徑,控制包藉此控制路徑通過協議棧被轉移。
這類控制路徑可以包括請求和狀況指示。可以將請求從傳輸層向下轉移到數據鏈路層。請求可以包括一個指示網絡接口適配器(例如,網絡接口適配器153)將接受多點傳送包或將被置于混雜模式。請求也可以包括一個詢問。例如,請求可以詢問網絡接口適配器的媒介訪問控制地址,也可以詢問網絡接口適配器當前是否正在接收多點傳送包。
可以將狀況指示從數據鏈路層轉移到傳輸層。狀況指示可以包括來自數據鏈路層的一個指示介質當前被連接或被斷開。
圖4中的方法可以包括處理輸入包的動作(動作401)。這可以包括過濾器實例210b接收包240a。在圖2C中,曾從過濾器實例208b發送包240a。在這個所展示的實施例中,包240a將會沿從傳輸層協議202到數據鏈路驅動器204的數據路徑被轉移。但是,這只是起說明性的作用,因為當數據包沿從數據鏈路驅動器204到傳輸層協議202的數據路徑被轉移時,也可以對其進行過濾。也可能對正沿控制路徑被轉移的包進行過濾。過濾器實例也可能無法按任何特定的順序對包進行過濾。例如,可以將包從過濾器實例208a傳送到過濾器實例210a。輸入包也可能是曾由過濾器實例創建的包。
在一個替換的實施例中,可以處理由包240c代表的包。包240c的處理可以確定,包240c正通過數據路徑或控制路徑被轉移,該數據路徑或控制路徑完全回避過濾器實例210b的過濾操作。如圖2C所示,虛線箭頭將包240c從過濾器208b直接轉移到過濾器實例209a。包240c可以回避過濾器實例210b,因為過濾器實例210b已被配置成按數據路徑或控制路徑的“回避”模式進行操作。
過濾器實例可以由抽象接口203配置成按回避模式進行操作。當過濾器實例最初被啟動或在運行時,可以將其配置為回避模式。也就是說,曾經沒有被初始化進入回避模式的過濾器實例以后可以被設置成按回避模式進行操作。在初始化期間,通過指明啟動過程中那個數據路徑的NULL處理機,過濾驅動器指出它希望過濾器實例按對一個或多個數據路徑或控制路徑的回避模式來啟動。
在初始化之后和在運行時,過濾驅動器可能希望將過濾器實例設置為對一些數據路徑或一些控制路徑的回避模式。在那種情況下,過濾驅動器將要求抽象接口重新啟動過濾器實例。然后,抽象接口將暫停使用過濾器實例,并按照此文前面所展示的各種方法來重新啟動它。當過濾器實例被重新啟動時,通過為被回避的路徑提供NULL處理機,過濾驅動器可以指出過濾器實例將按對一些數據路徑或控制路徑的回避模式進行操作。
過濾器實例可以被配置成使與一些數據路徑或控制路徑有關的包回避過濾器實例,使與其他數據路徑或控制路徑有關的包由過濾器實例來接收。例如,過濾器實例可以被配置成回避狀況指示,但接收所有其他類型的包。可以執行這一點,以抑制介質斷開消息,應用程序對這些消息不感興趣。在另一個例子中,沿從數據鏈路層到傳輸層的數據路徑被轉移的數據包可以由過濾器實例來接收,而沿從傳輸層到數據鏈路層的數據路徑被轉移的數據包回避過濾器實例。
同樣,當前處于數據路徑或控制路徑的回避模式的過濾器實例可以在運行時被配置成接收該數據路徑或控制路徑的包。在這些情況下,過濾驅動器可以要求抽象接口203重新啟動過濾器實例。然后,抽象接口203將按照此文前面所展示的各種方法來暫停使用和重新啟動過濾器實例。當過濾器實例被重新啟動時,通過為被激活的數據路徑提供非NULL處理機,過濾驅動器可以指出過濾器實例將從數據路徑或控制路徑接收包。
外部事件可能會引起對過濾器實例進行配置,使過濾器實例按回避模式進行操作或接收包。例如,通過與防火墻有關的管理接口,用戶可以將過濾器實例配置成按一些數據路徑的回避模式進行操作。在過濾器實例過濾操作導致當前正在使用的應用程序中斷的情況下,可以如此執行。
圖4中的方法可以包括一個步驟轉移一個輸出包,該輸出包可能已由過濾器棧中所包括的一些(而不是所有)操作進行過濾(步驟404)。這可以包括執行兩個動作回避與過濾器實例有關的一項或多項過濾操作(動作402);以及,如果曾執行過濾操作,則發送一個可能不同于輸入包的輸出包(動作403)。通過轉移回避過濾操作的包,可以提高過濾過程的效率。
回避與過濾器實例有關的一項或多項過濾操作(動作402)可以包括回避過濾器實例210b中所包括的一項或多項過濾操作。當過濾器實例210b接收數據包240a時,控制模塊215可以分析數據包240a的特征。分析可以包括確定輸入包的數據流的方向。數據流的方向可以從數據鏈路驅動器到傳輸層協議,也可以從傳輸層協議到數據鏈路驅動器。分析也可以包括確定與輸入數據包有關的一個協議,例如,IP、TCP、“網絡分組交換”(“IPX”)、其他傳輸層協議或與“開放式系統互聯”(“OSI”)模型的各個層有關的其他協議。如果控制模塊215確定數據包240a與IPX有關,則可以回避過濾器操作216a和216c。但是,如果控制模塊215確定數據包240a與IP有關,則可以回避過濾器操作216b。
或者,過濾器實例210b可能被配置成使沿數據路徑或控制路徑的包完全回避過濾器實例210b。如圖2C所示,可以對過濾器實例210b進行配置,以便沿從傳輸層到數據鏈路層的數據路徑被轉移的包可以回避過濾器實例210b。如果包240c是數據包,它將會如從過濾器實例208b到過濾器實例209a的虛線箭頭所示的那樣回避過濾器實例210b。
也可能是這種情況雖然過濾器實例210b接收到一個包,但是,控制模塊215直接通過過濾器實例210b來傳送包,而不執行任何過濾操作。如果用這種方式來回避所有的過濾操作,則數據包240a和數據包240b可能實質上相類似。
如果曾執行過濾操作,則發送一個可能不同于輸入數據包的輸出數據包(動作403),這可以包括發送包括被修改過的數據的一個數據包。如果執行過濾器實例210b中所包括的任何過濾操作,則數據包240b可能不同于數據包240a。如果任何過濾操作曾將數據添加到數據包240a、從數據包240a中除去數據或修改數據包240a中所包括的數據,則可能會發生這種情況。但是,如果沒有執行過過濾操作,則數據包240a和數據包240b可能實質上相類似。
可以使用本發明的各種方法來過濾數據包,所采用的方式促進數據包有效地流過通信路徑。過濾器實例可以被插入過濾器棧或從過濾器棧中被除去,同時,有關的協議棧仍然能夠轉移數據。這節約了處理器和網絡資源,因為當過濾器棧的功能性變化時,協議棧不被重建。由于過濾器實例可以被多個協議使用,因此,減少了將在計算機設備中執行多余邏輯的可能性。此外,根據數據包和/或配置信息的特征來回避過濾操作,這減少了將執行無關的處理器操作的可能性。
在不脫離本發明的精神或必要特征的前提下,可以用其他特殊的形式來具體表現本發明。所描述的實施例在所有方面都將被認為只起說明性的作用,而不作限制。所以,本發明的范圍由所附的權利要求(而不是前述內容)指出。不脫離權利要求的等效物的含義和范圍的所有變化都將被包含在其范圍之內。
權利要求書受到美國專利特許證的保護,內容如下所述
權利要求
1.一種在計算機設備中將過濾器實例插入過濾器棧的方法,該方法不會中斷有關的協議棧的操作,以節約處理器和網絡資源,該計算機設備能通過通信路徑以通訊聯絡的方式被耦合到網絡,它包括與用于管理過濾器棧的抽象接口有關的一個或多個協議棧,過濾器棧包括一個或多個過濾器實例,可對正在經由通信路徑被轉移的數據包執行過濾操作,該方法的包括暫停過濾器棧操作的動作;在將過濾器實例插入過濾器棧的同時,至少一個有關的協議棧能夠繼續轉移數據的動作;以及,開始過濾器棧操作的動作。
2.如權利要求1中所述的方法,其特征在于其中,暫停過濾器棧操作包括以下內容暫停使用過濾器棧中所包括的一個或多個過濾器實例的動作。
3.如權利要求2中所述的方法,其特征在于其中,暫停使用過濾器棧中所包括的一個或多個過濾器實例包括以下內容一個或多個暫停例行程序接收指出應該暫停使用一個或多個過濾器實例的數據。
4.如權利要求1中所述的方法,其特征在于其中,暫停過濾器棧操作包括以下內容使被轉移的數據包重定向到虛擬例行程序,該虛擬例行程序將數據包返回到通信路徑,而不修改數據包中所包括的數據。
5.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容插入一個過濾器實例,該過濾器實例曾通過使用從抽象接口被接收的參數來加以配置。
6.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容過濾驅動器接收一個過濾器句柄,該過濾器句柄可以被用來促進將數據轉移到抽象接口。
7.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容過濾驅動器為過濾器實例分配資源的動作。
8.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容過濾驅動器為過濾器實例創建過濾器實例上下文的動作。
9.如權利要求8中所述的方法,其特征在于其中,過濾驅動器為過濾器實例創建過濾器實例上下文包括以下內容過濾驅動器將過濾器實例上下文發送到抽象接口的動作。
10.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容過濾驅動器在抽象接口登記數據的動作。
11.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容過濾驅動器將數據登記在系統注冊表中的動作。
12.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容插入過濾器實例,該過濾器實例曾通過使用從系統注冊表被接收的參數來加以配置。
13.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容將過濾器實例插在過濾器棧中的預定位置的動作。
14.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容插入一個過濾器實例,該過濾器實例能夠過濾在虛擬連接上被轉移的數據包。
15.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容插入一個過濾器實例,該過濾器實例包括一個入口點,以接收與計算機設備的能源管理有關的數據。
16.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容插入一個過濾器實例,該過濾器實例包括一個入口點,以接收與即插即用設備有關的數據。
17.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容插入一個過濾器實例,該過濾器實例包括可以通過管理接口來加以修改的屬性。
18.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容在過濾器棧上插入一個過濾器實例,該過濾器棧與多個傳輸層協議綁字。
19.如權利要求1中所述的方法,其特征在于其中,將過濾器實例插入過濾器棧包括以下內容過濾驅動器證實過濾器實例曾被插入過濾器棧的動作。
20.如權利要求19中所述的方法,其特征在于其中,過濾驅動器證實過濾器實例曾被插入過濾器棧包括以下內容過濾驅動器將插入狀況發送到抽象接口的動作。
21.如權利要求1中所述的方法,其特征在于其中,開始過濾器棧操作包括以下內容啟動過濾器棧中所包括的一個或多個過濾器實例的動作。
22.如權利要求21中所述的方法,其特征在于其中,啟動過濾器棧中所包括的一個或多個過濾器實例包括以下內容一個或多個啟動例行程序接收指出應該啟動一個或多個過濾器實例的數據。
23.如權利要求1中所述的方法,其特征在于還包括通知有關的協議棧將要暫停過濾器棧的操作。
24.如權利要求1中所述的方法,其特征在于還包括通知有關的協議棧過濾器棧現在包括被插入的過濾器實例。
25.如權利要求1中所述的方法,其特征在于還包括通知有關的協議棧將要開始操作過濾器棧。
26.一種在計算機設備中從過濾器棧中除去過濾器實例的方法,該方法不會中斷有關的協議棧的操作,以節約處理器和網絡資源,該計算機設備能通過通信路徑以通訊聯絡的方式被耦合到網絡,它包括與用于管理過濾器棧的抽象接口有關的一個或多個協議棧,過濾器棧包括一個或多個過濾器實例,該方法包括暫停過濾器棧操作的動作;在從過濾器棧中除去過濾器實例的同時,至少一個有關的協議棧能夠繼續轉移數據的動作;以及,開始操作過濾器棧的動作。
27.如權利要求26中所述的方法,其特征在于其中,暫停過濾器棧操作包括以下內容暫停使用過濾器棧中所包括的一個或多個過濾器實例的動作。
28.如權利要求27中所述的方法,其特征在于其中,暫停使用過濾器棧中所包括的一個或多個過濾器實例包括以下內容一個或多個暫停例行程序接收指出應該暫停使用一個或多個過濾器實例的數據。
29.如權利要求26中所述的方法,其特征在于其中,暫停過濾器棧操作包括以下內容使被轉移的數據包重定向到各個虛擬例行程序,這些虛擬例行程序將數據包返回到通信路徑。
30.如權利要求26中所述的方法,其特征在于其中,從過濾器棧中除去過濾器實例包括以下內容暫停使用過濾器實例的動作。
31.如權利要求26中所述的方法,其特征在于其中,從過濾器棧中除去過濾器實例包括以下內容過濾驅動器釋放與過濾器實例有關的資源的動作。
32.如權利要求26中所述的方法,其特征在于其中,開始過濾器棧操作包括以下內容啟動過濾器棧中所包括的一個或多個過濾器實例的動作。
33.權利要求32中所述的方法,其特征在于其中,啟動過濾器棧中所包括的一個或多個過濾器實例包括以下內容一個或多個啟動例行程序接收指出應該啟動一個或多個過濾器實例的數據。
34.如權利要求26中所述的方法,其特征在于還包括通知有關的協議棧將要暫停過濾器棧的操作。
35.如權利要求26中所述的方法,其特征在于還包括通知有關的協議棧過濾器實例已從過濾器棧中被除去。
36.如權利要求26中所述的方法,其特征在于還包括通知有關的協議棧將要開始過濾器棧操作。
37.一種在計算機設備中將過濾器實例插入過濾器棧的方法,該方法不會中斷有關的協議棧的操作,以節約處理器和網絡資源,該計算機設備可能通過通信路徑以通訊聯絡的方式被耦合到網絡,它包括與用于管理過濾器棧的抽象接口有關的一個或多個協議棧,可對正在經由通信路徑被轉移的數據包的各個部分執行過濾操作,該方法包括暫停過濾器棧操作的動作;一個步驟重新配置過濾器棧中所包括的過濾操作,所采用的方式促進在重新配置期間有效地沿通信路徑轉移數據。
38.一種在計算機設備中用于過濾與一個或多個協議有關的包的方法,以節約處理器和網絡資源,該計算機設備能通過一個或多個通信路徑以通訊聯絡的方式被耦合到網絡,它包括與抽象接口有關的一個或多個協議棧,該抽象接口管理可以對包執行過濾操作的一個或多個過濾器實例,該方法包括處理輸入包的動作;輸入包回避與過濾器實例有關的一項或多項過濾操作的動作;以及如果曾執行過過濾操作,則發送一個可能不同于輸入包的輸出包的動作。
39.如權利要求38中所述的方法,其特征在于其中,處理輸入包包括以下內容處理與數據鏈路層有關的輸入包的動作。
40.如權利要求38中所述的方法,其特征在于其中,處理有關的輸入包包括以下內容處理與數據鏈路層驅動器有關的輸入包的動作。
41.如權利要求38中所述的方法,其特征在于其中,處理輸入包包括以下內容處理與傳輸層協議有關的輸入包的動作。
42.如權利要求41中所述的方法,其特征在于其中,處理與傳輸層協議有關的輸入包包括以下內容處理與“傳輸控制協議”有關的輸入數據包的動作。
43.如權利要求41中所述的方法,其特征在于其中,處理與傳輸層協議有關的輸入包包括以下內容處理與“互聯網協議”有關的輸入數據包的動作。
44.如權利要求41中所述的方法,其特征在于其中,處理與傳輸層協議有關的輸入包包括以下內容處理來自傳輸層驅動器的輸入包的動作。
45.如權利要求38中所述的方法,其特征在于其中,處理輸入包包括以下內容處理沿從傳輸層到數據鏈路層的數據路徑被轉移的數據包的動作。
46.如權利要求38中所述的方法,其特征在于其中,處理輸入包包括以下內容處理沿從數據鏈路層到傳輸層的數據路徑被轉移的數據包的動作。
47.如權利要求38中所述的方法,其特征在于其中,處理輸入包包括以下內容處理控制包,該控制包包括請求信息并正在沿控制路徑被轉移。
48.如權利要求38中所述的方法,其特征在于其中,處理輸入包包括以下內容處理控制包,該控制包包括系統指示信息并正在沿控制路徑被轉移。
49.如權利要求38中所述的方法,其特征在于其中,輸入包回避與過濾器實例有關的一項或多項過濾操作包括以下內容所接收的輸入包回避與過濾器棧中所包括的過濾器實例有關的一項或多項內部過濾操作。
50.如權利要求38中所述的方法,其特征在于其中,輸入包回避與過濾器實例有關的一項或多項過濾操作包括以下內容所接收的輸入包根據與該輸入包有關的特征來回避與過濾器實例有關的一項或多項內部過濾操作。
51.如權利要求38中所述的方法,其特征在于其中,輸入包回避與過濾器實例有關的一項或多項過濾操作包括以下內容輸入包完全回避過濾器實例的動作。
52.如權利要求51中所述的方法,其特征在于其中,輸入包完全回避過濾器實例包括以下內容輸入包完全回避過濾器實例,因為曾將過濾器實例配置成按通信路徑的回避模式進行操作,輸入包正在沿該通信路徑被轉移。
53.如權利要求50中所述的方法,其特征在于其中,輸入包根據關于輸入包的特征來回避與過濾器實例有關的一項或多項過濾操作包括以下內容當輸入包與第一個協議有關時,回避第一套過濾操作;當輸入包與第二個協議有關時,回避第二套過濾操作。
54.如權利要求53中所述的方法,其特征在于其中,第一套過濾操作和第二套過濾操作不同。
55.如權利要求38中所述的方法,其特征在于其中,如果曾對輸入包執行過濾操作,則發送一個可能不同于輸入包的輸出包,這包括以下內容如果過濾操作修改過輸入包,則發送一個可能不同于輸入包的輸出包。
56.一種在計算機設備中用于過濾與一個或多個協議有關的包的方法,以節約處理器和網絡資源,該計算機設備能通過一個或多個通信路徑以通訊聯絡的方式被耦合到網絡,它包括與用于管理過濾器棧的抽象接口有關的一個或多個協議棧,該方法包括接收與協議有關的一個輸入包的動作;一個步驟轉移一個輸出包,該輸出包已由過濾器棧中所包括的一些而不是所有過濾操作進行過濾,以便提高過濾過程的效率。
57.一種在計算機設備中用于過濾與一個或多個協議有關的包的方法,以節約處理器和網絡資源,該計算機設備能通過一個或多個通信路徑以通訊聯絡的方式被耦合到網絡,該計算機設備包括與一個或多個過濾器實例有關的一個或多個協議棧,這些過濾器實例可以對包執行過濾操作,該方法包括過濾器實例接收一個輸入包的動作;當通過從數據鏈路層到傳輸層的通信路徑來轉移輸入包時,回避第一套過濾操作;當通過從傳輸層到數據鏈路層的通信路徑來轉移輸入包時,回避第二套過濾操作的動作;以及如果曾執行過過濾操作,則發送一個可能不同于輸入包的輸出包的動作。
58.如權利要求57中所述的方法,其特征在于其中,第一套過濾操作和第二套過濾操作不同。
59.如權利要求57中所述的方法,其特征在于其中,通信路徑是數據路徑。
60.如權利要求57中所述的方法,其特征在于其中,通信路徑是控制路徑。
61.一種在計算機設備中用于過濾與一個或多個協議有關的包的方法,以節約處理器和網絡資源,該計算機設備能通過一個或多個通信路徑以通訊聯絡的方式被耦合到網絡,該計算機設備包括與一個或多個過濾器實例有關的一個或多個協議棧,這些過濾器實例可以對包執行過濾操作,該方法包括處理當前正通過通信路徑被轉移的一個包的動作;包完全回避通信路徑中的第一個過濾器實例的動作,因為曾將第一個過濾器實例配置成按通信路徑的回避模式進行操作;以及包正由通信路徑中的第二個過濾器實例接收的動作,曾將該通信路徑配置成接收正通過通信路徑被轉移的包。
62.如權利要求61中所述的方法,其特征在于其中,包完全回避通信路徑中的第一個過濾器實例,因為曾將第一個過濾器實例配置成按通信路徑的回避模式進行操作,這包括以下內容包完全回避通信路徑中的第一個過濾器實例,因為抽象接口曾將第一個過濾器實例配置成按通信路徑的回避模式進行操作。
63.如權利要求62中所述的方法,其特征在于還包括抽象接口對過濾器實例進行配置,以恢復接收包。
64.如權利要求61中所述的方法,其特征在于,包完全回避通信路徑中的第一個過濾器實例,因為曾將第一個過濾器實例配置成按通信路徑的回避模式進行操作,這包括以下內容輸入數據包完全回避數據路徑中的第一個過濾器實例,因為曾將第一個過濾器實例配置成按數據路徑的回避模式進行操作。
65.如權利要求61中所述的方法,其特征在于,包完全回避通信路徑中的第一個過濾器實例,因為曾將第一個過濾器實例配置成按通信路徑的回避模式進行操作,這包括以下內容輸入控制包完全回避控制路徑中的第一個過濾器實例,因為曾將第一個過濾器示例配置成按控制路徑的回避模式進行操作。
66.一種計算機程序產品,用于在計算機設備中執行將過濾器實例插入過濾器棧的一種方法,該方法不會中斷有關的協議棧的操作,以節約處理器和網絡資源,該計算機設備能通過通信路徑以通訊聯絡的方式被耦合到網絡,它包括與用于管理過濾器棧的抽象接口有關的一個或多個協議棧,可對正在經由通信路徑被轉移的數據包的各個部分執行過濾操作,該計算機程序產品包括攜帶計算機可執行指令的一個計算機可讀介質,當這些計算機可執行指令在計算機設備處被執行時,它們使計算機設備執行該方法,包括暫停過濾器棧操作的動作;在將過濾器實例插入過濾器棧的同時,至少一個有關的協議棧能夠繼續轉移數據的動作;以及開始過濾器棧操作的動作。
67.一種計算機程序產品,用于在計算機設備中執行將過濾器實例插入過濾器棧的一種方法,該方法不會中斷有關的協議棧的操作,以節約處理器和網絡資源,該計算機設備能通過通信路徑以通訊聯絡的方式被耦合到網絡,它包括與用于管理過濾器棧的抽象接口有關的一個或多個協議棧,該過濾器棧包括一個或多個過濾器實例,可對正在經由通信路徑被轉移的數據包的各個部分執行過濾操作,該計算機程序產品包括攜帶計算機可執行指令的一個計算機可讀介質,當這些計算機可執行指令在計算機設備處被執行時,它們使計算機設備執行該方法,包括暫停過濾器棧操作的動作;在從過濾器棧中除去過濾器實例的同時,至少一個有關的協議棧能夠繼續轉移數據的動作;以及開始過濾器棧操作的動作。
68.一種計算機程序產品,用于在計算機設備中執行一種用于過濾與一個或多個協議有關的包的方法,以節約處理器和網絡資源,該計算機設備能通過一個或多個通信路徑以通訊聯絡的方式被耦合到網絡,它包括與管理過濾器棧的抽象接口有關的一個或多個協議棧,該過濾器棧包括可以對包的各個部分執行過濾操作的一個或多個過濾器實例,該計算機程序產品的特征在于包括攜帶計算機可執行指令的一個計算機可讀介質,當這些計算機可執行指令在計算機設備處被執行時,它們使計算機設備執行該方法,包括處理一個輸入包的動作;輸入包回避與一個過濾器實例有關的一項或多項過濾操作的動作;以及如果曾對輸入包執行過濾操作,則發送一個可能不同于輸入包的輸出包的動作。
全文摘要
本發明提出了一種網絡過濾驅動器的構造和運行環境。其中過濾數據包所采用的方式促進數據有效地流過通信路徑。過濾器棧包括一個或多個過濾器實例,這些過濾器實例可以過濾通過過濾器棧的數據包。該過濾器棧與一個或多個協議棧有關,這些協議棧在計算機設備與網絡之間的通信路徑中發揮作用。當過濾實例被插入過濾器棧或從過濾器棧中被除去時,有關的協議棧仍然能夠轉移數據。抽象接口通過將數據傳送到創建過濾器實例的過濾驅動器,來促進插入和除去過濾器實例。過濾驅動器可以創建多個過濾器實例。可以根據數據流、控制流的方向和包的特征來回避與過濾器實例有關的過濾操作。
文檔編號H04L29/08GK1424663SQ0215616
公開日2003年6月18日 申請日期2002年12月11日 優先權日2001年12月11日
發明者A·默奇, A·達巴格, A·迪布, F·F·劉 申請人:微軟公司