專利名稱:用于監(jiān)控網絡流量的方法和設備的制作方法
技術領域:
本發(fā)明涉及計算機網絡,尤其涉及在數(shù)據(jù)網絡中所傳遞的分組的實時說明有關,包括按照協(xié)議和應用程序進行的分類。
對有關申請的交叉引用本申請對美國臨時專利申請序列號60/141,903題為“用于監(jiān)控網絡流量的方法和設備”中的利益提出權利要求,所要求的權利由發(fā)明人Dietz等人所有,他在1999年6月30日提交了該申請并轉讓給APPTITUDE有限公司,該公司是本發(fā)明的受讓人。
版權公告本專利文檔的部分內容中包含關于版權保護的材料。版權所有者不反對由本專利文檔或專利公開內容的任何人復制副本,因為它已經出現(xiàn)在專利與商標事務處的文檔和記錄中,但另外保留所有的版權。
背景技術:
很久以來就一直需要有一個網絡活動狀況監(jiān)控器。但在最近Internet和其它internets大量流行的情況下這種需要變得更加迫切,“internet”是任意一個對大量網絡進行互聯(lián)而形成的更大的單一網絡。隨著用作客戶機端集合—這些客戶機端從網絡上的一個或多個服務器獲取服務—的網絡的增長,能夠對這些服務的使用進行監(jiān)控并對它們做出相應的評定就顯得愈加重要。例如,像哪些服務(即應用程序)正在被使用、誰在使用它們、它們多長時間被訪問一次以及每次訪問多長時間這樣的客觀信息在這些網絡的維護和后繼操作中非常有用。尤其重要的是被選中的用戶能夠遠程訪問網絡以便實時產生網絡使用報告。同樣地,也需要一個實時網絡監(jiān)控器能夠提供警報通知選中的用戶網絡或站點上可能出現(xiàn)了問題。
現(xiàn)有技術中的一種監(jiān)控方法使用日志文件。在這種方法中,可以通過查看日志文件對選中的網絡活動進行回顧分析,日志文件由網絡服務器和網關共同維持。日志文件監(jiān)控器必須訪問這個數(shù)據(jù)并分析(“我的”)它的內容以確定關于服務器或網關的統(tǒng)計信息。但這種方法存在幾個問題。首先,日志文件信息并未提供實時使用圖;第二,日志文件庫不支持全部信息。這個方法依賴于由大量網絡設備和服務器所維持的日志,這就需要對信息進行提煉和對比。并且有些時候信息不能簡單地被任意網關或服務器直接用來產生日志文件條目。
例如,關于NetMeeting(Microsoft公司,雷蒙德,華盛頓州)會話的信息就是一個這樣的情況,在NetMeeting會話中兩臺計算機在網絡上直接連接,而服務器和網關根本看不到在它們之間所傳送的數(shù)據(jù)。
創(chuàng)建日志文件的另一個缺點是這個方法要求使能網絡元素的數(shù)據(jù)記錄特性,給設備增加了實實在在的負載,這導致網絡性能隨之下降。另外,日志文件增長得很快,沒有能夠存儲它們的標準存儲裝置,并且它們需要大量的維護開銷。
通過Netflow(Cisco系統(tǒng)有限公司,圣何塞,加利福尼亞州)、RMON2以及其它可用于實際監(jiān)控網絡的網絡監(jiān)控器,它們降低了應用內容的可見度,而且一般在提供網絡層信息上也有限制。
模式匹配解析器技術已經是眾所周知,在該技術中對分組進行解析并且應用了模式過濾器,但這些在進入?yún)f(xié)議棧檢查分組的進入深度上也受限制。
一些現(xiàn)有技術中的分組監(jiān)控器把分組分類成連接流。術語“連接流”一般用于描述單個連接所涉及到的所有分組。另一方面,對話流是作為一個活動—例如,因為客戶機的請求而在服務器上運行一個應用程序—的結果在任意方向上所交換的分組序列。希望能夠對對話流而不只是連接流進行識別和分類。這樣做的原因是一些對話流涉及不止一個連接流,有些甚至涉及到客戶機和服務器之間的多個分組交換。這在使用像RPC、DCOMP和SAP這樣的客戶機/服務器協(xié)議時尤其正確,這些協(xié)議使得能夠在對服務有任何使用之前對其進行設置或定義。
這種情況的一個實例是SAP(服務廣告協(xié)議),一個用來識別服務和隸屬于網絡的服務器地址的NetWare(Novell系統(tǒng),Provo,猶他州)協(xié)議。在初始交換中,客戶機可以發(fā)送一個SAP請求給服務器以要求打印服務。服務器隨后將發(fā)送一個SAP應答,該應答把一特定地址—例如,SAP#5—標識為該服務器上的打印服務。這樣的響應可以用來更新路由器中的表格,例如通常所說的服務器信息表。已經無意中看到過這個響應或者訪問該表格(通過有服務信息表格的路由器)的客戶機便會知道特定服務器的SAP#5是一個打印服務。因此,要想在服務器上打印數(shù)據(jù),這樣的客戶機無需產生打印服務請求,只要簡單地把數(shù)據(jù)發(fā)送出去以在指定的SAP#5上進行打印。像前一個交換那樣,傳輸要打印的數(shù)據(jù)也涉及客戶機和服務器之間的交換,但要求第二個連接利并因此獨立于初始交換。為了降低對話交換斷開的可能性,希望網絡分組監(jiān)控器能夠把第一和第二個交換“虛擬連接”—也就是鏈接—在一起。如果是同一客戶機,兩個分組交換將被正確地標識為同一對話流的一部分。
其它可能產生斷開的流的協(xié)議包括RPC(遠程過程調用);DCOM(分布式組件對象模型),以前稱作網絡OLE(Microsoft公司,雷蒙德,華盛頓州);和CORBA(公共對象請求代理結構)。RPC是來自Sun微系統(tǒng)(Paloalto,加利福尼亞州)的一個編程接口,它允許一個程序使用遠程機器中的另一個程序的服務。DCOM是Microsoft與CORBA相對應的協(xié)議,它定義了允許通過網絡遠程運行那些對象—自主式軟件模塊對象—的遠程過程調用。CORBA是來自OMG(對象管理組織)的標準,用于在分布式對象之間進行通信,它提供了一種方式能夠執(zhí)行用不同語言所寫運行在不同平臺上的程序(對象),而不管它們是否存在于網絡中。
因此,需要一個能夠在流量很大的網絡上連續(xù)不斷地分析所有用戶會話的網絡監(jiān)控器。這樣的監(jiān)控器應該能夠對通過網絡上任意點的所有信息(也就是通過網絡中任意位置的所有分組和分組流)進行非插入、遠程探測、特性表示、分析和捕捉。網絡監(jiān)控器應該不僅能探測和分析所有的分組,而且能夠針對這些分組中的每一個確定協(xié)議(例如,http、ftp、H.323、VPN等)、協(xié)議中的應用/用途(例如,聲音、視頻、數(shù)據(jù)、實時數(shù)據(jù)等)以及每個應用或應用環(huán)境(例如,所選的選項、所投遞的服務、持續(xù)時間、日時、所請求的數(shù)據(jù)等)中終端用戶的使用模式。而且,網絡監(jiān)控器不應該依賴于像日志文件這樣的服務器駐留信息。相反,它應該給像網絡管理員或Internet服務提供商(ISP)這樣的用戶提供裝置以對網絡活動進行客觀的測量和分析;自定義要收集并分析的數(shù)據(jù)的類型;承擔實時分析;并接收網絡問題的及時通知。
再次考慮前面的SAP實例,因為本發(fā)明的一個特性是正確標識第二個交換為與服務器的打印服務相關聯(lián),甚至在客戶機不相同時也能夠識別這樣的交換。區(qū)別本發(fā)明和現(xiàn)有技術中的網絡監(jiān)控器的特性是本發(fā)明能夠識別出屬于同一個對話流的已斷開的流。
很多發(fā)明人已經認識到了監(jiān)控網絡通信中的數(shù)據(jù)值。Chiu等人在題為“用于網絡會話的實時監(jiān)控和局域網的設備和方法”的美國專利5,101,402(“402專利”)中描述了一個用于在計算機網絡的會話層上收集信息的方法。402專利為幾種特定類型的分組指定了提取信息從而識別分組會話的固定位置。例如,如果出現(xiàn)了一個DECnet分組,402專利就查看分組中的六個字段(在六個位置)以識別該分組的會話。另一方面,如果出現(xiàn)了一個IP分組,就為IP分組指定包含六個不同位置的一個不同集合。隨著協(xié)議的增殖,明確指定所有可能的位置并確定會話變得越來越難。同樣地,添加一個新協(xié)議或應用也很困難。在本發(fā)明中,對特定類型的分組從該分組中的信息適應地確定要檢驗的位置以及要從任意分組中提取信息。對于尋找什么和在哪里尋找它們以形成標識簽名沒有固定的定義。例如,本發(fā)明的監(jiān)控器實現(xiàn)適合于對來自老一些的以太網類型2(或版本2)DIX(DIGITAL-Intel-Xerox)分組的IEEE 802.3分組進行不同的處理。
402專利系統(tǒng)能夠一直識別到會話層。在本發(fā)明中,對于任意特定協(xié)議要檢驗的層數(shù)也有所變化。此外,本發(fā)明能夠一直檢驗到足夠唯一標識到一個必需層的任何層,甚至所有通往應用層(在OSI模型中)的路線。
還知道其它一些現(xiàn)有技術中的系統(tǒng)。Phael在題為“網絡監(jiān)控設備和系統(tǒng)”的美國專利5,315,580中描述了一個只處理隨機選中的分組的網絡活動監(jiān)控器。Nkamura在題為“網絡監(jiān)控系統(tǒng)”的美國專利4,891,639中講授了一個網絡監(jiān)控系統(tǒng)。Ross等人在題為“用于網絡分析的方法和設備”的美國專利5,247,517中講授了用于分析和監(jiān)控網絡活動的方法和設備。McCreery等人在題為“分析Internet活動的設備和方法”的美國專利5,787,253中描述了一個Internet活動監(jiān)控器,該監(jiān)控器在Internet協(xié)議層上對分組數(shù)據(jù)進行解碼。McCreery方法對IP分組進行解碼。它對每個分組進行解碼操作,并因此耗費了對已識別流和未識別流進行處理的總開銷。在本發(fā)明的監(jiān)控器實現(xiàn)中,為每個流構造一個簽名,這樣就很容易識別該流的將來分組。當該流中的一個新的分組到達時,識別方法能夠從它最后離開的地方和構造的新簽名開始去識別流中的新分組。
網絡分析員應該能夠分析多種不同的協(xié)議。在底層,有很多用在數(shù)字通信中的標準,包括以太網、HDLC、ISDN、Lap B、ATM、X.25、幀中繼、數(shù)字數(shù)據(jù)服務、FDDI(光纖分布式數(shù)據(jù)接口)、T1以及其它標準。這些標準中有很多都采用了不同的分組和/或幀格式。例如,數(shù)據(jù)在ATM和幀中繼系統(tǒng)中是以53個八位位組(也就是字節(jié))的固定長度分組(稱為“單元”)進行傳輸?shù)?。需要幾個這樣的單元來組成可能包含在其它一些協(xié)議為相同的有效負載而使用的分組的信息—例如在使用幀中繼標準或以太網協(xié)議的對話流中。
為了使網絡監(jiān)控器能夠分析不同的分組或幀格式,監(jiān)控器需要能夠在每個分組上執(zhí)行協(xié)議特定操作,每個分組都帶有遵守不同協(xié)議的信息并與不同的應用有關。例如,監(jiān)控器需要能夠把不同格式的分組解析成字段以便理解封裝在不同字段中的數(shù)據(jù)。隨著可能的分組格式或類型數(shù)量的增加,需要用來解析這些不同分組格式的邏輯數(shù)量也隨之增加。
還有一些現(xiàn)有技術中的網絡監(jiān)控器對單個分組進行解析并在不同的字段上尋找信息以便用它們構造一個用于標識分組的簽名。Chiu等人在題為“用于網絡會話的實時監(jiān)控和局域網的設備和方法”的美國專利5,101,402中描述了一個用于在計算機網絡的會話層上收集信息的方法。在這個專利中,為特定類型的分組指定了固定的位置。例如,如果出現(xiàn)了一個DECnet分組,Chiu系統(tǒng)就查看分組中的六個特定字段(在六個位置)以便識別該分組的會話。另一方面,如果出現(xiàn)了一個IP分組,就檢驗一個包含六個位置的不同集合。該系統(tǒng)只從最低層查看到協(xié)議層。隨著協(xié)議的增殖,明確指定所有可能的位置以確定會話變得越來越困難。同樣的,添加一個新協(xié)議或應用也很困難。
希望對特定類型的分組能夠適應地確定位置以及要從任意分組中提取的信息。用這種方式,可以用協(xié)議-有關和分組-內容-有關定義來定義一個最佳簽名,分組-內容-有關定義規(guī)定了找什么和到哪里去找它以形成簽名。
這樣還需要網絡監(jiān)控器能夠適合不同的協(xié)議和不同的應用程序或為它們進行特制。這樣還需要網絡監(jiān)控器能夠容納新協(xié)議和新的應用程序。還需要用于指定新協(xié)議和新級別,包括新應用,的裝置。還需要一種機制來描述協(xié)議特定操作,例如包括什么信息與分組有關、什么分組需要被解碼以及指定解析操作和提取操作。還需要一種機制來描述在處于流的一種特定識別狀態(tài)的分組上執(zhí)行的狀態(tài)操作以便促進識別該流。
收集通過網絡中一點的分組上的統(tǒng)計信息比簡單地對每個分組進行計數(shù)要有利。通過在與對話流有關的流-入口中保持統(tǒng)計測量,本發(fā)明的實施方案能夠實時收集特定的度量,否則將做不到這一點。例如,希望為對話中的每個交換保持與基于整個流的雙向對話有關的度量。通過保持流的狀態(tài),本發(fā)明的實施方案還能夠確定與流的狀態(tài)有關的特定度量。
現(xiàn)有技術中使用統(tǒng)計度量的多數(shù)流量監(jiān)控器只收集終點和會話終點的相關統(tǒng)計信息。這種通用度量的實例包括分組計數(shù)、字節(jié)計數(shù)、會話連接時間、會話超時、會話和傳輸響應以及其它。所有這些都是對可以直接與單個分組中的事件有關的事件進行處理。這些現(xiàn)有技術中的系統(tǒng)不能收集與網絡中流的完整分組序列或相同流的幾個已斷開的序列有關的性能度量。
應用數(shù)據(jù)分組上基于時間的度量是很重要的。如果能夠為后來的分析存儲并轉發(fā)所有的時間戳和相關數(shù)據(jù),就可以確定這樣的度量。但是,在面對每秒鐘有數(shù)千或數(shù)百萬個對話甚至更快的網絡時,存儲所有這些數(shù)據(jù),即使是壓縮過的數(shù)據(jù),也將占用過多的處理時間、存儲器以及管理器下載時間,因而是不可行的。
這樣就需要從那些從流中的分組積累起來的統(tǒng)計測量中保持并匯報基于時間的度量。
網絡數(shù)據(jù)被適當?shù)啬M成對象總體而不是樣本。這樣,所有數(shù)據(jù)都需要進行處理。因為應用協(xié)議的本性,只對一些分組進行采樣無法給出關于流的好的測量。只要漏掉了一個重要分組,例如數(shù)據(jù)將要在其上進行傳輸或者應用程序將要在其上運行的指定的一個附加端口,就會導致有效數(shù)據(jù)的丟失。
這樣還需要從那些從流中的每個分組積累起來的統(tǒng)計測量中保持并匯報基于時間的度量。
還需要確定與事件序列有關的度量。一個好的例子是相對振動。測量從一個方向上一個分組的末端到達同一方向上帶有相同簽名的另一個分組的時間就收集了與正常振動有關的數(shù)據(jù)。這種類型的振動度量對于在分組網絡中測量廣泛的信號質量是很有用的。然而,它對正在一個分組集群中傳輸?shù)挠行ж撦d或數(shù)據(jù)項來說卻不夠明確。
由于分組進入系統(tǒng)的高速度,本發(fā)明的實時方案還包括一個高速緩存器。希望能夠使高速緩存器系統(tǒng)中的命中率達到最大。
現(xiàn)有技術中典型的高速緩存器系統(tǒng)用來加速進出微處理器系統(tǒng)的存儲器訪問。在現(xiàn)有技術中這樣的系統(tǒng)有幾種機制可以用來預測查找,這樣就可以使命中率達到最大。例如,現(xiàn)有技術中的高速緩存器系統(tǒng)可以使用前視機制來預測指令高速緩存器查找和數(shù)據(jù)高速緩存器查找。這樣的前視技術無法用于分組監(jiān)控應用程序的高速緩存器子系統(tǒng)。當一個新的分組進入監(jiān)控器時,下一個高速緩存器訪問,例如來自查找引擎,可能是與上一個高速緩存器查找完全不同的對話流的,這樣就無法提前知道下一個分組屬于什么流。
這樣在本領域中就需要一種適合用在分組監(jiān)控器中的高速緩存器子系統(tǒng)。希望這樣的高速緩存器系統(tǒng)能有的一種屬性是最近最少使用(LRU)替換策略,該策略在需要高速緩存器替換的時候替換LRU流-入口。替換最近最少使用的流-入口是優(yōu)選的,因為跟在最近的分組后面的分組很可能和它屬于同一個流。這樣,新分組的簽名很可能匹配最近使用的流記錄。反之,與最近最少使用的流-入口相關的分組最不可能馬上到達。
經常使用散列來加快查找。散列把記錄隨機散布在數(shù)據(jù)庫中。這種情況下,就希望能有一個聯(lián)合高速緩存器。
這樣就需要聯(lián)合高速緩存器子系統(tǒng)也包括LRU替換策略。
希望分組監(jiān)控器能夠維持流的狀態(tài)以執(zhí)行必要的任意狀態(tài)處理從而促進確定與流相關的應用程序的過程。這樣就需要一個狀態(tài)處理器來分析新的和現(xiàn)有的流以便按照應用對它們進行分類。
狀態(tài)處理器可能需要的一種通用操作是在分組內容中查找一組已知字符串中的一個的存在情況。這樣的識別法對于促進識別對話流的應用內容的方法非常有用。例如,可能希望查找與http協(xié)議相關的分組的統(tǒng)一資源定位符(URL),或者需要查找標識協(xié)議或協(xié)議特征的特定字符串,例如字符串“port”、“get”、“post”等。這些字符串中的任意一個都可能在分組中,并且哪個字符串存在于分組中以及存在于分組中的什么地方通常是未知的。
在多數(shù)通用處理系統(tǒng)中,實現(xiàn)的指令集基本上是通用的。所有處理系統(tǒng)都有一個有關對指令和程序計數(shù)器的分析和操作的典型指令集。這些指令包括跳轉、調用和返回。另外,這些相同的處理系統(tǒng)包含合適的指令來分析和操作寄存器和存儲器區(qū)域。這些指令包括加、減、移動、比較和邏輯操作。
雖然狀態(tài)處理器能夠包括這樣一個基本的標準指令集,但用這樣的標準指令集實現(xiàn)在目標數(shù)據(jù)流中查找一個或多個已知的字符串可能會占用時間過長以致無法適應分組到達的高速度。因此希望有一個能夠執(zhí)行一些特定的查找功能的處理器,需要用它來對網絡上分組中的數(shù)據(jù)以及分組中數(shù)據(jù)的內容極快地進行計算。
尤其需要一個查找設備,它可以是狀態(tài)處理器的一部分并能夠在目標數(shù)據(jù)流中快速查找指定的引用字符串。此外,需要有一個可編程處理器,它包含有調用查找設備執(zhí)行這樣的查找的指令。
在網絡監(jiān)控器中使用這樣的處理器就使得監(jiān)控器能夠度量并滿足任意的網絡速度需求。
發(fā)明內容
本發(fā)明在它的幾個不同的實施方案中提供了一個網絡監(jiān)控器,它能夠實現(xiàn)一個或多個下列目標和優(yōu)勢●識別在客戶機和服務器之間進行交換的所有分組并把它們歸類成各自的客戶機/服務器應用。
●在所有協(xié)議層上識別并歸類在任一方向上通過網絡中一點的對話流。
●根據(jù)網絡上交換的單個分組確定客戶機和服務器之間的連接和流進展。
●用來根據(jù)需要網絡資源的客戶機/服務器應用的當前混合幫助調節(jié)網絡性能。
●保持與使用網絡資源的客戶機/服務器應用的混合有關的統(tǒng)計信息。
●報告由客戶機/服務器網絡對話流的特定應用所用的特殊分組序列的出現(xiàn)。
本發(fā)明實施方案的其它方面●適當分析在客戶機和服務器之間交換的每個分組并保持與這些對話流中每一個的當前狀態(tài)有關的信息。
●提供一個靈活的處理系統(tǒng),當新應用進入客戶機/服務器市場時可以對它進行修改和調整。
●保持與客戶機/服務器網絡中的對話流有關的統(tǒng)計信息按照單個應用進行分類。
●報告一特定標識符,它可被其它面向網絡的設備用來和特定客戶機/服務器網絡對話流的特定應用一起識別分組串。
本發(fā)明的實施方案大體上克服了現(xiàn)有技術中的問題和缺點。
像這里所描述的那樣,一種實施方案分析了在任意方向上通過網絡中任意點的每個分組,以便能夠得到用來在客戶機和服務器之間通信的實際應用。注意有幾個同步且重疊的應用程序通過獨立且異步的網絡執(zhí)行。
本發(fā)明的監(jiān)控器實施方案成功地對每個在網絡上看到的單個分組進行了歸類。對分組內容進行解析并把選中的部分裝配成一個簽名(也稱為密鑰),它隨后被用于識別同一對話流的更多分組,例如進一步分析該流并最終識別出應用程序。這樣該密鑰就是選中部分的一個函數(shù),并且在優(yōu)選實施方案中,該函數(shù)是對選中部分的串聯(lián)。優(yōu)選實施方案形成并記住任意對話流的狀態(tài),這個狀態(tài)由網絡上的單個分組和整個對話流之間的關系來決定。通過以這種方式記住流的狀態(tài),實施方案就可以確定對話流的環(huán)境,包括它所相關的應用程序以及像時間、對話流長度、數(shù)據(jù)傳輸速率這樣的參數(shù)。
監(jiān)控器很靈活,能夠適應為客戶機/服務器網絡所開發(fā)的將來應用程序。可以通過編譯用高級協(xié)議描述語言所寫的文件來引入新的協(xié)議和協(xié)議組合。
本發(fā)明的監(jiān)控器實施方案優(yōu)先用特定應用集成電路(ASIC)或場可編程門陣列(FPGA)來實現(xiàn)。在一種實施方案中,監(jiān)控器包括解析器子系統(tǒng),它從分組形成簽名。此外監(jiān)控器還包括分析器子系統(tǒng),它從解析器子系統(tǒng)接收簽名。
像介質訪問控制(MAC)或分割重組模塊這樣的分組攔截設備用來向監(jiān)控器的解析器子系統(tǒng)提供分組。
在硬件實現(xiàn)中,解析子系統(tǒng)包括兩個子部分,模式分析與識別引擎(PRE)和提取引擎(限選器slicer)。PRE根據(jù)模式數(shù)據(jù)庫解釋每個分組,尤其解釋每個分組中的單個字段。
可以存在于不同層上的不同協(xié)議可被看作是由結點鏈接而成的一個或多個樹上的結點。分組類型是樹的根。每個協(xié)議是一個父親結點或者終端結點。父親結點把協(xié)議鏈接到可以在更高層的其它協(xié)議(子協(xié)議)上。例如,以太網分組(根結點)可以是以太類型的分組—也稱作以太網類型/版本2和DIX(DIGITAL-Intel-Xerox分組)—或是IEEE 802.3分組。IEEE 802.3類型分組繼續(xù)下去,它的一個孩子結點可以是IP協(xié)議,IP協(xié)議的一個孩子結點可以是TCP協(xié)議。
模式數(shù)據(jù)庫包括對分組的不同報頭和它們的內容,以及這些怎樣與樹中的不同結點發(fā)生關系的描述。PRE遍歷該樹直到它能到達的地方。如果一個結點不包括到更深層的鏈接,就宣告了模式的完全匹配。注意協(xié)議可以是幾個模式的孩子。如果為每個可能的父親/孩子樹產生一個唯一的結點,模式數(shù)據(jù)庫將會變得非常龐大。替代方法是在多個父親之間共享孩子結點,這樣能夠使模式數(shù)據(jù)庫變得緊湊一些。
最后當只要求協(xié)議識別時PRE可以被用在它自己上面。
對識別出的每個協(xié)議,限選器從分組中提取重要的分組元素。這些形成分組的簽名(也就是密鑰)。限選器還為快速識別流優(yōu)先產生散列,該流可能擁有來自已知流的數(shù)據(jù)庫的這個簽名。
分組的流簽名、散列和至少一些有效負載被傳遞給分析器子系統(tǒng)。在硬件實施方案中,分析器子系統(tǒng)包括統(tǒng)一流鍵緩沖區(qū)(UFKB)、查找/更新引擎(LUE)、狀態(tài)處理器(SP)、流插入與刪除引擎(FIDE)、存儲器、和高速緩存器。UFKB用于接收來自解析器子系統(tǒng)的部分分組并存儲方法中的簽名。LUE在流記錄數(shù)據(jù)庫中查找以前遇到過的對話流以確定簽名是否來自一個現(xiàn)有的流。SP用于執(zhí)行狀態(tài)處理。FIDE用于往流數(shù)據(jù)庫中插入一個新的流。存儲器用于存儲流數(shù)據(jù)庫。高速緩存器用于加速對包含流數(shù)據(jù)庫的存儲器的訪問。LUE、SP和FIDE都連接到UFKB和高速緩存器上。
這樣統(tǒng)一流鍵緩沖區(qū)就包含了分組的流簽名,散列和至少一些有效負載用于分析器子系統(tǒng)中的分析。盡管分組簽名存在于統(tǒng)一流鍵緩沖區(qū)中,仍然可以執(zhí)行許多操作以進一步闡明客戶機/服務器對話流所涉及到的分組的應用程序內容的同一性。在分析器子系統(tǒng)的特定硬件實施方案中可以并行處理多個流,并且來自正在被并行分析的所有分組的多個流簽名也可被保存在UFKB中。
來自解析器的分組的分組分析方法的第一步是在已知分組流簽名的數(shù)據(jù)庫中查找實例。查找/更新引擎(LUE)首先用散列,然后用流簽名,來實現(xiàn)這個任務。查找在高速緩存器中進行,并且如果高速緩存器中沒有帶有匹配簽名的流,查找引擎就試圖從存儲器中的流數(shù)據(jù)庫獲取流。以前遇到過的流的流-入口最好包括狀態(tài)信息,狀態(tài)信息被用在狀態(tài)處理器中以執(zhí)行為狀態(tài)而定義的任意操作并確定下一個狀態(tài)。一個典型的狀態(tài)操作是在存儲在UFKB中的分組的有效負載中查找一個或多個已知的引用字符串。
一旦LUE完成了查找處理,無論它找到了相應的流或是發(fā)現(xiàn)這是一個新的流,都要在統(tǒng)一流鍵緩沖區(qū)結構中為這個分組流簽名設置一個標志聲明。對現(xiàn)有的流,由LUE的計算器部件對流-入口進行更新,它給流-入口數(shù)據(jù)庫中的計數(shù)器增加一個值,流-入口數(shù)據(jù)庫用來存儲流的一個或多個統(tǒng)計測量。計數(shù)器用于確定流上的網絡使用度量。
在完成對分組流簽名的查找后,并且當前流簽名的內容在數(shù)據(jù)庫中時,狀態(tài)處理器可以開始分析分組有效負載以進一步闡明這個分組的應用程序組件的同一性。狀態(tài)處理器的提取操作以及由它執(zhí)行的功能根據(jù)對話流(flow)的流(stream)中的當前分組序列而有所變化。狀態(tài)處理器從與同一個流簽名一起被看到的前一分組移動到存儲的下一個邏輯操作。如果在這個分組上需要任何處理,狀態(tài)處理器將針對這個狀態(tài)執(zhí)行來自狀態(tài)指令數(shù)據(jù)庫的指令,直到沒有指令剩下或者遇到表示處理的指令為止。
在優(yōu)選實施方案中,狀態(tài)處理器功能是可編程的以便為分析新應用程序、新的分組序列和能夠由使用這樣的應用引起的狀態(tài)作準備。
如果在查找這個特定分組流簽名的過程中需要把流插入到活動數(shù)據(jù)庫,就對流插入和刪除引擎(FIDE)進行初始化。狀態(tài)處理器也可以創(chuàng)建新的流簽名并且這樣就可以命令流插入和刪除引擎把一個新的流作為一個新項插入到數(shù)據(jù)庫中。
在優(yōu)選硬件實施方案中,LUE、狀態(tài)處理器以及FIDE中的每一個都獨立于其它兩個引擎進行操作。
本發(fā)明的另一個方面是收集與流有關的度量。使用這里描述的狀態(tài)處理,因為狀態(tài)處理器能夠查找特定的數(shù)據(jù)有效負載,可以對這里描述的所發(fā)明的監(jiān)控器的實施方案編程以便為流中與特定數(shù)據(jù)有效負載有關的一群分組收集相同的振動度量。這就使得所發(fā)明的系統(tǒng)能夠提供更集中在與一組分組有關的質量類型上的度量。通常在評價網絡中一個系統(tǒng)的性能時更希望有與單個分組相關的度量。
尤其可以對監(jiān)控系統(tǒng)編程以保持在對話流的任意狀態(tài)上任意類型的度量。監(jiān)控器還可以把實際的統(tǒng)計信息編程寫進任意點的狀態(tài)中。這使得監(jiān)控器系統(tǒng)的實施方案能夠收集與網絡使用和性能有關的度量,以及與特定狀態(tài)或分組序列有關的度量。
可以只和狀態(tài)一起收集的一些特定度量是與在一個方向上的一組流量有關的事件,與在一個或兩個方向上通信序列的狀況有關的事件以及與特定序列中的特定應用的分組交換有關的事件。這僅是需要引擎的度量的一個小樣本,該引擎能夠把流的狀態(tài)和一組度量聯(lián)系起來。
另外,因為監(jiān)控器提供對對話或流中的特定應用更高的可見性,因而可以對監(jiān)控器編程以收集特別針對那種類型的應用程序或服務的度量。換句話說,如果一個流是Oracle數(shù)據(jù)庫服務器的,監(jiān)控器的實施方案可以收集完成一次事務所要求的分組數(shù)量。只有與狀態(tài)和應用分類一起才能從網絡得到這種類型的度量。
因為可以對監(jiān)控器編程以收集不同組的度量,對那些在多種環(huán)境中都要求的度量來說可以把本系統(tǒng)作為數(shù)據(jù)源。尤其是那些用來監(jiān)控并分析與特定應用組有關的性能和傳輸流量的質量的度量。其它實現(xiàn)可以包括與特定傳輸流量及其所帶事件的記帳和返還(charge-back)有關的度量。然而也可對其它實現(xiàn)進行編程以提供對故障檢修和容量設計有用并直接與焦點應用和服務有關的度量。
本發(fā)明的另一個方面是根據(jù)每個分組確定服務度量的質量。
這樣就在這里就公開了監(jiān)控設備的一個方法,用于分析通過計算機網絡上一個連接點的分組的流。該方法包括從分組攔截設備接收分組,并在包含以前遇到的對話流的流-入口的流-入口數(shù)據(jù)庫中進行查找。查找是為了確定收到的分組是否是一個現(xiàn)有的流。對每個分組都進行了處理。如果該分組是一個現(xiàn)有的流,該方法就更新這個現(xiàn)有的流的流-入口,包括存儲一個或多個保存在流-入口中的統(tǒng)計測量。如果該分組是一個新流,該方法就在流-入口數(shù)據(jù)庫中為這個新流存儲一個新的流-入口,包括存儲一個或多個保存在流-入口中的統(tǒng)計測量。這些統(tǒng)計測量用來確定與流有關的度量。這些度量可以是來自服務度量被確定的質量的基本度量,或者是服務度量的質量。
這里還描述了一個聯(lián)合高速緩沖存儲器系統(tǒng),用于查找外部存儲器的一個或多個單元。高速緩沖存儲器系統(tǒng)包括連結到外部存儲器上的一組高速緩沖存儲器存儲單元,一組相聯(lián)存儲器單元(CAMs),每個CAM包含一個地址和指向一個高速緩沖存儲器單元的指針,以及一個帶有輸入的匹配電路,這樣CAM就在輸入和CAM單元中的地址相同時確認一個匹配輸出。特定的CAM指向哪個高速緩沖存儲器單元是隨著時間變化的。在優(yōu)選實現(xiàn)中,CAMs被按照自頂至底的順序連接在一起,底部的CAM指向最近最少使用的高速緩沖存儲器單元。
這里還描述了一個處理器,用于處理通過計算機網絡上一個連接點的分組的內容。該處理器包括一個有一個或多個比較器的查找設備,比較器用于在分組內容中查找引用字符串。處理器實時處理通過該連接點的所有分組的內容。一種實現(xiàn)是,處理器是可編程的并且擁有一個指令集,指令集中包含調用查找設備從分組范圍內的某個未知位置開始查找指定的引用字符串的指令。
這里還公開了可以用在該處理器中的查找設備的實施方案。該查找設備可配置用來從目標數(shù)據(jù)中的一組起始位置中的任一個開始在目標數(shù)據(jù)中查找NR個單元的引用字符串。查找設備包括一個可配置用來接收包含引用字符串的NR個單元的引用寄存器;一個或多個連結成組以接收目標數(shù)據(jù)的目標數(shù)據(jù)寄存器;以及多個比較器集,每個比較器集對應于一個起始位置。特定起始位置的比較器集連接到引用寄存器的每個單元以及從該特定起始位置開始的目標數(shù)據(jù)寄存器的NR單元上,并從該特定起始位置開始比較引用寄存器內容和目標數(shù)據(jù)寄存器的NR個連續(xù)單元的對應內容。如果從一個比較器集的相應不同起始位置開始的目標數(shù)據(jù)中有第一個引用字符串的匹配,那么該比較器就對此做出指示。如果在任意起始位置開始的目標數(shù)據(jù)寄存器中包含有第一個引用字符串,那么就由相應的比較器集對此做出指示。
雖然通過參考詳細的優(yōu)選實施方案可以更好地理解本發(fā)明,但不應該用這些來把本發(fā)明限制在任意特定的實施方案上面,因為這樣的實施方案只是用于說明目的。還要借助下列附圖依次說明這些實施方案。
圖1是本發(fā)明的網絡實施方案的功能框圖,其中的監(jiān)控器被連接用來分析通過一個連接點的分組。
圖2中的圖表把一些起始時可能交換的分組及其格式的實例描繪成說明性實例,并描繪了在被監(jiān)控和分析的網絡上的客戶機和服務器之間的對話流。還描繪了這個實例和本發(fā)明的實施方案所特有的一對流簽名。描繪了一些可能的流簽名,在分析分組和識別產生離散應用分組交換的特定服務器應用的方法中可以產生并使用這些流簽名。
圖3是本發(fā)明的一種方法實施方案的功能框圖,它能夠像圖1中所示的分組監(jiān)控器那樣操作。這個方法可以用軟件或硬件來實現(xiàn)。
圖4是一種高級協(xié)議語言編譯及優(yōu)化方法的流程圖,它在一種實施方案中可用來根據(jù)本發(fā)明的版本為監(jiān)控分組產生數(shù)據(jù)。
圖5是分組解析方法的流程圖,該方法被用作所發(fā)明的分組監(jiān)控器的實施方案中解析器的一部分。
圖6是分組元素提取方法的流程圖,該方法被用作所發(fā)明的分組監(jiān)控器的實施方案中解析器的一部分。
圖7是流簽名構造方法的流程圖,該方法被用作所發(fā)明的分組監(jiān)控器的實施方案中解析器的一部分。
圖8是監(jiān)控器查找和更新方法的流程圖,該方法被用作發(fā)明的分組監(jiān)控器的實施方案中分析器的一部分。
圖9是有代表性的Sun微系統(tǒng)遠程過程調用應用的流程圖,它可以被所發(fā)明的分組監(jiān)控器識別。
圖10是硬件解析器子系統(tǒng)的功能框圖,包括模式識別器和提取器,它們構成了所發(fā)明的分組監(jiān)控器的實施方案中解析器模塊的一部分。
圖11是包括狀態(tài)處理器在內的硬件分析器的功能框圖,它構成了所發(fā)明的分組監(jiān)控器的實施方案的一部分。
圖12是流插入和刪除引擎方法的功能框圖,它構成了所發(fā)明的分組監(jiān)控器的實施方案中分析器的一部分。
圖13是狀態(tài)處理方法的流程圖,它構成了所發(fā)明的分組監(jiān)控器的實施方案中分析器的一部分。
圖14是本發(fā)明的方法實施方案的簡單功能框圖,它能夠像圖1中所示的分組監(jiān)控器那樣進行操作。這個方法可以用軟件實現(xiàn)。
圖15是圖3(以及圖10和圖11)的分組監(jiān)控器怎樣用像微處理器這樣的處理器在網絡上進行操作的功能框圖。
圖16是以太網分組的頂(MAC)層以及可以根據(jù)本發(fā)明的一個方面被提取出來形成簽名的一些元素的實例。
圖17A是圖16的以太網分組的以太網類型報頭以及可以根據(jù)本發(fā)明的一個方面被提取出來形成簽名的一些元素的實例。
圖17B是IP分組,例如圖16中所示的以太網分組,以及可以根據(jù)本發(fā)明的一個方面被提取出來形成簽名的一些元素的實例。
圖18A是用來存儲模式元素、解析和提取數(shù)據(jù)庫元素的三維結構,該數(shù)據(jù)庫根據(jù)本發(fā)明的一個實施方案可被解析器子系統(tǒng)所使用。
圖18B是存儲模式元素、解析和提取數(shù)據(jù)庫的一種替代形式,該數(shù)據(jù)庫根據(jù)本發(fā)明的一個實施方案可被解析器子系統(tǒng)使用。
圖19是圖11的分析器子系統(tǒng)中狀態(tài)處理器部件的框圖。
圖20是圖11的分析器子系統(tǒng)中查找引擎部件的框圖。
圖21是一個數(shù)據(jù)流框圖,顯示了查找引擎的四個單獨的查找模塊。
圖22A是查找引擎核心的框圖;圖22B顯示了核心中的比較器部件,它對一組輸入和另一組輸入進行比較。
圖23A更詳細地顯示了輸入核心的實現(xiàn);圖23B顯示了核心的比較器部件。
圖24顯示了不同的PDL文件模塊,它們都由圖20中作為實例描述的編譯方法按照本發(fā)明的編譯方面進行編譯。
圖25是根據(jù)本發(fā)明的一個方面編譯高級語言文件的方法的流程圖。
圖26是圖11的分析器子系統(tǒng)中高速緩存器子系統(tǒng)1115中的高速緩沖存儲器存儲部分。
圖27是高速緩存器子系統(tǒng)中高速緩沖存儲器存儲控制器和CAM控制器的框圖。
圖28是高速緩存器子系統(tǒng)1115中CAM陣列的一種實現(xiàn)的框圖。
具體實施例方式
注意本文檔包括可能包括信號名的硬件圖表及描述。多數(shù)情況下,這些名字就可以充分描述,但其它情況下并不需要用它們來理解本發(fā)明的操作和實踐。
網絡中的操作圖1描繪了本發(fā)明的一個系統(tǒng)實施方案,這里用通用標號100來指代它。系統(tǒng)100有一個在不同計算機之間傳遞分組(例如,IP數(shù)據(jù)報)的計算機網絡102,例如在客戶機104-107和服務器110和112之間。該網絡被以示意圖的形式顯示為帶有幾個網絡結點和鏈接的一片云,網絡結點和鏈接顯示在云的內部。監(jiān)控器108驗在任一方向上通過它的連接點121的分組,并且能夠根據(jù)本發(fā)明的一個方面闡明與每個分組相聯(lián)的是什么應用程序。圖中所示監(jiān)控器108正在檢驗在服務器110的網絡接口116和網絡之間的分組(即數(shù)據(jù)報)。監(jiān)控器還可以放在網絡中的其它點上,例如網絡102和客戶機104的接口118之間的連接點123,或者像網絡102中某處的連接點125所指示的其它位置。沒有顯示出來的是在網絡的123位置上的網絡分組攔截設備,它把網絡上的物理信息轉換成能夠輸入到監(jiān)控器108中的分組。這樣的分組攔截設備是通用的。
網絡可以采用多種協(xié)議來建立并維持必需的通信,例如可以用TCP/IP協(xié)議等。任意網絡活動—例如由客戶機104(客戶機1)運行的一個應用程序和在服務器110(服務器2)上運行的另一個應用程序進行通信—都將產生在網絡102上的分組序列交換,這正是各自的應用程序和網絡協(xié)議的特征。這樣的特征在單個分組級上毫無啟迪作用??梢砸笥杀O(jiān)控器108對許多分組進行分析以擁有足夠的所需信息來識別特定的應用程序。可能需要在不同協(xié)議的環(huán)境中對分組進行解析和分析,例如,符合ISO分層網絡模型的一種類型的分組通過應用會話層進行傳輸。
通信協(xié)議是分層的,它也被稱作協(xié)議棧。ISO(國際標準化組織)已經定義了一個通用模型,它為通信協(xié)議層的設計提供了一個框架。下面的表格中顯示了這個模型,充當理解現(xiàn)有通信協(xié)議功能的基本參考。
ISO模型
不同的通信協(xié)議采用ISO模型的不同層,或者使用與ISO模型類似但并不嚴格遵守它的分層模型。特定層中的協(xié)議對其它層上所用的協(xié)議可以是不可見的。例如,一個應用(第7級)可能無法識別一個通信嘗試(2-3層)的源計算機。
在一些通信技術中,術語“幀”通常指在OSI第二層上封裝的數(shù)據(jù),包括目的地址、流控制的控制位、數(shù)據(jù)或有效負載以及用于錯誤校驗的CRC(循環(huán)冗余校驗)數(shù)據(jù)。術語“分組”通常指在OSI第三層上封裝的數(shù)據(jù)。在TCP/IP世界中,還使用了術語“數(shù)據(jù)報”。在本規(guī)范中,術語“分組”意指包括分組、數(shù)據(jù)報、幀和單元。通常,分組格式或幀格式指如何用不同的字段和報頭封裝數(shù)據(jù)以便通過網絡進行傳輸。例如,數(shù)據(jù)分組通常包括目的地址字段、長度字段、糾錯碼(ECC)字段或循環(huán)冗余校驗(CRC)字段以及標識分組的開始和結束的報頭和報尾。術語“分組格式”和“幀格式”是同義的,也稱作“單元格式”。
監(jiān)控器108查看通過連接點121的每個分組以便分析。但是,并非每個分組都帶有對識別協(xié)議的所有層次有用的相同信息。例如,在和一個特定應用相聯(lián)的對話流中,應用將使服務器發(fā)送一個A類型的分組,但其它應用也將如此。然而,如果特定的應用程序總是在A類型的分組之后緊跟著發(fā)送一個B類型的分組,而其它的應用程序并不這樣做,那么為了識別那個應用的對話流的分組,可用監(jiān)控器識別匹配與A類型分組相聯(lián)的B類型分組的分組。如果在一個A類型分組之后識別出了這樣的分組,那么該特定應用程序的對話流就已經開始向監(jiān)控器108揭示它自己。
在識別出對話流與某應用程序相聯(lián)之前還需要檢驗更多的分組。通常,監(jiān)控器108只能同時部分完成對其它應用相關對話流中的分組交換的識別。監(jiān)控器108的一個方面是它能夠保持流的狀態(tài)。流的狀態(tài)是對流中能夠導致識別所有協(xié)議層內容—例如ISO模型協(xié)議級別—的所有以前事件的指示。本發(fā)明的另一個方面形成提取出的分組特征部分的簽名,它可以用來快速識別屬于相同流的分組。
在對監(jiān)控器108的實際使用中,在網絡102上通過監(jiān)控器108的連接點的分組數(shù)可達每秒百萬個之多。因此,監(jiān)控器只有很少的時間可以用來對每個分組進行分析并測定類型以及識別并維護通過連接點的流的狀態(tài)。監(jiān)控器108因此屏蔽每個分組中所有那些對它的分類沒有貢獻的不重要的部分。但是,每個分組中要屏蔽的部分根據(jù)分組所屬的流以及流的狀態(tài)不同而變化。
根據(jù)應用程序的執(zhí)行所產生的分組識別出分組類型并最終識別出相聯(lián)的應用程序在監(jiān)控器108中是一個多步方法。例如,第一步,幾個應用程序都將產生第一種分組。從分組的選中部分產生的第一個“簽名”將使得監(jiān)控器108能夠有效地識別屬于同一流的任何分組。某些情況下,僅分組類型就能讓監(jiān)控器識別出在對話流中產生這樣的分組的應用。隨后該簽名可用來有效識別在與該應用有關的流量中產生的所有將來分組。
在其它情況下,第一個分組僅僅啟動分析對話流的方法,還需要更多分組來識別相關的應用程序。在這種情況下,要用簽名識別第二種類型的后繼分組—但它也可能屬于同一個對話流。隨后在第二步那些應用程序中只有少數(shù)擁有能夠產生第二種分組類型的對話流。在分類方法的這一步中,所有不能產生這樣的分組類型序列的應用程序都被排除在對包含這兩種分組的對話流進行分類的方法之外。根據(jù)用協(xié)議和可能的應用的已知模式產生一個簽名,它能夠識別跟隨在對話流中的任何將來分組。
現(xiàn)在可能已經識別出了該應用,或者識別還需要用第二步中的簽名來繼續(xù)進行第三步分析。因此,對每個分組,監(jiān)控器都要對分組進行解析并產生一個簽名,以確定這個簽名是否和一個以前遇到過的流相一致,或者用來識別屬于同一流的將來分組。在以前遇到過的分組序列環(huán)境(狀態(tài))以及過去的序列在與不同應用相關的對話流中可能產生的將來序列的環(huán)境中進一步實時分析分組。還可以產生用于識別將來分組的新簽名。分析過程繼續(xù)進行直到識別出應用為止。最后產生的簽名隨后可以用來有效識別與同一對話流相關的將來分組。這樣的裝置使得監(jiān)控器108能夠應付每秒成百萬個必須被檢查的分組。
本發(fā)明的另一個方面是增加竊聽(Eavesdropping)。在本發(fā)明的能夠竊聽的實施方案中,一旦監(jiān)控器108識別出通過網絡102中某一點正在執(zhí)行的應用程序(例如,因為客戶機105或服務器110所執(zhí)行的應用),監(jiān)控器向網絡上的一些通用處理器發(fā)送一個消息,這些處理器能夠輸入來自網絡上同一位置的分組,并隨后裝入屬于它自己的該應用程序的可執(zhí)行副本并用它來讀取網絡上正在交換的內容。換句話說,一旦監(jiān)控器108完成了對應用程序的識別,竊聽就開始啟動了。
網絡監(jiān)控器圖3顯示了一種網絡分組監(jiān)控器300,在本發(fā)明的實施方案中可以用計算機硬件和/或軟件來實現(xiàn)它。系統(tǒng)300與圖1中的監(jiān)控器108相似。檢驗分組302,例如,分組可以來自網絡102中121位置上(圖1)的分組攔截設備,對分組進行估計以試圖確定它的特征,例如多層模型中的所有協(xié)議信息以及什么應用產生了該分組。
分組攔截設備是一個通用接口,它對物理信號進行轉換并隨后把它們解碼成位,并根據(jù)特定的網絡(以太網、幀中繼、ATM等)把它們解碼成分組。分組攔截設備向監(jiān)控器108指示攔截到的一個或多個分組的網絡類型。
這里所顯示的方面包括(1)對監(jiān)控器進行初始化以產生需要在不同類型的分組上執(zhí)行的操作—由編譯器和優(yōu)化器完成,(2)對分組進行處理—解析并提取選中部分—以產生一個識別簽名—由解析器子系統(tǒng)301完成,和(3)分析分組—由分析器303實現(xiàn)。
編譯器和優(yōu)化器310的目的是提供協(xié)議特定信息給解析器子系統(tǒng)301和分析器子系統(tǒng)303。在監(jiān)控器的操作之前要對其進行初始化,并且只在有新協(xié)議加入時才需要重復初始化動作。
流是正在網絡中的任意兩個地址之間交換的分組序列。對每個協(xié)議都有幾個已知的字段,像目的(接收者)、源(發(fā)送者)等等,在監(jiān)控器300中用這些和其它字段來識別流。還有其它一些字段對識別流不太重要,像校驗和以及那些不用于識別的部分。
解析器子系統(tǒng)301用模式識別方法304檢驗分組,該方法對分組進行解析并確定協(xié)議類型以及分組302中存在的每個協(xié)議層的相關報頭。解析器子系統(tǒng)中的提取方法306從分組302中提取出特征部分(簽名信息)。用于解析和有關提取操作的模式信息,例如提取掩碼,都由解析模式結構和提取操作數(shù)據(jù)庫(解析/提取數(shù)據(jù)庫)308提供,由編譯器和優(yōu)化器310對這個數(shù)據(jù)庫進行填充。
協(xié)議描述語言(PDL)文件336描述了可以在任意層上出現(xiàn)的模式和所有協(xié)議的狀態(tài),包括怎樣解釋報頭信息,怎樣從分組報頭信息確定下一層上的協(xié)議,以及為了識別流并最終識別出應用和服務要提取什么信息。層次選擇數(shù)據(jù)庫338描述了由監(jiān)控器處理的特定分層操作。也就是說,在任意層的協(xié)議之上運行的是什么協(xié)議。這樣336和338就聯(lián)合描述了怎樣解碼、分析并理解分組中的信息,以及另外怎樣對信息分層。這個信息被輸入到編譯器和優(yōu)化器310中。
當編譯器和優(yōu)化器310執(zhí)行時,它產生兩組內部數(shù)據(jù)結構。第一組是解析/提取操作的集合308。模式結構包括解析信息并描述在分組的報頭中將要識別什么;提取操作是根據(jù)已經匹配的模式將要提取出分組中的什么元素。這樣,解析/提取操作數(shù)據(jù)庫308包括描述怎樣從分組的數(shù)據(jù)確定一組一個或多個協(xié)議有關提取操作的信息,這些操作指示分組中所用的協(xié)議。
由編譯器310構造的其它內部數(shù)據(jù)結構是狀態(tài)模式和方法的集合326。這些是發(fā)生在不同對話流中的不同狀態(tài)和狀態(tài)轉換,以及在對話流的任意狀態(tài)中需要執(zhí)行以促進分析話流任務的狀態(tài)操作(例如,需要檢驗的模式和需要構造的新簽名)。
這樣,編譯PDL和層次選擇向監(jiān)控器300提供了它需要用來開始處理分組的信息。在替代實施方案中,可以手動或自動產生數(shù)據(jù)庫308和326中一個或多個結構的內容。注意,在一些實施方案中層次選擇信息是內在的而沒有明確描述。例如,既然協(xié)議的PDL文件包括了子協(xié)議,那么父協(xié)議也可以被確定。
在優(yōu)選實施方案中,來自攔截設備的分組302被輸入到分組緩沖區(qū)中。由模式分析與識別引擎(PAR)執(zhí)行模式識別方法304,PAR分析并識別分組中的模式。尤其是PAR定位報頭中的下一協(xié)議字段并確定報頭的長度,并為特定類型的協(xié)議報頭執(zhí)行其它特定任務。這種操作的一個實例是對進行類型和長度比較以區(qū)分IEEE 802.3(以太網)分組和較老的類型2(或版本2)以太網分組,也稱為DIX(DIGITAL-Intel-Xerox)分組。PAR還用模式結構和提取操作數(shù)據(jù)庫308來識別下一個協(xié)議以及與該協(xié)議相關聯(lián)的參數(shù),這些使PAR能夠分析下一個協(xié)議。一旦識別出一個或一組模式,它/它們將與一組零個或多個提取操作相聯(lián)。這些提取操作(以命令及相關參數(shù)形式)被傳遞給由提取和信息識別(EII)引擎實現(xiàn)的提取方法306,EII引擎從分組中提取選中的部分,包括為標識該分組為某個流的一部分而需要的標識信息。提取出的信息被依次放置并隨后在312框中對它們進行處理以構造這個流的唯一流簽名(也稱為“鍵”)。流簽名依賴于分組中所用的協(xié)議。對于某些協(xié)議,提取出的成分可能包括源和目的地址。例如,以太網幀里的終端地址對構造更好的流簽名十分有用。這樣,簽名通常包括客戶機和服務器地址對。簽名用來識別更多是這個流或可能是這個流的一部分的分組。
在優(yōu)選實施方案中,構造流鍵包括用散列函數(shù)產生簽名的散列。目的—如果使用這樣的散列很方便的話—是把由簽名標識的流-入口散布在數(shù)據(jù)庫中以便能夠有效查找。所產生的散列最好是根據(jù)散列算法并且這樣的散列生成也為本領域中的技術人員所知。
在一種實施方案中,解析器把來自分組并包括簽名在內的數(shù)據(jù)—解析器記錄—(即分組中選中的部分)、散列及分組本身傳遞下去以能夠執(zhí)行需要來自分組的更多數(shù)據(jù)的任意狀態(tài)處理。解析器子系統(tǒng)的改進實施方案可以產生解析器記錄,其中有一些預定義的結構并且包括簽名、散列、與解析器記錄中的一些字段有關的一些標志以及解析器子系統(tǒng)已經確定的部分分組有效負載,對分組進行進一步的處理,例如狀態(tài)處理,可能需要這個解析器記錄。
注意替代實施方案可以使用除了把分組的選中部分連接起來之外的一些函數(shù)來構造標識簽名。例如,可以使用串聯(lián)的選中部分的一些“摘要函數(shù)”。
解析器記錄被傳遞到查找方法314上,它觀察系統(tǒng)已經遇到過的已知流的內部記錄數(shù)據(jù)存儲中,并判斷(在316中)這個特定的分組是否屬于一個已知流,由數(shù)據(jù)庫324中是否存在匹配這個流的流-入口指示判斷結果。數(shù)據(jù)庫324中的每個記錄與一個遇到過的流相關。
解析器記錄進入被稱為統(tǒng)一流鍵緩沖區(qū)(UFKB)的緩沖區(qū)中。UFKB在與解析器記錄相似的數(shù)據(jù)結構中存儲流上的數(shù)據(jù),但它還包含一個可以修改的字段。尤其是有一個UFKB記錄字段存儲分組序號,另一個字段以狀態(tài)處理器的程序計數(shù)器形式用狀態(tài)信息進行填充,狀態(tài)處理器實現(xiàn)狀態(tài)處理328。
判定帶有相同簽名的記錄是否已經存在由查找引擎(LUE)執(zhí)行,LUE獲得新的UFKB記錄并用其中的散列地址去查找是否有匹配的已知流。在特定的實施方案中,已知流數(shù)據(jù)庫324是在外部存儲器中。有一個高速緩存器與數(shù)據(jù)庫324相聯(lián)。LUE通過使用散列地址訪問高速緩存器以查找已知記錄,如果該入口不在高速緩存器中,就到外部存儲器中查找該入口。
流-入口數(shù)據(jù)庫324所存儲的流-入口包括唯一流簽名、狀態(tài)信息、從分組中提取用于更新流的信息以及關于流的一個或多個統(tǒng)計信息。每個入口完整地描述了一個流。數(shù)據(jù)庫324被組織成包含N個流-入口(也稱為存儲桶,每個對應一個流-入口)的存儲柜,在優(yōu)選實施方案中N等于4。通過來自解析器子系統(tǒng)301的分組中的散列(即UFKB記錄中的散列)對存儲桶(即流-入口)進行訪問。散列提供更淺的存儲桶把流散布在數(shù)據(jù)庫中以便能夠快速查找入口。設計者根據(jù)監(jiān)控器所帶的存儲器的數(shù)量選擇存儲桶深度N以及所用散列數(shù)據(jù)值的位數(shù)。例如,在一種實施方案中,每個流-入口都是128個字節(jié),同時有128K個流-入口,因而需要16M字節(jié)的存儲器。使用16位的散列可以在每個存儲桶中給出兩個流-入口。經驗顯示這在大多數(shù)情況下都是足夠的。注意別的實施方案使用了256字節(jié)長的流-入口。
這里描述了任何時候對數(shù)據(jù)庫324的訪問,可以理解該訪問是通過高速緩存器進行的,除非它被從環(huán)境中重置或清除。
如果沒有找到區(qū)配新流的簽名的流-入口,那么協(xié)議和狀態(tài)識別方法318就進一步確定狀態(tài)和協(xié)議。也就是說,方法318確定協(xié)議以及在這個協(xié)議的這個分組所屬的流的狀態(tài)序列中的什么地方。識別方法318使用提取出的信息并參考狀態(tài)模式和方法數(shù)據(jù)庫326。方法318后面跟的是需要由狀態(tài)處理器328在這個分組上執(zhí)行的狀態(tài)操作。
如果在數(shù)據(jù)庫324(例如,在高速緩存器中)中找到了與該分組匹配的流-入口,那么方法320就從查找到的流-入口確定是否需要由流簽名的狀態(tài)進行更多分類。如果不需要,方法322就更新流-入口數(shù)據(jù)庫中的流-入口(例如,通過高速緩存器)。更新包括更新存儲在流-入口中的一個或多個統(tǒng)計測量。在我們的實施方案中,統(tǒng)計測量存儲在流-入口中的計數(shù)器里。
如果需要進行狀態(tài)處理,就開始狀態(tài)方法328。狀態(tài)處理器328執(zhí)行為該流的狀態(tài)指定的任意狀態(tài)操作并更根據(jù)從狀態(tài)模式和方法數(shù)據(jù)庫326獲得的一組狀態(tài)指令把狀態(tài)更新到下一個狀態(tài)。
狀態(tài)處理器328對新的和現(xiàn)有的流進行分析以分析協(xié)議棧的所有層,最終按照應用(ISO模型中的第七層)對流進行分類。它通過根據(jù)預定義的狀態(tài)轉換規(guī)和狀態(tài)處理器指令數(shù)據(jù)庫326中指定的指令從狀態(tài)-到-狀態(tài)進行來做到這一點。狀態(tài)轉換規(guī)則通常包含一個測試以及緊隨在其后的在測試結果為真時進行的下一狀態(tài)。操作是在狀態(tài)處理器處于特定狀態(tài)中時要執(zhí)行的操作—例如,為了估計需要應用的狀態(tài)轉換規(guī)則的數(shù)量。狀態(tài)處理器通過每個狀態(tài)和每個狀態(tài)方法直到測試為真,或者沒有要執(zhí)行的測試為止。
通常,狀態(tài)處理操作集可以是分組上的零個或多個操作,執(zhí)行這些操作可能會把一個操流留在一個導致在完成識別之前就退出系統(tǒng)的狀態(tài)中,但可能知道更多關于接下來—即遇到這個流的下一個分組時—需要執(zhí)行的狀態(tài)和狀態(tài)方法的信息。
通過維護流的狀態(tài)并知道可以用來自以前遇到的流的信息對新流進行設置,網絡流量監(jiān)控器300提供了(a)流的單一分組協(xié)議識別和(b)流的多分組協(xié)議識別。監(jiān)控器300甚至能夠從出現(xiàn)在服務器通告類型的流中的一個或多個斷開的子流識別應用程序。一些看起來與現(xiàn)有技術中的監(jiān)控器不相關的流,本發(fā)明中的監(jiān)控器也可用流簽名識別出它們是與以前遇到過的子流相關的子流。
這樣,狀態(tài)處理器328為這個特定流-入口的分組應用第一個狀態(tài)操作。方法330判斷是否還需要為這個狀態(tài)執(zhí)行更多操作。如果是,分析器就在框330和328之間繼續(xù)循環(huán),對這個特定的分組應用額外的狀態(tài)操作直到所有那些操作都被完成—也就是說,直到在這個狀態(tài)中沒有這個分組的其它操作為止。方法332根據(jù)流的狀態(tài)和協(xié)議判斷對這種類型的流是否還有其它狀態(tài)要分析,以便完全表征該流。如果沒有,現(xiàn)在就已經被完全表征了該對話流并且由方法334結束該流的對話流的分類。
在特定的實施方案中,狀態(tài)處理器328通過把解識析器識別出的最后一個協(xié)議用作跳轉表(跳轉向量)中的位移來啟動狀態(tài)處理。跳轉表在狀態(tài)模式和方法數(shù)據(jù)庫326中找到用于該協(xié)議的狀態(tài)處理器指令,或者在已知流數(shù)據(jù)庫324中找到相應的流-入口,如果該入口存在的話。狀態(tài)處理器必須測試位,進行比較、加或減操作以執(zhí)行測試。例如,一個由狀態(tài)狀態(tài)處理器執(zhí)行的通用操作是在UFKB的有效負載部分中查找一個或多個模式。
這樣,在分類里的332中,分析器判斷流是否處于一個結束狀態(tài)。如果不在結束狀態(tài),就在方法332中對這個流-入口進行更新(如果是新流就進行創(chuàng)建)。
此外,如果該流是已知的并且在332中確定它還有更多需要用后來的分組進行處理的狀態(tài),就在方法322中更新流-入口。
在識別完成之后還要更新流-入口以使能夠從屬于這個完全分析過的對話流的簽名識別出屬于這個流的任意將來分組。
在更新之后,數(shù)據(jù)庫324包括所有已經出現(xiàn)的對話流的集合。
這樣,圖3中所示的本發(fā)明的實施方案自動保存流-入口,它在一個方面中包括存儲狀態(tài)。圖3的監(jiān)控器還產生分組的特征部分—簽名,可用來識別流。可以用流-入口的簽名對它們進行識別和訪問。一旦識別出分組來自某個已知的流,該流的狀態(tài)是已知的并且這個知識使得能夠對每個不同的協(xié)議和應用實時執(zhí)行狀態(tài)轉換分析。在復雜分析中,要遍歷的狀態(tài)轉換和要檢驗的分組一樣越來越多。那些屬于同一對話流的將來分組從以前到達的狀態(tài)繼續(xù)它們的狀態(tài)分析。當已經處理了足夠多的與感興趣的應用有關的分組時,終于達到了一個最終識別狀態(tài),即已經由狀態(tài)分析遍歷了一組狀態(tài)以完全表征該對話流。那個最終狀態(tài)的簽名使得同一對話流中每個新到達的分組能夠被實時單獨識別。
用這種方式可以實現(xiàn)本發(fā)明的一個重大優(yōu)點。一旦為第一次和以最終狀態(tài)結束遍歷了狀態(tài)轉換的一個特定集合,就可以產生快捷識別模式—簽名—它將在每個與該對話流有關的新來的分組上標上鍵值。檢驗簽名涉及到簡單操作,使得能夠在網絡上成功監(jiān)控高分組速率。
在改進的實施方案中,幾個狀態(tài)分析器并行運行,因此能夠檢驗大量協(xié)議和應用。每個已知的協(xié)議和應用都將有至少一個唯一的狀態(tài)轉換集合,并因此可以通過觀察這樣的轉換而唯一識別它們。
當每個新的對話流開始時,就立即自動產生標識該流的簽名,并隨著遇到的該對話流中的將來分組對簽名進行更新,并根據(jù)該流的狀態(tài)轉換規(guī)則進一步遍歷任意潛在應用的狀態(tài)轉換集中的狀態(tài)。該流的新狀態(tài)—與一個或多個潛在應用的狀態(tài)轉換集合相關的那些狀態(tài)—被加入到以前遇到的狀態(tài)的記錄中,以在遇到流中的一個新分組時能夠輕松識別和檢索。
詳細操作圖4圖示了一種包括編譯方法在內的初始化系統(tǒng)400。也就是說,初始化的一部分產生模式結構和提取操作數(shù)據(jù)庫308以及狀態(tài)指令數(shù)據(jù)庫328。這樣的初始化可以脫機或者發(fā)生從中心位置發(fā)生。
能夠存在于不同層中的不同協(xié)議可以看作是由結點鏈接而成的一個或多個樹中的結點。分組協(xié)議是樹的根(稱為第0層)。每個協(xié)議是一個父親結點或終端結點。一個父親結點可以把一個協(xié)議鏈接到更高層上的其它協(xié)議(子協(xié)議)上。這樣協(xié)議就可以有零或多個孩子。例如,以太網分組有幾種變體,每一種都有基本上保持相同的基本格式。以太網分組(根或第0層結點)可以是以太類型的分組—也稱為以太網類型/版本2和DIX(DIGITAL-Intel-Xerox分組)—或IEEE 803.2分組。IEEE 802.3分組繼續(xù)下去,它的一個孩子結點可以是IP協(xié)議,IP協(xié)議的一個孩子結點可以是TCP協(xié)議。
圖16顯示了完整以太網幀(即分組)的報頭1600(底層1),包括目的介質訪問控制地址(Dst MAC 1602)和源介質訪問控制地址(SrcMAC 1604)上的信息。圖16中還顯示了PDL文件中為提取簽名指定的一些(并非全部)信息。
圖17A顯示了以太類型分組1700的下一層(第2層)報頭信息。對以太類型分組1700來說,來自分組指示下一層的有關信息是一個兩字節(jié)類型字段1702,其中包含下一層的子識別模式。剩下的信息1704在圖中顯示為陰影,因為它與這一層無關。列表1712顯示了以太類型分組的可能的孩子,由在位移12發(fā)現(xiàn)的子識別模式所指示。圖17B顯示了一個可能的下一層的報頭結構,也就是IP協(xié)議的報頭結構。表1752中顯示了IP協(xié)議的可能的孩子。
模式、解析和提取數(shù)據(jù)庫(模式識別數(shù)據(jù)庫,或PRD)308由編譯方法310產生,在一種實施方案中,它是三維結構形式,提供對下一協(xié)議的分組報頭的快速查找。圖18A顯示了這樣一個3維表示1800(可以看作是2維表示的編入索引的集合)。3維結構的壓縮形式是優(yōu)選的。
圖18B中描繪了數(shù)據(jù)庫308中所用的數(shù)據(jù)結構的一種替代實施方案。這樣,像圖18A的3維結構那樣,該數(shù)據(jù)結構允許由模式識別方法304通過存儲器中的變址定位而不是執(zhí)行地址鏈接計算來執(zhí)行快速查找。在這個替代實施方案中,PRD308包括兩個部分,單一協(xié)議表1850(PT),對每個監(jiān)控器已知的協(xié)議它都有一個記錄,和一組查找表1870(LTU’s),用來識別已知的協(xié)議和它們的孩子。協(xié)議表包括模式分析和識別方法304(由PRE1006實現(xiàn))需要用來估計與那個協(xié)議相關的分組報頭信息的參數(shù),以及提取方法306(由限選器1007實現(xiàn))需要用來處理該分組報頭的參數(shù)。當有孩子時,PT描述對報頭中的哪些字節(jié)進行計算以確定子協(xié)議。尤其每個PT記錄包含報頭長、到孩子的位移、限選器命令和一些標志。
在報頭字段中找到特定的“子識別代碼”就執(zhí)行了模式匹配,并用這些代碼來檢索一個或多個LUT’s。每個LUT記錄有一個結點代碼,它可以有下列四個值之一,指示該協(xié)議已經被識別出來,指示該協(xié)議已被部分識別(需要更多LUT查找)的代碼,指示這是一個終端結點的代碼,和指示空記錄的空結點。要查找的下一個LUT也從LUT查找返回。
圖4中描述了編碼方法。以協(xié)議描述語言形式的源代碼信息顯示為402。在特定的實施方案中,高級解碼描述包括一組協(xié)議描述文件336,每個文件針對一個協(xié)議,以及一組分組層次選擇338,它們描述了監(jiān)控器能夠處理的特定分層(多組協(xié)議樹)。
編譯器403編譯這些描述。產生(404)分組解析和提取操作集合406,以狀態(tài)處理器的指令形式產生一組分組狀態(tài)指令和操作407,狀態(tài)處理器實現(xiàn)狀態(tài)處理方法328。每種類型的應用和協(xié)議的數(shù)據(jù)文件由分析器識別并從模式、解析和提取數(shù)據(jù)庫406下載到解析器和提取引擎的存儲器系統(tǒng)中。(參見解析方法500的描述及圖5;提取方法600的描述及圖6;解析子系統(tǒng)硬件描述及圖10)。每種類型的應用和協(xié)議的數(shù)據(jù)文件由分析器進行識別并從狀處理器指令數(shù)據(jù)庫407下載到狀態(tài)處理器中。(參見狀態(tài)處理器1108的描述及圖11)。
注意產生分組解析和提取操作構造并鏈接了三維結構(一種實施方案)或PRD的所有查找表。
因為可能的協(xié)議樹和子樹的數(shù)量巨大,編譯器方法400中包括比較樹和子樹以了解哪些孩子共享公共父親的優(yōu)化過程。當以LUT’s形式實現(xiàn)時,這個方法可以從多個LUT’s產生單一的LUT。優(yōu)化方法中還包括減少需要用來存儲PRD數(shù)據(jù)的空間的壓縮方法。
作為壓縮的一個實例,考慮圖18A的3-D結構,它可以看作是一組2-D結構,每個2-D結構表示一個協(xié)議。為了能夠對那些有幾個父親的協(xié)議每個只用一個數(shù)組以節(jié)省空間,在一種實施方案中,模式分析子方法保持一個“當前報頭”指針。3-D結構中每個協(xié)議2-D數(shù)組的位置(位移)索引是從該特定協(xié)議的報頭起始處開始的一個相對位置。此外,每個二維數(shù)組都是稀疏數(shù)組。優(yōu)化的下一步是對每個2-D數(shù)組和所有其它2-D數(shù)組進行核對以找出哪些共享存儲器。這些2-D數(shù)組中有很多都是被稀疏填充的,每個數(shù)組里只有很少量的有效記錄。因此接下來用一個“折疊”方法把兩個或更多2-D數(shù)組結合成一個物理2-D數(shù)組而且不丟失任意一個原始2-D數(shù)組的同一性(即所有的2-D數(shù)組邏輯上連續(xù)存在)。折疊可以在任意2-D數(shù)組之間進行,而不管它們在樹中的位置,只要滿足特定的條件即可。只要單個記錄間不相互沖突,就可以把多個數(shù)組結合成一個單一數(shù)組。然后用一個折疊號使每個元素和它的原始數(shù)組相聯(lián)。在圖18B的替代實施方案中為LUTs集合1850使用了類似的折疊方法。
在410,分析器已經完成了初始化并準備執(zhí)行識別。
圖5顯示了實際解析器子系統(tǒng)301如何活動的流程圖。從501開始,在502步把分組302輸入到分組緩沖區(qū)中。503步從分組302裝入下一個(在初始時是第一個)分組成分。分組成分是從每個分組302每次提取的一個元素就是。504執(zhí)行檢查以確定裝入分組成分操作503是否成功,如果判斷結果為真則表明分組中還有其它成分要處理。如果判斷結果為假,表明所有成分都已裝入,解析器系統(tǒng)301構造分組簽名(512)-下一階段(圖6)。
如果在503中成功裝入一個成分,就從模式、解析和提取數(shù)據(jù)庫308中取出(505)結點和方法以為該結點提供一組模式和方法以應用到裝入的分組成分上。解析器子系統(tǒng)301執(zhí)行檢查(506)以確定取出模式結點操作505是否成功完成,判斷結果為真表明在505步裝入了一個模式結點。如果判斷結果為假,則在511步移動到下一個分組成分。如果判斷結果為真,就在507步中將模式匹配方法應用到503中提取出的組件。在507中獲得的模式匹配(由測試508指示)意味著解析器子系統(tǒng)已經在解析元素中發(fā)現(xiàn)了一個結點;解析器子系統(tǒng)301繼續(xù)509步提取元素。
如果將結點方法應用到該成分上并未產生匹配(測試508),解析器子系統(tǒng)301就從模式數(shù)據(jù)庫308轉移到下一個模式結點(510),再到505步以取出下一個結點和方法。這樣,在508和505之間就有了一個“應用模式”循環(huán)。一旦解析器子系統(tǒng)301完成了所有模式,不管是否有匹配,解析器子系統(tǒng)301都轉移到下一個分組成分(511)。
一旦從輸入分組302裝入了所有分組成分并對它們進行了處理,再裝入分組就將失敗(由測試504指示),解析器子系統(tǒng)轉而構造分組簽名,在圖6中對此有所描述。
圖6是從分組中提取信息以構造分組簽名的流程圖。流程在601開始,它是圖5中的退出點513。在這一點上解析器子系統(tǒng)301在緩沖區(qū)中已經有了可用的全部分組成分和模式結點(602)。603步從圖5的模式分析方法裝入可用的分組成分。如果裝入完成(測試604),表明實際上還有其它分組組件,解析器子系統(tǒng)301在605步取出在602步接收自模式結點成分的提取和方法元素。如果成功取出(測試606),表明有要應用的提取元素,解析器子系統(tǒng)301在607步根據(jù)接收自模式結點的提取指令把提取方法應用到分組成分上。這就從分組成分中去掉并節(jié)省了一個元素。
在608步,解析器子系統(tǒng)301是否還有其它要從這個成分提取的東西,如果沒有,解析器子系統(tǒng)301就返回到603裝入手邊的下一個分組成分并重復這個過程。如果判斷結果為真,那么解析器子系統(tǒng)301就轉到下一個分組組件棘輪。隨后在603中裝入新的分組成分。當解析器子系統(tǒng)301通過608和603之間的循環(huán)時,如果還有更多要提取的分組成分可以將額外的提取方法應用到同一分組成分上,或者如果沒有其它要提取的可以把額外的提取方法應用到不同的分組成分上。
這樣提取方法根據(jù)模式和提取數(shù)據(jù)庫308中的信息針對特定分組提取越來越多的成分就構造出了簽名。一旦裝入一下一個分組成分操作失敗(測試604),表明已經提取出了所有成分。把構造出的簽名裝入到簽名緩沖區(qū)中(610),解析器子系統(tǒng)301繼續(xù)進行到圖7以完成簽名產生方法。
現(xiàn)在參考圖7,該方法從701開始。簽名緩沖和模式結點元素可用(702)。解析器子系統(tǒng)301裝入下一個模式結點元素。如果裝入成功(測試704)則表明還有更多結點,解析器子系統(tǒng)301在705中根據(jù)在元素數(shù)據(jù)庫中的模式結點中發(fā)現(xiàn)的散列元素對簽名緩沖區(qū)元素進行散列。由此產生的簽名和散列在706中被打包在一起。在707中解析器子系統(tǒng)301移到在703中裝入的下一個分組組件。
703到707循環(huán)繼續(xù)執(zhí)行直到其它沒有元素模式剩下為止(測試704)。一旦所有的元素模式都被進行了散列,解析器子系統(tǒng)的方法304、306和312也就完成了。解析器子系統(tǒng)301已經產生了由分析器子系統(tǒng)303所用的簽名。
解析器記錄被裝入到分析器中,尤其要以UFKB記錄形式裝入到UFKB中,UFKB記錄與解析器記錄相似,但有一個或多個不同的字段。
圖8是描述實現(xiàn)查找操作314的查找/更新引擎(LUE)的操作的流程圖。該方法在801從帶著包括簽名、散列和至少部分有效負載的解析器記錄的圖7開始。在802中它們都以緩沖區(qū)中的UFKB-記錄形式顯示。LUE,即查找引擎從流-入口的散列信息計算“記錄存儲柜編號”。這里的存儲柜可以有一個或多個“存儲桶”,每個存儲桶包含一個流-入口。優(yōu)選實施方案中每個存儲柜有四個存儲桶。
既然優(yōu)選的硬件實施方案包括高速緩存器,就規(guī)定圖8的流程圖中對記錄的所有數(shù)據(jù)訪問都是通過高速緩沖存儲器進行。
這樣,在804中,系統(tǒng)用散列在高速緩存器中查找來自那個存儲柜的存儲桶。如果高速緩存器從存儲柜編號成功返回一個存儲桶,表明該存儲柜中還有更多存儲桶,查找/更新引擎比較(807)當前簽名(UFKB-記錄的簽名)和存儲桶中的簽名(即流-入口簽名)。如果簽名相匹配(測試808),就在810步把記錄(在高速緩存器中)標記為“進行中”并加上時間戳。811步向UFKB指示802中的UFKB-記錄有“找到”狀態(tài)?!罢业健睒擞浽试S狀態(tài)處理開始處理這個UFKB元素。優(yōu)選的硬件實施方案包括一個或多個狀態(tài)處理器,這些處理器都可以和查找/更新引擎并行操作。
在優(yōu)選實施方案中,由計算器為被分析的每個分組執(zhí)行一組統(tǒng)計操作。統(tǒng)計操作可以包括對與這個流相關的分組進行多次計數(shù);確定與流的分組大小有關的統(tǒng)計信息;編譯關于每個方向上分組之間的差異的統(tǒng)計信息,例如使用時間戳;并確定同一方向上分組的時間戳的統(tǒng)計關系。統(tǒng)計測量結果保存在流-入口中。也可以編譯其它的統(tǒng)計測量。這些統(tǒng)計信息可以由統(tǒng)計處理器部件單獨或者結合使用以分析流的多個不同方面。包括從統(tǒng)計測量結果中確定網絡使用度量,例如確定網絡為這個應用傳輸信息的能力。這樣的分析為測量對話服務的質量、測量應用怎樣在網絡中執(zhí)行及測量應用所消耗的資源等作好了準備。
為了提供這樣的分析,查找/更新引擎在812步更新流-入口(在高速緩存器官)中的一個或多個計數(shù)器。方法在813退出。在我們的實施方案中,計數(shù)器包括流的總分組數(shù)、時間及從上一個時間戳到當前時間戳的微分時間。
可能該存儲柜的存儲桶并未產生匹配(測試808)。這種情況下,分析器在809中移動到這個存儲柜中的下一個存儲桶。804步再次在高速緩存器中查找來自那個存儲柜的另一個存儲桶。查找/更新引擎就這樣繼續(xù)查找該存儲柜中的存儲桶直到在808中有一個匹配或者操作804失敗(測試805)為止,表明在這個存儲柜中已經沒有其它的存儲桶而且沒有發(fā)現(xiàn)匹配的存儲桶。
如果沒有發(fā)現(xiàn)匹配,那么該分組就屬于一個新(以前未曾遇到過的)的流。在806中系統(tǒng)指示統(tǒng)一流鍵緩沖區(qū)中這個分組的記錄為新,并在812中通過更新高速緩存器中的流-入口為這個分組執(zhí)行統(tǒng)計更新操作。更新操作在813結束。流插入/刪除引擎(FIDE)為這個流創(chuàng)建一個新的記錄(再次通過高速緩存器)。
這樣,更新/查找引擎以該分組的UFKB-記錄帶著“新”或“找到”狀態(tài)結束。
注意上述系統(tǒng)使用多個流-入口都能夠匹配的散列??梢允褂酶L的散列對應于單一流-入口。在這樣一個實施方案中簡化了圖8的流程圖,對那些本領域的技術人員來說應該清楚這一點。
硬件系統(tǒng)現(xiàn)在根據(jù)圖10和圖11描述系統(tǒng)中數(shù)據(jù)流所經過的每個單獨的硬件單元。注意,盡管我們正在描述圖3的發(fā)明實施方案的特定硬件實現(xiàn),但那些本領域的技術人員應該理解圖3中的流程也可用運行在一個或多個通用處理器上的軟件實現(xiàn),或者只用硬件實現(xiàn)一部分。本發(fā)明的實現(xiàn)可以在圖14所示的軟件中操作。雖然圖14的軟件系統(tǒng)適用于低速網絡,但硬件實施方案(圖10和11)可以在每秒超過一千萬個分組的網絡上進行操作。本領域的技術人員應該明白隨著處理器變得越來越快系統(tǒng)中可以有越來越多的部分用軟件實現(xiàn)。
圖10是對用硬件實現(xiàn)的解析器子系統(tǒng)(301,這里顯示為子系統(tǒng)1000)的描述。存儲器1001是模式識別數(shù)據(jù)庫存儲器,其中存儲了將要分析的模式。存儲器1002是提取-操作數(shù)據(jù)庫,其中存儲了提取指令。1001和1002都符合圖3中的內部數(shù)據(jù)結構308。通常,從微處理器(未顯示)初始化該系統(tǒng)并同時經由內部總線1003和1004通過主機接口多路復用器裝載這些存儲器。注意1001和1002的內容優(yōu)先由圖3中的編譯方法310獲得。
分組使用控制信號1021和1023經由1012進入解析系統(tǒng)并到達解析器輸入緩沖區(qū)存儲器中,1021和1023控制輸入緩沖區(qū)接口控制器1022。緩沖區(qū)1008和接口控制1022連接到一個分組攔截設備(未顯示)。緩沖區(qū)攔截設備產生分組開始信號1021且接口控制1022產生下一分組(即準備接收分組)信號1023以控制數(shù)據(jù)流進入解析器輸入緩沖區(qū)存儲器1008。一旦分組開始裝入緩沖區(qū)存儲器1008,模式識別引擎(PRE)1006就在圖3的304框中描述的輸入緩沖區(qū)存儲器上執(zhí)行操作。也就是確定分組中存在的每個協(xié)議層的協(xié)議類型和相關報頭信息。
PRE查找數(shù)據(jù)庫1001和緩沖區(qū)1008中的分組以識別分組所包含的協(xié)議。在一種實現(xiàn)中,數(shù)據(jù)庫1001包括一組鏈接在一起的查找表。每個查找表用八位尋址。第一個查找表總在地址零上。模式識別引擎使用來自控制寄存器的基本分組位移以啟動比較過程。它把這個值裝入當前位移指針(COP)中。隨后從解析器輸入緩沖區(qū)讀取基本分組位移處的字節(jié)并用它作為進入第一個查找表的地址。
每個查找表返回一個鏈接到其它查找表的字或者返回一個結束標志。如果查找產生了識別事件那么數(shù)據(jù)庫也返回一個限選器命令。最后返回該值并把它添加到COP上。
PRE 1006包括一個比較引擎。比較引擎第一步檢查協(xié)議類型字段以確定是否是一個802.3分組并且該字段應該被作為長度對待。如果它不是長度,就在第二步中檢查協(xié)議。第一步只是協(xié)議層,而協(xié)議層是不可編程的。第二步有兩個為將來的協(xié)議增加而定義的完整的16位相聯(lián)存儲器(CAMs)。
這樣,無論何時只要PRE識別出了一個模式,它都要產生一個提取引擎(也稱為“限選器”)1007命令。識別出的模式和命令被送往提取引擎1007,它從分組中提取信息以構造解析器記錄。這樣,提取引擎的操作就是在圖3的框306和312中執(zhí)行的操作。命令以提取指令指針的形式從PRE1006送往限選器1007,命令提取指針告訴提取引擎1007在提取操作數(shù)據(jù)庫存儲器(即限選器指令數(shù)據(jù)庫)中的什么地方找到指令。
這樣,當PRE1006識別出一個協(xié)議時它把協(xié)議標識符和方法代碼都輸出給提取器。協(xié)議標識符被添加到流簽名上,方法代碼用于從指令數(shù)據(jù)庫1002中取出第一個指令。指令包括一個操作碼,通常還包括源和目的地址以及長度。位移和長度都以字節(jié)表示。典型的操作是MOVE指令。這個指令告訴限選器1007把n個字節(jié)的數(shù)據(jù)不加任何更改從輸入緩沖區(qū)1008復制到輸出緩沖區(qū)1010。提取器包含一個按字節(jié)移動裝置,因此能夠把被移動的字節(jié)打包進流簽名中。提取器還包含另一個稱為HASH的指令。這個指令告訴提取器從輸入緩沖區(qū)復制數(shù)據(jù)到HASH發(fā)生器。
這樣這些指令就用于提取輸入緩沖區(qū)存儲器中的分組的選中單元并把數(shù)據(jù)傳送到解析器輸出緩沖區(qū)存儲器1010。一些指令還產生散列。
提取引擎1007和PRE以流水方式進行操作。也就是說,提取引擎1007在輸入緩沖區(qū)1008中已經由PRE1006處理過的的數(shù)據(jù)上執(zhí)行提取操作,而PRE1006同時正在解析其它(即后來到達的)分組。這種操作方式所提供的高處理速度足以應付分組到達的高速率。
一旦分組中所有用來形成分組簽名的選中部分都被提取出來,就把散列裝載到解析器輸出緩沖區(qū)存儲器1010中。還包括進一步的分析所要求的來自分組的任意附加有效負載。解析器輸出存儲器1010通過分析器接口控制1011與分析器子系統(tǒng)相接。一旦分組中的所有信息都在解析器輸出緩沖區(qū)存儲器1010中,就由分析器接口控制確認數(shù)據(jù)就緒信號1025。當分析器就緒信號1027被確認時就通過1013把來自解析器子系統(tǒng)1000的數(shù)據(jù)移動到分析器子系統(tǒng)中。
圖11顯示了硬件部件和分析器子系統(tǒng)的數(shù)據(jù)流,分析器子系統(tǒng)執(zhí)行圖3中的分析器子系統(tǒng)303的功能。在操作之前要對分析器進行初始化,初始化包括把由編譯方法310產生的狀態(tài)處理信息裝載到數(shù)據(jù)庫存儲器中用于狀態(tài)處理,也稱為狀態(tài)處理器指令數(shù)據(jù)庫(SPID)存儲器1109。
分析器子系統(tǒng)1100包括使用分析器主機接口控制器118的主機總線接口1122,它們依次訪問高速緩存器系統(tǒng)1115。高速緩存器系統(tǒng)對系統(tǒng)1108的狀態(tài)處理器進行雙向訪問。狀態(tài)處理器負責從主機總線接口1122上給出的信息初始化狀態(tài)處理器指令數(shù)據(jù)庫存儲器1109。
隨著SPID 1109的裝載,分析器子系統(tǒng)1100把來自解析器并包括分組簽名和有效負載的解析器記錄接收到統(tǒng)一流鍵緩沖區(qū)(UFKB)1103中。UFKB由可設置用來保存UFKB記錄的存儲器組成。UFKB記錄基本上就是解析器記錄;UFKB保存將要處理或正在處理的分組記錄。此外,UFKB還提供一個或多個字段用作可修改狀態(tài)標志以允許不同的方法并發(fā)運行。
三個處理引擎并發(fā)運行并訪問UFKB 1103中的記錄查找/更新引擎(LUE)1107、狀態(tài)處理器(SP)1108和流插入和刪除引擎(FIDE)1110。這些引擎中的每一個都可以用一個或多個有限狀態(tài)機(FSM’s)實現(xiàn)。在每個有限狀態(tài)機和統(tǒng)一流鍵緩沖區(qū)1103之間都有雙向訪問。UFKB記錄包括存儲分組序號的字段,和另一個以狀態(tài)處理器1108的程序計數(shù)器形式用狀態(tài)信息進行填充的字段,狀態(tài)處理器實現(xiàn)狀態(tài)處理328。任意記錄的UFKB中的狀態(tài)標志包括LUE完成標志和標記LUE正在向狀態(tài)處理器傳送對記錄的處理的標志。LUE完成指示器還用來指示LUE的下一個記錄。還提供了一個標志來指示狀態(tài)處理器完成了對當前流的操作并指示用于狀態(tài)處理器的下一個記錄是什么。還提供了一個標志來指示狀態(tài)處理器正在傳送UFKB-記錄的處理到流插入和刪除引擎。
新的UFKB記錄由LUE 1107處理。已經由LUE 1107處理過的記錄可以由狀態(tài)處理器1108進行處理,UFKB記錄數(shù)據(jù)可以在狀態(tài)處理器1108處理之后由流插入/刪除引擎1110進行處理或者只由LUE進行處理。特定引擎是否已經被應用到任意統(tǒng)一流鍵緩沖區(qū)記錄上由該引擎在操作完成時設置的狀態(tài)字段來確定。在一種實施方案中,UFKB-記錄中的一個狀態(tài)標志指示記錄是新的或找到的。在其它實施方案中,LUE產生一個標志以把記錄傳遞到狀態(tài)處理器進行處理,并且新記錄所要求的操作也包含在SP指令中。
注意每個UFKB-記錄可能需要由全部三個引擎進行處理。此外,一些UFKB記錄可能需要由某個特定引擎進行多次處理。
這三個引擎中的每一個都對包括超高速緩存引擎的高速緩存器子系統(tǒng)1115進行雙向訪問。高速緩存器1115被設計用來使信息能夠在系統(tǒng)中的五個不同點之間流入流出,這五個點是三個引擎、經由統(tǒng)一存儲器控制(UMC)1119和存儲器接口1123的外部存儲器、以及經由分析器主機接口和控制單元(ACIC)1118和主機接口總線(HIB)1122的微處理器。這樣分析器微處理器(或者專用邏輯處理器)就能夠在高速緩存器中直接插入或修改數(shù)據(jù)。
高速緩存器子系統(tǒng)1115是一個相聯(lián)存儲器,包括一組相聯(lián)存儲器單元(CAMs),每個相聯(lián)存儲器單元包括地址部分和指向高速緩沖存儲器(例如RAM)的指針部分,高速緩沖存儲器中包含高速緩存的流-入口。CAMs被按照自頂至底的順序排列成棧。底部CAM的指針指向最近最少使用(LRU)的高速緩沖存儲器記錄。無論任何時候只要發(fā)生了高速緩沖存儲器缺失,底部CAM所指向的高速緩沖存儲器的內容就被來自流-入口數(shù)據(jù)庫324的流-入口所取代。這個記錄現(xiàn)在變成了最近使用過的記錄,因此底部CAM的內容被移到頂部并且所有的CAM內容均向下移動。這樣,高速緩存器就成為使用真正的LRU替換策略的相聯(lián)高緩沖存器。
LUE 1107首先處理UFKB-記錄,并基本上執(zhí)行圖3的314和316框中的操作。提供一個信號給LUE以指示一個“新”的UFKB-記錄可用。LUE用UFKB-記錄中的散列從高速緩存器讀取一個相當于四個存儲桶的匹配存儲柜。如果匹配存儲柜不在高速緩存器中,高速緩存器1115就向UMC 1119發(fā)出請求以從外部存儲器引入相匹配的存儲柜。
當用散列方法找到一個流-入口時,LUE 1107查看每個存儲桶并用它的簽名和UFKB-記錄的簽名進行比較直到找到一個匹配或者沒有其它存儲桶剩下為止。
如果沒有匹配,或者從高速緩沖存儲器提供流-入口的存儲柜失敗,就在UFKB記錄的流鍵中設置一個時間戳,用編譯方法310在初始化期間裝載的一個表格進行協(xié)議識別和狀態(tài)確定,該記錄的狀態(tài)被設置為指示LUE已經處理過該記錄,并做出該UFKB-記錄準備好起動狀態(tài)處理的指示。識別和狀態(tài)確定產生一個協(xié)議標識符,它在優(yōu)選實施方案中是狀態(tài)處理器的“跳轉向量”,由UFKB為這個UFKB-記錄保存它,并由狀態(tài)處理器用來起動針對特定協(xié)議的狀態(tài)處理。例如,跳轉向量跳轉到用于處理該狀態(tài)的子程序。
如果有匹配,表明該UFKB-記錄中的分組是以前遇到過的流的,然后計算器部件輸入存儲在流-入口中的一個或多個統(tǒng)計測量,包括時間戳。另外,可以存儲自上次存儲的時間戳以來的時間差并更新分組計數(shù)。通過查看存儲在數(shù)據(jù)庫324的流-入口中的協(xié)議標識符對流-入口對從該流-入口獲得的流狀態(tài)進行檢查。如果該值指示不需要其它分類,那么該記錄的狀態(tài)就被設置成指示LUE已經處理過該記錄。在優(yōu)選實施方案中,協(xié)議標識符是狀態(tài)處理器到一個對該協(xié)議進行狀態(tài)處理的子程序的跳轉向量,并且在優(yōu)選實施方案中跳轉向量為零指示沒有其它分類。如果協(xié)議標識符指示更多處理,那么就做出該UFKB-記錄準備起動狀態(tài)處理的指示并把該記錄的狀態(tài)設置成指示LUE已經處理過了該記錄。
狀態(tài)處理器1108在LUE完成之后根據(jù)UFKB-記錄處理高速緩存器中的信息。狀態(tài)處理器1108包括狀態(tài)處理器程序計數(shù)器SPPC,它產生由編譯方法310在初始化期間裝載的狀態(tài)處理器指令數(shù)據(jù)庫1109中的地址。它8包含產生SPID地址的指令指針(SPIP)。指令指針可以增加或者從推動條件轉移的跳轉向量多路復用器裝載。SPIP可以從下列三個來源裝載(1)來自UFKB的協(xié)議標識符,(2)來自當前解碼后的指令的立即跳轉向量,或者(3)由狀態(tài)處理器中包含的算術邏輯單元(SPALU)所提供的值。
這樣,在LUE把流鍵和已知協(xié)議標識符放在UFKB中之后,由解析器用識別出的最后一個協(xié)議對程序計數(shù)器進行初始化。這第一個指令是跳轉到一個對解碼出的協(xié)議進行分析的子程序。
狀態(tài)處理器ALU(SPALU)包含所有必要的算術、邏輯和字符串比較功能以實現(xiàn)狀態(tài)處理器指令。SPALU的主要部分是A和B寄存器、指令解碼&狀態(tài)機、字符串引用存儲器查找引擎、輸出數(shù)據(jù)寄存器和輸出控制寄存器。
查找引擎依次包含目標查找寄存器集、引用查找寄存器集和通過對兩個操作數(shù)進行異或操作以對它們進行比較的比較塊。
這樣,在UFKB設置了程序計數(shù)器之后,就在狀態(tài)處理器中執(zhí)行一序列一個或多個狀態(tài)操作以為這個特定分組進一步分析流鍵緩沖區(qū)記錄中的分組。
圖13描述了狀態(tài)處理器1108的操作。在1301帶著要處理的統(tǒng)一流鍵緩沖區(qū)記錄進入狀態(tài)處理器。UFKB-記錄是新的或者與對應于一個找到的流-入口。這個UFKB-記錄是在1301步從統(tǒng)一流鍵緩沖區(qū)1103得到的。在1303,該UFKB-記錄的協(xié)議標識符被用來設置狀態(tài)處理器的指令計數(shù)器。狀態(tài)處理器1108通過把解析器子系統(tǒng)301識別出的最后一個協(xié)議用作跳轉表中的位移來啟動該方法。跳轉表把我們帶到用于那個協(xié)議的指令。多數(shù)指令測試某物是否在統(tǒng)一流鍵緩沖區(qū)或者流-入口中,如果流-入口存在的話。狀態(tài)處理器1108必須測試位、進行比較、加或法操作以執(zhí)行測試。
第一個狀態(tài)處理器指令是在1304步從狀態(tài)處理器指令數(shù)據(jù)庫存儲器1109中取出的。狀態(tài)處理器執(zhí)行一個或多個取出的操作(1304)。在我們的實施方案中,每個單個的狀態(tài)處理器指令是非常簡單的(例如,移動、比較等),因此需要在每個統(tǒng)一流鍵緩沖區(qū)記錄上執(zhí)行許多這樣的指令。狀態(tài)處理器的一個方面是它能在UFKB記錄的有效負載部分中查找一個或多個(最高達四個)引用字符串。這由狀態(tài)處理器中引擎部件響應特殊查找指令實現(xiàn)。
在1307中執(zhí)行檢查以確定對該分組是否還有任意其它的指令要執(zhí)行。如果有,就在1308中由系統(tǒng)設置狀態(tài)處理器指令指針(SPIP)以得到下一個指令。SPIP可以由當前已經解碼的指令中的立即跳轉設置,或者在處理過程中由SPALU提供一個值。
下一個要執(zhí)行的指令現(xiàn)在已經取出來(1304)用于執(zhí)行了。13047和1307之間的這個循環(huán)繼續(xù)進行直到沒有其它要執(zhí)行的指令為止。
在這一步,在1309中檢查在這個特定分組上所做的處理是否已經導致了一個終結狀態(tài)。如果是,表明分析器不僅已經對這個分組而且對這個分組所屬的整個流都完成了處理,并且該流已被完全確認。如果實際上對這個流沒有其它狀態(tài)要處理,就在1311中由處理器終止處理。一些終結狀態(tài)可能需要把狀態(tài)放置在適當?shù)奈恢酶嬖V系統(tǒng)移除一個流—例如,如果連接從更低層的連接標識符消失。假如那樣的話就在1311中設置流移除狀態(tài)并把它保存在流-入口中。流移除狀態(tài)可以是NOP(無操作)指令,意味著沒有移除指令。
一旦設置并保存了為這個流指定的適當?shù)牧饕瞥噶?NOP指令或相反),該方法就在1313結束。狀態(tài)處理器1108現(xiàn)在可以得到另一個統(tǒng)一流鍵緩沖區(qū)記錄進行處理。
如果在1319確定對這個流所做的處理還未完成,那么系統(tǒng)就在1310步把狀態(tài)處理器指令指針存儲在當前流-入口中。這將是LRE1107在下一次執(zhí)行的下一個操作,以在UFKB中找到區(qū)配這個流的分組?,F(xiàn)在處理器在1313退出對這個特定的統(tǒng)一流鍵緩沖區(qū)記錄進行的處理。
注意狀態(tài)處理更新了統(tǒng)一流鍵緩沖區(qū)1103中的信息和高速緩存器中的流-入口。一旦狀態(tài)處理器執(zhí)行完畢,就在UFKB中為該記錄設置一個標志,指示狀態(tài)處理器已經完成了操作。此外,如果該流需要從流數(shù)據(jù)庫插入或刪除,就為這個流簽名和分組記錄把控制傳遞到流插入/刪除引擎。這由狀態(tài)處理器完成,狀態(tài)處理器在UFKB中為這個UFKB-記錄設置另一個標志,指示狀態(tài)處理器正在把對這個記錄的處理傳遞給流插入和刪除引擎。
流插入和刪除引擎1110負責維護流-入口數(shù)據(jù)庫。尤其負責在流數(shù)據(jù)庫中創(chuàng)建新流,以及從數(shù)據(jù)庫中刪除流以使它們能夠被重新使用。
現(xiàn)在借助圖12描述流插入方法。用散列值把流組合成由存儲桶組成的存儲柜。該引擎處理可能是新的或者狀態(tài)處理器已經另外指示其為需要創(chuàng)建的UFKB-記錄。圖12顯示了正在被創(chuàng)建的新記錄的情況。在1203步得到一個對話記錄存儲柜(優(yōu)選包含4個存儲桶,用于4個記錄)。這是一個與UFKB中的散列值匹配的存儲桶,因此這個存儲桶可能已經由LUE為該UFKB-記錄找到了。在1204步FIDE1110請求保存在高速緩存器系統(tǒng)1115中的記錄存儲柜/存儲桶。如果在1205步中高速緩存器系統(tǒng)1115指示該存儲柜/存儲桶是空的,就在1207把該流簽名(用散列)插入到存儲桶中并在高速緩存器1115的高速緩存器引擎中用一個時間戳把該存儲桶標記為“用過”,該時間戳在這個方法中自始至終都被維護起來。在1209中,F(xiàn)IDE 1110比較存儲柜和存儲桶記錄流簽名和分組以核實所有的元素都在合適的位置以完成該記錄。在1211中系統(tǒng)把記錄存儲柜和存儲桶標記為“處理中”并在高速緩存器中(并因此在外部存儲器中)標記為“新”。在1212中,在高速緩存器系統(tǒng)中設置該流-記錄的初始統(tǒng)計測量,并且可以為在特定的流中所見到的第一個分組執(zhí)行分析器所要求的用于統(tǒng)計操作的其它程序。
回到1205步,如果該存儲桶非空,F(xiàn)IDE 110就請求高速緩存器系統(tǒng)中這個特定的存儲柜的下一個存儲桶。如果成功,就為這下一個存儲桶反復執(zhí)行1207、1209、1211和1212中的過程。在1208,如果沒有有效存儲桶,就把該分組的統(tǒng)一流鍵緩沖區(qū)記錄設置為“丟失”,表明系統(tǒng)無法處理該特定分組,因為系統(tǒng)中沒有剩余的存儲桶。該方法在1213退出。FIDE 1110向UFKB指示對這個UFKB-記錄的流插入和刪除操作已經完成。這還導致UFKB向FIDE提供下一個UFKB記錄。
一旦需要用來訪問并控制特定分組和它的流簽名的所有引擎在一個統(tǒng)一流鍵緩沖區(qū)記錄上完成了一組操作,該統(tǒng)一流鍵緩沖區(qū)記錄就被標記為“完成”。隨后該元素將被解析器接口用于從解析和提取系統(tǒng)到達的下一個分組和流簽名。
所有的流-入口都保存在外部存儲器中,有一些還保存在高速緩存器1115中。高速緩沖存儲器系統(tǒng)1115。高速緩沖存儲器系統(tǒng)1115的智能足以訪問流數(shù)據(jù)庫并理解存在于存儲器接口另一端上的數(shù)據(jù)結構。查找/更新引擎1107能夠請求高速緩存器系統(tǒng)把特定的流或流的“存儲桶”從統(tǒng)一存儲控器控制1119取到高速緩存器系統(tǒng)中以便進一步處理。狀態(tài)處理器1108能夠操作依靠查找/更新引擎請求在高速緩存器系統(tǒng)中找到的信息,并且如果請求是根據(jù)統(tǒng)一流鍵緩沖區(qū)1103中的信息流插入/刪除引擎1110能夠在高速緩存器系統(tǒng)中創(chuàng)建新記錄。高速緩存器通過存儲器接口1123和統(tǒng)一存儲器控制1119從存儲器獲得所請求的信息,并通過存儲控制器1119更新所請求的信息。
對特定的硬件實現(xiàn)有幾個通往圖11的模塊之外的系統(tǒng)部件的接口。這些接口包括主機總線接口1122,它被設計成通用接口,可以和像微處理器或多路復用器(MUX)系統(tǒng)這樣任意類型的外部處理系統(tǒng)一起操作。因此,可以把圖11和12中的整個流量分類系統(tǒng)連接到一些其它處理系統(tǒng)之中以管理分類系統(tǒng)并提取由系統(tǒng)產生的數(shù)據(jù)。
存儲器接口1123被設計用來和想用來存儲流-入口的任意存儲器相接??梢允褂貌煌愋偷拇鎯ζ飨到y(tǒng),像隨機訪問存儲器(DRAM)、同步DRAM、同步圖形DRAM、靜態(tài)訪問存儲器(SRAM)等等。
圖10還包括一些“通用”接口。有一個分組輸入接口1012-和輸入緩沖區(qū)接口控制1022的信號一起工作的通用接口。這些接口被設計成能夠和任意類型的通用系統(tǒng)一起使用,然后這些通用系統(tǒng)可以向解析器提供分組信息。另一個通用接口各自進出主機接口多路復用器和控制寄存器1005的流水線接口1031和1033。這使得解析系統(tǒng)可以由外部系統(tǒng)進行管理,例如微處理器或其它種類的外部邏輯,并且使外部系統(tǒng)可以對解析器編程或者進行控制。
本發(fā)明的這個方面的優(yōu)選實施方案是用像VHDL或Verilog這樣的硬件描述語言(HDL)進行描述的。用HDL對它進行設計和創(chuàng)建以使它可被用作單一芯片系統(tǒng)或者被集成到另一個通用系統(tǒng)之中,該通用系統(tǒng)被設計用于與在網絡中創(chuàng)建并分析流量有關的目的。Verilog或其它HDL實現(xiàn)只是描述硬件的一個方法。
根據(jù)硬件實現(xiàn),圖10中所示的單元用一組六字段可編程邏輯陣列(FPGA’s)實現(xiàn)。這些FPGA’s的分界如下。圖10中的解析子系統(tǒng)實現(xiàn)為兩個FPGAS;一個FPGAS包括塊1006、1008、1012、部分1005以及存儲器1001;第二個FPGA包括1002、1007、1013、1011和部分1005。參考圖11,統(tǒng)一查找緩沖區(qū)1103實現(xiàn)為一個單獨的FPGA。狀態(tài)處理器和部分狀態(tài)處理器指令數(shù)據(jù)庫存儲器1109是另一個FPGA。部分狀態(tài)處理器指令數(shù)據(jù)庫存儲器1109保存在外部SRAM’s中。查找/更新引擎1107和流插入/刪除引擎1110在另一個FPGA中。第六個FPGA包括高速緩存器系統(tǒng)1115、統(tǒng)一存儲器控制1119和分析器主機接口及控制1118。
注意可以把系統(tǒng)實現(xiàn)成一個或多個VSLI設備,而不是一組像FPGA’s這樣的特定用途集成電路(ASIC’s)。希望將來設備集成度繼續(xù)提高,以致于整個系統(tǒng)能夠最終構成一個更大的單一芯片單元上的一個子單元(“核心”)。
發(fā)明操作圖15顯示了網絡監(jiān)控器300的實施方案怎樣被用來分析網絡102中的流量。分組攔截設備1502攔截來自網絡102上的連接點121的所有分組以使在任意方向上通過點121的分組都可以提供給監(jiān)控器300。監(jiān)控器300包括解析器子系統(tǒng)301,它確定流簽名;和分析器子系統(tǒng)303,它分析每個分組的流簽名。存儲器324用來存儲由監(jiān)控器300確定并更新的流數(shù)據(jù)庫。主機1504用來分析存儲器324中的流,它可以是任意處理器,例如一個通用計算機。通常主機1504包括一個存儲器,稱為RAM,圖中顯示為主機存儲器1506。另外,主機可以包含磁盤。在一種應用中,主機可以從RMON探測開始,這種情況下主機連接到網絡接口卡1510上,網絡接口卡1510又連接到網絡102。
本發(fā)明的優(yōu)選實施方案由可選的簡單網絡管理協(xié)議(SNMP)實現(xiàn)所支持。圖15描述了怎樣實現(xiàn)RMON探測,其中網絡接口卡用來向網絡發(fā)送RMON信息。商業(yè)SNMP實現(xiàn)也可以使用,并且使用這樣的實現(xiàn)可以簡化把本發(fā)明的優(yōu)選實施方案移植到任意平臺上的方法。
另外,MIB編譯器也可以使用。MIB編譯器是一個能夠大大簡化對專用MIB擴展的創(chuàng)建和維護的工具。
分組說明實例監(jiān)控器300,尤其是分析器303能夠對通常被稱為“服務器通告”類型交換的分組交換執(zhí)行狀態(tài)分析。服務器通告是用來簡化帶有多個應用的服務器之間的通信的方法,這些應用都可以從多個客戶機同時訪問。許多應用采用服務器通告作為把單一端口或套接字多路復用到許多應用和服務的手段。采用這種類型的交換,可以在網絡上用廣播或多播途徑發(fā)送消息來宣告一個服務器或應用,并且網絡中的所有站點都可以接收到這些消息并對它們進行解碼。該消息能夠使站點獲得一個合適的連接點以對特定應用和特定服務器通信。采用服務器通告方法,特定應用用服務通道以IP協(xié)議組中的TCP或UDP套接字或端口的形式進行通信,或者用Novell IPX協(xié)議組中的SAP進行通信。
分析器303還能夠執(zhí)行分組交換的“流內分析”?!傲鲀确治觥狈椒梢杂米鲋髯R別方法或第二識別方法。作為主方法,流內分析幫助提取用來進一步識別特定應用和應用組件的詳細信息。流內分析的一個很好的實例是任意基于Web的應用。例如,通用點播Web信息應用就可以這種方法進行識別;在點播服務器和客戶機之間的初始連接過程中,數(shù)據(jù)交換中存在特定的鍵標記將導致產生簽名以識別點播。
流內分析方法也可以和服務器通告方法結合起來。很多情況下流內分析將增強其它識別方法。在像SAP和BAAN這樣的商業(yè)應用中可以找到把流內分析和服務器通告結合起來的實例。
“會話追蹤”也是已知追蹤客戶機/服務器分組交換中的應用的一種主要方法。追蹤會話方法需要一個到預定義套接字和端口號的初始連接。這個通信方法用在多種傳輸層協(xié)議中。在IP協(xié)議的TCP和UDP傳輸協(xié)議中最為常見。
在會話追蹤過程中,客戶機用特定端口號和套接字向服務器發(fā)出請求。這個初始請求導致服務器創(chuàng)建一個TCP或UDP端口以在客戶機和服務器之間交換剩下的數(shù)據(jù)。隨后服務器用這個新創(chuàng)建的端口對客戶機的請求做出應答??蛻魴C用來向服務器建立連接的原始套接字在這個數(shù)據(jù)交換過程中將不再使用。
會話追蹤的一個實例是TFTP(一般文件傳輸協(xié)議),TCP/IP FTP協(xié)議沒有目錄和口令功能的版本。在TFTP的客戶機/服務器交換過程中,特定端口(端口號69)總是用來初始化分組交換。這樣,當客戶機開始通信過程時,就向UDP端口69發(fā)送一個請求。一旦服務器接收到這個請求,就在服務器上創(chuàng)建一個新端口號。隨后服務器用這個新端口向客戶機發(fā)送應答。在這個例子中,非常清楚的是,為了識別TFTP網絡監(jiān)控器分析來自客戶機的初始請求并為它產生一個簽名。監(jiān)控器300使用這個簽名來識別應答。監(jiān)控器300還分析來自服務器帶有關鍵端口信息的應答,并送它創(chuàng)建簽名以監(jiān)控這個數(shù)據(jù)交換的其余分組。
網絡監(jiān)控器300還能夠理解網絡中特定連接的當前狀態(tài)。面向連接的交換通常受益于狀態(tài)追蹤以正確地識別應用。一個實例是通用TCP傳輸協(xié)議,它提供了一個在客戶機和服務器之間發(fā)送信息的可靠方法。當初始化數(shù)據(jù)交換時,發(fā)送一個同步TCP請求。這個消息包含用來追蹤來自服務器的應答的特定序號。一旦服務器確認了同步請求,就可以在客戶機和服務器之間交換數(shù)據(jù)。當不再需要通信時,客戶機向服務器發(fā)送一個結束或完成消息,服務器用包含了來自請求的序號的應答確認這個結束請求。這樣一個面向對象的交換的狀態(tài)與多種類型的連接和維護消息有關。
服務器通告實例服務器通告協(xié)議的單個方法有所不同。但基本的底層方法是相同的。向網絡中的一個或多個客戶機發(fā)送典型的服務器通告消息。這種類型的服務器消息有特定內容,在本發(fā)明的另一方面中得到了應用并且保存在系統(tǒng)的流-入口數(shù)據(jù)庫中。因為該通告被送往一個或多個站點,將來可能與服務器有分組交換的客戶機將假定所通告的信息是已知的,并且所發(fā)明的監(jiān)控器的一個方面是它也做同樣的假定。
Sun-RPC是由Sun微系統(tǒng)公司(帕洛阿爾托,加利福尼亞州)實現(xiàn)的遠程過程調用(RPC),是一個允許一個程序使用遠程機器上另一程序的服務的編程接口?,F(xiàn)在用一個Sun-RPC實例來解釋監(jiān)控器300怎樣捕獲服務器通告。
希望使用服務器或程序的遠程程序或客戶必須建立一個連接,可以用RPC協(xié)議做到這一點。
每個運行Sun-RPC協(xié)議的服務器必須維護一個方法和稱為端口映射表的數(shù)據(jù)庫。端口映射表在Sun-RPC程序或應用和TCP或UDP套接字或端口(對TCP或UDP實現(xiàn))之間創(chuàng)建一個直接連接。應用或程序編號是由ICANN()分配的一個32位唯一標識符,ICANN管理與Internet協(xié)議有關的大量參數(shù)(端口號、路由器協(xié)議、多播地址等)。Sun-RPC服務器上的每個端口映射表通過使用特殊請求或直接通告給出在唯一程序編號和特定傳輸套接字之間的映射。根據(jù)ICANN,端口號111與Sun RPC相連。
作為一個實例,考慮客戶機(例如,圖1中顯示為106的CLENT 3)在預定義的UDP或TCP套接字上向服務器(例如,圖1中顯示為110的SERVER 2)發(fā)出一個特定請求。一旦Sun RPC服務器上的端口映射表方法接收到該請求,就在對客戶機的直接應答中返回該特定映射。
1.客戶機(圖1中的CLIENT 3,106)在端口111上向SERVER 2(圖1中的110)發(fā)送一個TCP分組,帶有RPC綁定查找請求(rpcBindLookup)。TCP或UDP端口111總是與Sun RPC相連。這個請求指定程序(以程序標識符)、版本,并且可以指定協(xié)議(UDP或TCP)。
2.服務器SERVER 2(圖1中的110)從該請求中提取出程序標識符和版本標識符。服務器還利用這樣的事實這個分組使用TCP傳輸進來并且沒有指定協(xié)議。這樣對它的應答將使用TCP協(xié)議。
3.服務器110向端口號111發(fā)送一個TCP分組,帶有RPC綁定查找應答。該應答包含在其上接收特定RPC程序標識符(例如,程序‘program’)和協(xié)議(UDP或TCP)的將來事務的特定端口號(例如,端口號‘port’)。
希望從現(xiàn)在開始每次都使用端口號‘port’,分組與應用程序‘program’相連直到端口號‘port’不再與程序‘program’相連為止。監(jiān)控器300通過創(chuàng)建流-入口和簽名而擁有一個記憶交換的機制,使得它能夠把使用端口號‘port’的將來分組都與應用程序‘program’相連。
除了Sun RPC綁定查找請求和應答之外,還有其它一些特定程序—比如‘program’—可以與特定端口號相連的方式。一種是在應用服務和端口號之間的特定連接的廣播通告,稱為Sun RPC端口映射表通告。另一種是當一些服務器—比如同一SERVER 2—向一些客戶機—比如CLIENT 1—做出應答要求一些帶有RPC端口映射表應答的端口映射表分配時。其它一些客戶機—比如CLIENT 2—可能無意中看到了這個請求,這樣就知道了對特定的服務器SERVER 2端口號‘port’與應用服務‘program’相連。希望網絡監(jiān)控器300能夠把使用用端口號‘port’的SERVER 2的任意分組與應用程序‘program’相連。
圖9為Sun遠程過程調用描繪了在圖3的監(jiān)控器300中一些操作的數(shù)據(jù)流900。假設客戶機106(例如,圖1中的CLIENT 3)正在通過它到網絡的接口118和服務器110(例如,圖1中的SERVER 2)通過該服務器到網絡的接口116進行通信。進一步假定遠程過程調用被用來和服務器110進行通信。數(shù)據(jù)流900中的一條路徑是從910步由客戶機106發(fā)出的遠程過程調用綁定查找請求開始并以服務器狀態(tài)創(chuàng)建步驟904結束。這樣的RPC綁定查找請求包括要用的‘program’、‘version’和‘protocol’—如TCP或UDP—的值。網絡監(jiān)控器300中Sun RPC分析的方法包括下列方面●方法909提取‘program’、‘version’和‘protocol’(UDP或TCP)。提取TCP或UDP端口(方法909),該端口是111指示SunRPC。
●方法908對Sun RPC分組進行解碼。為ID檢查RPC類型字段。
如果該值是端口映射表,就保存成對套接字(即用于目的地址的dest,用于源地址的src)。對端口和映射進行解碼,保存帶有套接字/地址鍵的端口。對每個映射表分組可以有不只一對。來自簽名(例如,鍵)。在數(shù)據(jù)庫324中創(chuàng)建一個流-入口。
請求保存現(xiàn)在完成。
在后來的某個時間,服務器(方法907)發(fā)出一個RPC綁定查找應答。分組監(jiān)控器將從分組提取簽名并從以前存儲的流中識別它。監(jiān)控器將得到協(xié)議端口號(906)和查找請求(905)。將創(chuàng)建一個新簽名(即一個鍵)并在流-入口數(shù)據(jù)庫中把服務器狀態(tài)(904)的創(chuàng)建保存成由新簽名標識的一個記錄。這個簽名現(xiàn)在可以用來識別與服務器相連的分組。
不僅可以從綁定查找請求/應答對到達服務器狀態(tài)創(chuàng)建步驟904,而且可以從顯示為901的RPC應答端口映射表分組或顯示為902的RPC通告端口映射表到達它。遠程過程調用協(xié)議可以宣告它能夠提供特定應用服務。當客戶機和服務器之間發(fā)生交換時本發(fā)明的實施方案最好能夠分析并追蹤網絡中那些已經接收到服務通告的站點。
RPC通告端口映射表通告902是一個廣播。這導致不同的客戶機執(zhí)行一組相似的操作,例如保存從通告獲得的信息。RPC應答端口映射步驟901對端口映射器請求做出應答,并且應答也是一個廣播。它包括所有服務參數(shù)。
這樣監(jiān)控器300就創(chuàng)建并保存了用于后來與特定服務‘program’有關的流的分類的所有這樣的狀態(tài)。
圖2顯示了Sun RPC的實例中的監(jiān)控器300怎樣構造簽名和流狀態(tài)。例如,在示例Sun微系統(tǒng)遠程過程調用協(xié)議中交換的多個分組206-209。本發(fā)明的一種方法實施方案能夠從在分組206和207中找到的信息產生一對流簽名,“簽名-1”210和“簽名-2”212,分組206和207在這個實例中分別相當于Sun RPC綁定查找請求和應答。
考慮第一個Sun RPC綁定查找請求。假設分組206相當于從CLIENT 3發(fā)往SERVER 2的這樣一個請求。這個分組包含在根據(jù)本發(fā)明的一個方面構造簽名中要用到的重要信息。源和目的網絡地址占據(jù)了每個分組的頭兩個字段,并且依照模式數(shù)據(jù)庫308中的模式,流簽名(在圖2中顯示為KEY-1 230)也將包含這兩個字段,因此解析器子系統(tǒng)301將在簽名KEY-1(230)中包含這兩個字段。注意在圖2中,如果一個地址標識客戶機106(也顯示為202),那么圖中所用的標號是“C1”。如果這樣的地址標識服務器110(也顯示為服務器204),圖中所用的標號是“S1”。分組206中的頭兩個字段是214和215是“S1”和“C1”,因為分組206是由服務器110提供去往客戶機106的。假定對這個例子,“S1”在數(shù)值上小于“C1”。第三個字段“p1”216標識正在使用的協(xié)議,例如TCP、UDP等等。
在分組206中,第四個字段217和第五個字段218用來傳遞要用的端口。對話方向確定端口字段在哪里。字段217中的斜線圖案用來標識源端口模式,字段218中的交叉圖案用來標識目的端口模式。它們之間的次序指示客戶機-服務器消息方向。由“i1”219所指示的第六個字段是客戶機正在向服務器請求的一個元素。由“s1a”220所指示的第七個字段是客戶機向服務器110請求的服務。隨后的第八個字段“QA”221(用于問題標志)指示客戶機106想要知道用什么來訪問應用“s1a”。第十個字段“QP”223用來指示客戶機想讓服務器指示對特定的應用使用了什么協(xié)議。
分組206初始化分組交換的順序,例如發(fā)往SERVER 2的RPC綁定查找請求。它采用明確定義的格式,所有分組都是樣這樣,并在眾所周知的服務連接標識符(端口111指示Sun RPC)上被傳送到服務器110。
分組207是在從服務器到客戶機106的應答中第一個被發(fā)送的分組。它是作為請求分組206的結果的RPC綁定查找應答。
分組207包括十個字段224-233。目的和源地址在字段224和225,例如,分別由“C1”和“S1”指示。注意現(xiàn)在順序是顛倒的,因客戶機-服務器消息方向是從服務器110到客戶機106。所用協(xié)議“p1”在字段226中。請求“i1”在字段229中。已經為應用端口號填充的值在字段233中,并且協(xié)議““p2””也在字段233中。
現(xiàn)在描述作為這個交換的結果而構造的流簽名和流狀態(tài)。當分組監(jiān)控器300看到來自客戶機的請求分組206時,就在解析器子系統(tǒng)301中根據(jù)模式和提取操作數(shù)據(jù)庫308構造第一個流簽名210。這個簽名210包括目的地址240和源地址241。本發(fā)明的一個方面是按照一個特定的順序構造流鍵而不管對話方向。有幾種機制可以用來實現(xiàn)這一點。在特定實施方案中,數(shù)值較小的地址總是被放在數(shù)值較大的地址前面。這樣從低到高的順序用來為查找操作獲得簽名和散列的最好分布。因此在這種情況下,既然我們假定“S1”<“C1”,那么順序就是地址S1”后跟客戶地址“C1”。用來構造簽名的下一個字段是從分組206的字段216中提取出的協(xié)議字段242,這樣就是協(xié)議“p1”。用于簽名的下一個字段是字段243,它包含目的源端口號,在圖中顯示為來自分組206的字段218的交叉陰影圖案??梢栽诜纸M的有效負載中識別這個字段進行以得出這個分組或分組序列怎樣作為一個流而存在。在實踐中,這些可以是TCP端口號或TCP端口號的組合。就該Sun RPC實例來說,陰影表示用于p1的一組UDS端口號,將被用來識別這個流(例如,端口111)。端口111指示這是Sun RPC。一些像Sun RPC綁定查找這樣的應用在解析器級是可以直接確定的(“已知”),并且狀態(tài)處理器應該為其它復雜的識別工作而繼續(xù)進行的次態(tài),表示為“stD”,被放置在流-入口的字段245中。
當攔截到Sun RPC綁定查找應答時,由解析器再次構造流簽名。這個流簽名和KEY-1等同。因此,當簽名從解析器子系統(tǒng)301進入分析器子系統(tǒng)303時,就得到了完整的流-入口,并且在這個流-入口中指示狀態(tài)“stD”。狀態(tài)處理器指令數(shù)據(jù)庫326中對狀態(tài)“stD”的操作命令狀態(tài)處理器構造并存儲一個新的流簽名,在圖2中顯示為KEY-2(212)。由狀態(tài)處理器構造的這個流簽名還包括目的地址250和源地址251,分別針對服務器“S1”和后跟(數(shù)值較大的地址)的客戶機“C1”。協(xié)議字段252定義要用的協(xié)議,例如“p2”,它是從應答分組得到的。字段253包含也是從應答分組得到的一個識別模式。這樣,應用是Sun RPC,而且字段254指示這個應用“a2”。次態(tài)字段255定義狀態(tài)處理器應該為其它復雜的識別工作而繼續(xù)進行的下一個狀態(tài),例如狀態(tài)“st1”。在這個特定實例中,這是一個終結狀態(tài)。這樣,KEY-2現(xiàn)在可以用來識別以任意方式與應用“a2”相連的分組。圖中顯示了兩個這樣的分組208和209,每個方向上一個。它們使用在原始綁定查找請求中所請求的特定應用服務,并且每一個都將被識別出來,因為將要在每種情況下構造簽名KEY-2。
兩個流簽名210和212總是把目的地址和源地址排列成“S1”后跟“C1”。這樣的值是在第一次在特定流簽名中創(chuàng)建地址時自動填充的。優(yōu)選地,大量流簽名被按照從低到高的順序保存在查找表中以便最好地散布流簽名和散列值。
其后,客戶機和服務器交換大量分組,例如由請求分組208和應答分組209所表示。客戶機106發(fā)送擁有目的地址S1和源地址C1的分組208,這兩個地址在一對地址字段260和261中。字段262定義協(xié)議為“p2”,字段263定義目的端口號。
一些網絡服務器應用識別工作非常簡單,只要發(fā)生一個狀態(tài)轉換就能夠查明產生分組的應用。其它的需要發(fā)生一系列的狀態(tài)轉換以便匹配已知和預定義的狀態(tài)到狀態(tài)的轉變(climb)。
這樣通過預定義當一個相對簡單的Sun微系統(tǒng)遠程過程調用綁定查找請求指令執(zhí)行時對這個例子發(fā)生什么樣的分組交換序列就自動設置了用于識別應用“a2”的流簽名。比這個更復雜的交換可以產生兩個以上的流簽名和它們的相應狀態(tài)。每個識別可以包括設置一個復雜的狀態(tài)轉換表以在到達像字段255中的“st1”這樣的“終結”靜止狀態(tài)前對它們進行遍歷。所有這些都用來為在將來識別特定應用構造流簽名的最后集合。
狀態(tài)處理器細節(jié)狀態(tài)處理器1108對新的和現(xiàn)有的流進行分析以便按照應用對它們進行分類。它通過根據(jù)由工程師定義的規(guī)則從狀態(tài)到狀態(tài)地進行來做到這一點。規(guī)則是測試后跟測試為真時要進行的下一個狀態(tài)。狀態(tài)處理器通過每個規(guī)則直到測試為真或者沒有要執(zhí)行的測試為止。狀態(tài)處理器1108通過把解析器子系統(tǒng)1000識別出的上一個協(xié)議用作進入跳轉表(跳轉向量)的位移來起啟動這個過程。跳轉表把我們帶到用于那個協(xié)議的指令。多數(shù)指令測試某物是否是否在統(tǒng)一流鍵緩沖區(qū)1103或流-入口中,如果該流-入口存在的話。狀態(tài)處理器必須進行測試位、比較、加或減以執(zhí)行測試。
在多數(shù)通用處理系統(tǒng)中,實現(xiàn)的指令集實際上是通用的。所有的處理系統(tǒng)都有一個典型的有關對指令和程序計數(shù)器的分析和操作的指令集。這些指令包括跳轉、調用和返回。另外,這些相同的處理系統(tǒng)包含適合的指令對寄存器和存儲器位置進行分析和操作。這些指令包括加、減、移動、比較和邏輯操作。
優(yōu)選實施方案的狀態(tài)處理器1108還包括這樣一個基本的標準指令集。但是,優(yōu)選實施方案狀態(tài)處理器1108還包括一些特殊的功能需要用來估計網絡上分組中的數(shù)據(jù)內容。有四個由優(yōu)選實施方案狀態(tài)處理器執(zhí)行的特殊功能來實現(xiàn)這些目標。其中兩個是專用的轉換指令,設計用來解釋特定格式的文本元素并把它們轉換成數(shù)學或數(shù)字形式。這些指令是AH2B(ASCII十六進制到二進制轉換)和AD2B(ASCII十進制到二進制轉換)。這些指令實際都是單周期指令。這些指令很奇特并被用來提供由優(yōu)選實施方案狀態(tài)處理器所執(zhí)行的功能的時間敏感特性。
為了讓系統(tǒng)速度加快并實現(xiàn)分類目標。狀態(tài)處理器中還提供了幾個其它特殊功能。這些功能主要處理查找、定位、分析和估計字符串序列。這些字符式可以是格式化的或無格式的。
初高級指令是In_Find和In_Find_CONTINUE指令,它們由狀態(tài)處理器中的查找設備(查找引擎)實現(xiàn)。這些功能和查找設備已經設計用來使狀態(tài)處理器能夠同時查找來自發(fā)送到監(jiān)控器300中的分組的有效負載內容。這使得監(jiān)控器能夠測量并滿足任意網絡速度需求。
狀態(tài)處理器在圖19中顯示為處理器1108。它執(zhí)行它的來自狀態(tài)處理器指令數(shù)據(jù)庫(SPID)1109的指令,SPID由主機CPU作為編譯方法310的一部分對其進行填充。SP 1108包含幾個子塊,包括程序計數(shù)器1903(SPPC)、控制塊1905(SPCB)、算術邏輯單元1907(SPALU)、能夠把數(shù)據(jù)從不同的源地址移動到不同的目標地址的地址發(fā)生器和數(shù)據(jù)總線多路復用器(復用器)。兩個地址發(fā)生器是指向UFKB的SP流鍵地址發(fā)生器1911(SPFKAG)和指向高速緩存器子系統(tǒng)的SP流-入口地址發(fā)生器1913(SPFEAG)。SP 1108還包括四個數(shù)據(jù)復用器SP ALU數(shù)據(jù)復用器A 1919、SP ALU數(shù)據(jù)復用器B 1921、SP UFKB數(shù)據(jù) 復用器1915和SP高速緩沖存儲器數(shù)據(jù)復用器1917。這些復用器促進在狀態(tài)處理器1108的不同塊中以及進出UFKB 1103和高速緩存器子系統(tǒng)1115的數(shù)據(jù)移動。
SP控制塊1905對出自SPID 1109的指令進行解碼并把它們分成不同的字段以控制狀態(tài)處理器1108。SPCB1905的主要功能是指令解碼和控制信號產生。有兩類指令。一類完全由SPCB執(zhí)行,一類被傳遞給SPALU 1907以部分或全部執(zhí)行。下面描述了一些SP指令。
當一個指令需要被傳遞給SPALU 1907時,SPCB 1905對指令解碼,在總線上給SPALU 1907提供指令碼并確認“開始”信號。
當一個指令,例如移動或跳轉指令,可以完全由SPCB 1905執(zhí)行時,SPCB產生適當?shù)目刂菩盘柦oSP程序計數(shù)器1903、SP地址發(fā)生器1911和/或1913和SP復用器以便實現(xiàn)特定的移動或跳轉指令。
SPID 1109中的字是40位長并由SPCB 1905根據(jù)指令碼分成不同的字段。一個字段是指令碼。SPID字中剩下的位被根據(jù)附隨的指令分成不同字段。例如,SP 1108能夠實現(xiàn)跳轉、調用、等待和后面跟條件碼和跳轉地址的WaitRJ指令。SP 1108還能夠執(zhí)行后跟常量值的移動立即指令。此外,SP 1008能夠執(zhí)行裝載地址發(fā)生器指令,它后跟要裝載的地址。在對指令字段進行解碼之后,SPCB從所包括的解碼PAL產生組合控制信號。這些控制信號選擇不同的復用器加速數(shù)據(jù)移動并產生裝載數(shù)值到不同寄存器的選通信號。
程序計數(shù)器SPPC 1903產生到狀態(tài)處理器指令數(shù)據(jù)庫中的地址。它包含一個產生SPID 1109地址的指令指針。指令指針可以增加或從跳轉向量多路復用器裝載,跳轉向量多路復用器促進條件轉移。指令指針可以從三個來源之一裝載(1)來自UFKB的協(xié)議指針,(2)來自當前已解碼的指令的立即跳轉向量或(3)由SPALU 1907提供的值。
在由LUE把流簽名和已知協(xié)議標識符一起放到UFKB中之后,程序計數(shù)器1903被用解析器子系統(tǒng)識別出的最后一個協(xié)議進行初始化。第一個指令是跳轉到對解碼出的協(xié)議進行分析的子程序。
為了實現(xiàn)JUMP立即指令,程序計數(shù)器從帶有跳轉向量的SPCB1905取出一個輸入字段并用跳轉向量裝載指令指針。
狀態(tài)處理器ALU 1907包含所有必要的算術、邏輯和字符串比較功能以實現(xiàn)狀態(tài)處理器指令。SP ALU 1907的主要塊是A寄存器和B寄存器、指令解碼&狀態(tài)機、引用字符串存儲器、查找引擎1930、輸出數(shù)據(jù)寄存器和輸出控制寄存器。
狀態(tài)處理器ALU查找引擎1930(SPALU_SE)依次包含目標查找寄存器集、引用查找寄存器集和比較塊。查找引擎1930能夠在目標中的任何地方查找多達幾個(在我們的實施方案中是四個)的引用字符串,并且如果找到了其中一個引用字符串,就返回它和它在目標中的位置。
流鍵地址發(fā)生器產生狀態(tài)處理器正在統(tǒng)一流鍵緩沖區(qū)中訪問的地址。SPFKAG的主要單元是流鍵地址指針寄存器和產生地址的ROM解碼。
流-入口地址發(fā)生器1913提供狀態(tài)處理器正在高速緩存器子系統(tǒng)1115中訪問流-入口的地址。如果流-入口存在,來自散列的高位地址用來在流數(shù)據(jù)庫324中查找存儲桶。中間位來自找到的存儲桶記錄。低位來自狀態(tài)處理器1108正在使用的位移。
SPFKAG的主要塊是流鍵地址指針寄存器和產生地址的ROM解碼。
狀態(tài)處理器UFKB數(shù)據(jù)復用器1915選擇去往UFKB的數(shù)據(jù)源。它把三個數(shù)據(jù)源中的一個送往UFKB。這三個數(shù)據(jù)源是ALU輸出數(shù)據(jù)總線、高速緩存器輸出數(shù)據(jù)總線和SPCB數(shù)據(jù)。選擇信號是一個2-位信號。
狀態(tài)處理器高速緩存器數(shù)據(jù)復用器1917從進入高速緩存器子系統(tǒng)的四個數(shù)據(jù)源中選出去往高速緩沖存儲器子系統(tǒng)的數(shù)據(jù)源。這四個數(shù)據(jù)源是ALU輸出數(shù)據(jù)總線、UFKB數(shù)據(jù)總線的低位、UFKB數(shù)據(jù)總線的高位和SPCB數(shù)據(jù)。選擇信號是一個2-位信號。為了能夠進行16位移動,SPMUXCA引入兩個16位復用器向高速緩存器子系統(tǒng)的低16位和高16位提供信息。
狀態(tài)處理器ALU數(shù)據(jù)復用器A 1919選擇去往UFKB的數(shù)據(jù)源并把三個32位數(shù)據(jù)源之一送往ALU的A端。這三個數(shù)據(jù)源是高速緩存器子系統(tǒng)數(shù)據(jù)總線、UFKB數(shù)據(jù)總線的低32位和UFKB數(shù)據(jù)總線的高32位。選擇信號是一個2-位信號。
狀態(tài)處理器ALU數(shù)據(jù)復用器B 1919選擇去往SP ALU B端的數(shù)據(jù)源并把兩個32位數(shù)據(jù)源之一送往ALU的B端。這兩個數(shù)據(jù)源是高速緩存器子系統(tǒng)數(shù)據(jù)總線和SPCB數(shù)據(jù)字。選擇信號是一個1-位信號。
狀態(tài)處理器指令定義下面幾節(jié)描述一些在狀態(tài)處理器1108中可用的指令。應當指出通常并未向狀態(tài)處理器1108提供匯編程序。這是因為工程師一般不需要為這個處理器編寫代碼。編譯器編寫代碼并從協(xié)議列表(PDL文件)中定義的協(xié)議把它裝載到狀態(tài)處理器指令數(shù)據(jù)庫中。
下面的表格被分成兩個實施方案實施方案1和實施方案2。實施方案2更復雜一些,它包括實施方案1指令的更復雜的版本以及附加指令。
現(xiàn)在詳細描述其中一些指令。
Move移動指令集包括處理不同大小的字從源地址移動到目的地址的特殊移動指令。移動指令集已經開發(fā)出來以確保字的大小總是匹配的,包括32位和16位移動指令。
移動指令從以下位置移動數(shù)據(jù)立即數(shù)到SP ALU B寄存器、立即數(shù)到高速緩存器子系統(tǒng)、立即數(shù)到UFKB、SP ALU輸出到UFKB、SP ALU輸出到高速緩存器子系統(tǒng)、高速緩存器到SP ALU A寄存器、高速緩存器到SP ALU B寄存器、UFKB到高速緩存器子系統(tǒng)以及UFKB到SP ALU A寄存器。
In_CompareIn_Compare指令命令ALU 1907執(zhí)行比較操作并和匹配的字符串一起返回一個MATCH信號。比較操作對第一個字符在UFKB中一個未知位置的目標數(shù)據(jù)和引用字符串存儲器中的已知引用字符串進行比較。在執(zhí)行這個指令之前,要用指向目標字符的地址裝載SP UFKB地址發(fā)生器1911。ALU引用字符串中的一個位置保存一串引用字符以進行比較。
ASCII十進制轉二進制這個指令傳入表示十進制值的ASCII碼字符串的位置。結果是等價的二進制值。這個指令在一個周期內執(zhí)行完畢。
ASCII十六進制轉二進制這個指令傳入表示十六進制值的ASCII碼字符串的位置。結果是等價的二進制值。這個指令在一個周期內執(zhí)行完畢。
In_FindIn_Find_Continue這些指令在下面描述查找引擎1930一節(jié)中有詳細描述。
查找引擎和調用查找引擎的SP指令監(jiān)控器300的一個方面是它能夠實時分析每個分組。網絡流量可以在非??斓乃俾噬弦苿?。狀態(tài)處理器1107的一個任務是查找數(shù)據(jù)中一個或多個已知的字符串。這樣的查找在UFKB記錄上執(zhí)行,例如在記錄的有效負載部分中執(zhí)行。查找可以是記錄的已知部分或未知部分,例如UFKB記錄的有效負載部分中的任意地方。此外,查找可能需要以非常高的速率執(zhí)行。
狀態(tài)處理器ALU指令包括執(zhí)行這樣查找的查找引擎SPALU_SE1930。查找引擎1930能夠在UFKB中的目標數(shù)據(jù)里查找最高達四個引用字符串,并且并行指示(1)是否在目標中的任意地方找到了四個字符串中的任意一個,(2)找到了哪一個字符串,以及(3)在目標中的什么地方找到了該字符串。
查找引擎為執(zhí)行下列狀態(tài)處理器指令做準備。
In_FindIn_Find指令向ALU-查找引擎提供信息以執(zhí)行查找操作并和匹配的字符串及在目標中找到該字符串的位置一起返回匹配信號。
指令格式如下In_Find[引用字符串數(shù)組地址],[UFKB字節(jié)位移],[范圍]
In_Find操作的引用字符串存儲器數(shù)據(jù)結構
當查找完成時,確認查找完成位。根據(jù)查找結果確認或重置MATCH位。ALU中的總線,稱ALU_DATA總線,將保持下列信息●跳轉向量[15:0]-這是存儲在引用字符串數(shù)組中的一個向量并指示當找到一個引用字符串時狀態(tài)處理器跳轉到什么指令(例如,子程序)。
●字符串代號[1:0]-這是指示查找到哪個字符串的字符串代號,對四個字符串實現(xiàn)來說就是0、1、2、3。
保存流鍵緩沖區(qū)中找到字符串的位置。這是UFKB字地址和目標中找到的字符串的第一個字符的字節(jié)位置。
如果找到了任意引用字符串的第一次出現(xiàn)或者在整個查找范圍內都沒有匹配,查找就完成了。
考慮下面的例子。假設我們希望在UFKB的有效負載區(qū)域查找一個引用字符串而且從有效負載的第5字節(jié)開始查找,在第100字節(jié)結束查找。假定該引用字符串位于0050h處。這個實例的指令格式如下In_Load_FKAG,有效負載地址In_Find,005016,5,6016范圍是100-9+1=6016考慮第二個例子,查找UFKB中的1216到2A16。下面的狀態(tài)處理器指令將實現(xiàn)這一目標。
In_Load_FKAG 0216In_Find[引用字符串地址],2,1916注意2A16-1216+1=1916。
In_Find_Continue這個指令跟隨在In_Find指令后面并告訴ALU-查找引擎1930從發(fā)現(xiàn)上一個字符串的位置開始執(zhí)行查找操作并與匹配的字符串信息和找到目標字符串的位置一起返回MTCH信號。這個指令的目的是幫助從以前查找結束的地方開始查找一個新的引用字符串。因此,就不向查找引擎提供位移因為查找引擎將記住它結束它以前的查找的位置。
指令格式如下In_Fide_Continue[引用字符串數(shù)組地址],
,[范圍]
作為例子,假定我們希望在UFKB的有效負載區(qū)域In_Find一個字符串(字符串A),并且查找從有效負載的第5個字節(jié)開始,在第100個字節(jié)結束。假定引用字符串(字符串A)位于005016。在找到第一個引用字符串之后,假定我們希望在隨后的3016個字節(jié)中繼續(xù)查找一個新的字符串(字符串B)。假定字符串B位于0080h。
用于這個例子的指令格式如下In_Load_FKAG,有效負載地址In_Find,005016,5,6016……In_Find_Continue,008016,5,3016范圍是100-5+1=96=6016圖20是查找引擎(SPALU_SE)1930的總框圖,它是ALU 1907的一部分并且執(zhí)行提交給ALU 1907的In_Find和In_Find_Continue指令。In_Find指令查找UFKB的一個區(qū)域并在目標(UFKB)區(qū)域中查找最多達四個可能的引用字符串。引用字符串存儲在ALU引用字符串存儲器中。
如圖20中所示,查找引擎和下列部件相連(a)ALU字符串引用存儲器,存儲引用字符串。
(b)SPALU數(shù)據(jù)復用器A 1919,通過它提供用于以匹配引用字符串的目標數(shù)據(jù)。在In_Find指令使用SP_UFKB數(shù)據(jù)復用器1915的操作中連接到UFKB。
(c)SPALU數(shù)據(jù)復用器1921,通過它提供指令碼,包括啟動查找的“開始”信號SPALUG0 2005。
(d)狀態(tài)處理器流鍵地址發(fā)生器1911,用來增加及減小UFKB地址。
(e)狀態(tài)處理器指令計數(shù)器1903,在這里報告查找結果。
該系統(tǒng)通過時鐘信號CLK 2001運轉并可以由RESET信號進行重啟。指令譯碼塊SE_INST 2009對In_Find和In_Find_Continue的指令碼進行解碼并在SPALUGO信號2005激活時啟動查找引擎。查找引擎連續(xù)不斷地監(jiān)控SPMuxB 1921輸出總線2007和SPALUGO信號2005以檢測In_Find和In_Find_Continue指令。在查找引擎1930操作期間該引擎通過SPMUXA 1919從UFKB 1103以字長接收目標數(shù)據(jù)2011。同樣地,來自引用字符串存儲器2003的適當?shù)刂返囊米址許P_Data_RMB 2013到達。
一旦提交了In_Find或In_Find_Continue指令,查找引擎引用裝載(SE_LOAD)模塊2015負責“清理”引用字符串寄存器。它從引用字符串存儲器2003取出一個引用字符串數(shù)組對其進行解釋并用該信息裝載引用字符串寄存器。
在處理狀態(tài)中,SE_LOAD模塊2015首先從引用存儲器2003的起始位置裝載第一個字。假定在提交該指令之前起始位置就被設置在正確的位置。一旦裝載了字符串數(shù)量和字符串大小,裝載方法繼續(xù)裝載所有的引用字符串。增加引用信號2025增加正在裝載引用字符串的引用存儲器地址。在字符串的裝載過程中未確認LOAD_KEY_DONE信號2017。當正在裝載最后一個引用字符串的最后一個字時用脈沖傳送LOAD_KEY信號2019,指示查找引擎模塊2030從下一個時鐘周期開始查找。在下一個時鐘周期中確認LOAD_KEY_DONE信號2017并同時從引用存儲器2003裝載跳轉向量2021。
查找引擎增加/控制模塊(SE_INC)2023負責增加流鍵地址發(fā)生器1911以便從UFKB向查找引擎提供新的字。它監(jiān)控出自查找引擎模塊的找到信號并報告結果。SE_INC 2023還負責計算真正的結束地址并根據(jù)In_Find指令中提供的范圍確定最后一個字中要檢查的最后一個字節(jié)。
SE-4SEARCH 2030模塊包括四個查找引擎以便同時查找四個字符串。該引擎對四個引用字符串的每一個輸出找到信號2031和位置信號2033以指示是否找到該字符串及在哪里找到了該字符串。
由SE-INC 2023確認的SPALU_Done信號指示查找完成。如果同時確認了SPALU_Match信號2037那么表示這是一個成功查找。成功查找還導致SPALU_Data總線2039攜帶跳轉向量和找到引用字符串的查找引擎編號。
本發(fā)明的一個方面是查找快速。從提交指令以在UFKB中的N個字中的任意位置開始查找到確認SPALU_Done信號2035的最長時間是N個時鐘周期加上用于預裝入和成功查找情況下的指針調整的附加時鐘周期。在我們的實施方案中,這個附加負擔是11個時鐘周期。因此,每個額外的字僅占用一個時鐘周期。
圖21顯示了包括四個單一查找模塊的SE_4SEARCH模塊2030。替代實施方案可以包括更多的單一查找模塊以便能夠同時查找多于四個的引用字符串。四個查找引擎模塊中的每一個都是相同的,因此只描述一個這樣地模塊2103。
每個單一查找模塊2103執(zhí)行一個單獨的引用字符串查找。使用這個模塊的多個副本可以在公共源緩沖區(qū)(UFKB)中查找多個不同的引用字符串。該模塊包括核心比較器矩陣塊2105(查找引擎核心)和狀態(tài)機SE_SM 2107。查找引擎核心2105能夠對長達NR個單元(在我們的實施方案中是16字節(jié))的引用字符串和三個8-字節(jié)字(在三個連續(xù)時鐘周期中裝入,每次一個字)的目標字符串進行比較。在每個時鐘周期中,單一查找模塊2103從第一個字的8個字節(jié)中的任意一個開始在目標中查找引用字符串。每一個引用字符串字節(jié)都附有一個校驗位,指示是否檢查這個字節(jié)。如果確認了該校驗位,就禁止相應的字節(jié)檢驗。隨著64-位(8字節(jié))字被以流水方式裝入到三個寄存器中,在它們被取出之后兩個時鐘周期比較開始。
如果查找成功需要調整源(UFKB)地址指針。如果查找成功,匹配信號2111成為活動的并且引用字符串的第一個字節(jié)的位置被放在位置總線3113上。SE_SM狀態(tài)機2107每個時鐘周期執(zhí)行若干任務。它有三個狀態(tài)復位、空閑和進行。當處于空閑狀態(tài)時,狀態(tài)機2107等待來自SE_LOAD模塊2105的信號以切換到進行狀態(tài)。在進行狀態(tài)的第一個時鐘周期中,如果匹配發(fā)生就核對位置和字節(jié)位移2115。如果字節(jié)位移大于位置,就忽略掉它,即沒有確認找到。同樣,如果它是要檢查的最后一個字,就檢驗終點位移字節(jié)和位置,如果位置大于范圍2117中要檢查的最后一個字節(jié)就把它忽略掉。否則,就在查找引擎核心2105發(fā)現(xiàn)匹配時確認找到信號并鎖住該位置把它轉發(fā)到SE_INC模塊2023。
現(xiàn)在看圖22A,查找引擎核心2105是查找引擎模塊的核心比較器矩陣。它在目標字符串中查找NR-單元的引用字符串。它包括一個引用軸和一個目標軸。引用軸包括保存引用字符串的寄存器,通常字符串是NR個單元。在優(yōu)選實施方案中單元是字節(jié),NR是16,并且很容易進行更改以查找其它引用字符串大小。目標數(shù)據(jù)被組織成字。目標數(shù)據(jù)被排列成一組單字寄存器,每個單字寄存器保存目標數(shù)據(jù)的一個字。在一個時鐘周期內打入寄存器一個字。這樣,目標數(shù)據(jù)的第一個字就在三個時鐘周期內打入目標軸。
查找引擎核心2105包括至少一個NR-單元比較器,每一個有NR對輸入和一個輸出,輸出指示NR-對輸入中每一對的匹配。圖22B中顯示了一個這樣的比較器2203。輸入對顯示為(2207-1,2209-1)、(2207-2,22-09-2)、...(2207-NR,2209-NR)。輸出是2211。圖22A顯示了多個(比如Nstart個)比較器,標為2203-1、2203-2、...、2203-Nstart??紤]這些比較器中的任意一個,查找引擎核心還包括一個連接矩陣,其中包括沿著引用軸指示引用字符串值的NR個連接和沿著目標軸指示目標數(shù)據(jù)值的NR個連接,從目標數(shù)據(jù)的第一個起始位置開始并在結束位置結束的目標數(shù)據(jù)連接。比較器是連在一起的,這樣當引用軸和目標軸相互垂直面向時,任意比較器都是沿著矩陣的對角線定向,這樣目標數(shù)據(jù)的NR個連接就可以和引用字符串進行比較。每個比較器在目標軸中的一個不同位置開始。在我們的實現(xiàn)中,每個字是8字節(jié)長,比較器數(shù)量Nstart等于字長,并且比較器從目標軸上的連續(xù)位置開始。這樣,在一個時鐘周期內查找引擎核心2105能夠找到從第一個字中的任意位置開始的引用字符串。注意如果目標字符串正巧跨越了一個字邊界,查找引擎核心仍將自動找到該字。
比較器的輸出是Nstart輸入優(yōu)先級編碼器的輸入,它指示如果找到了一個字符串的話是Nstart個比較器中的哪一個找到了該字符串。這提供了位置。
在裝入數(shù)據(jù)之后的操作中,狀態(tài)機2107在第一個時鐘周期將忽略可能在第一組少量比較器中找到的任意字符串,比較器數(shù)量由位移指示。在每個后繼時鐘周期中,查找引擎2105將找到從第一組Nstart個位置中的任意地方開始的引用字符串。這樣,在多個時鐘周期中查找引擎核心2105將找到目標數(shù)據(jù)中任意位置的引用字符串。
圖23更詳細地顯示了輸入核心的一種實現(xiàn)。這個實現(xiàn)用于找到在一組起始位置的任意一個中的引用字符串。該實現(xiàn)包括用于接收引用字符串之一的NR個單元的引用寄存器2203、連接成組以接收目標數(shù)據(jù)的一組目標數(shù)據(jù)寄存器2205、多個比較器集、對應每個起始位置的一個比較器集、連接到引用寄存器的每個單元—在這個實現(xiàn)中指是每個字節(jié)—和從特定起始位置開始的目標數(shù)據(jù)寄存器的NR個單元—這種情況下也是字節(jié)—的比較器集,并比較第一引用寄存器內容和從特定起始位置開始的目標寄存器的NR個單元。每個比較器集指示從它相應的不同起始位置開始的目標數(shù)據(jù)中是否有第一引用字符串的匹配??赡艿钠鹗嘉恢眉梢园∟start個不同位置。這些位置可以是連續(xù)的或不連續(xù)的,如果連續(xù),就把一個或多個目標數(shù)據(jù)寄存器連接成組以接收目標數(shù)據(jù)的至少NR+Nstart-1個單元。這樣就有了Nstart個比較器集,對Nstart個起始位置中的每一個都有一個比較器集。
每個比較器集包括NR個連續(xù)的比較器。圖23B中顯示了一個這樣的比較器2313,并且包括引用輸入、目標輸入、使能輸入和一個指示匹配的輸出,這樣就在引用和目標輸入匹配并且使能輸入被確認時確認比較器2313的輸出。對針對特定起始位置的特定比較器集來說,連續(xù)比較器的引用輸入連接到引用寄存器的連續(xù)單元上,連續(xù)比較器的目標輸入連接到從該特定起始位置開始的目標數(shù)據(jù)寄存器的連續(xù)單元上,使能集合中的第一個比較器,并且每個比較器的使能輸入連接到前一個比較器的輸出上,這樣當引用字符串的NR個單元和目標數(shù)據(jù)的NR個單元一致時確認最后一個比較器的輸出。
用這種方式,狀態(tài)處理器能夠以極高的速率在分組(存儲在UFKB中)區(qū)域中的未知位置上定位字符串。
高速緩沖存儲器子系統(tǒng)再參考圖11,高速緩存器子系統(tǒng)1115連接到查找更新引擎(LUE)1107、狀態(tài)處理器(SP)1108和流插入/刪除引擎(FIDE)上。高速緩沖存儲器1115保存存儲在存儲器1123中的流-入口數(shù)據(jù)庫中的一組流-入口,因而它通過統(tǒng)一存儲器控制1119連接到存儲器1123。根據(jù)本發(fā)明的一個方面,高速緩存器中的這些記錄是那些下次很可能被訪問的記錄。
希望能夠使高速緩存器系統(tǒng)中的命中率達到最大。典型的現(xiàn)有技術高速緩存器系統(tǒng)用來加速從微處理器系統(tǒng)到存儲器和從存儲器到微處理器系統(tǒng)的訪問速度。在這樣的現(xiàn)有技術系統(tǒng)中有幾種機制可用來預測查找這樣就能使命中率達到最大。例如現(xiàn)有技術的高速緩存器可以使用前視機制來預測指令高速緩存器查找和數(shù)據(jù)高速緩存器查找。這樣的前視機制無法用于高速緩存器子系統(tǒng)1115的監(jiān)控器應用。當新分組進入監(jiān)控器300時,下一個高速緩存器訪問,例如來自LUE 1107,可能是針對與上次高速緩存器查找完全不同的流,而且無法提前知道下一個分組將屬于哪一個流。
本發(fā)明的一個方面是當需要高速緩存器替換時替換掉最近最少使用(LRU)的流-入口的高速緩存器系統(tǒng)。替換最近最少使用的流-入口是首選的,因為跟隨當前分組的下一個分組很可能屬于同一個流。這樣,新分組的簽名很可能將匹配最近使用過的流-入口。反之,與最近最少使用的流-入口相連的分組最不可能很快到達。
此外,在對流-入口進行操作的其中一個引擎,例如LUE 1107,完成了在流-入口上的操作之后,同一引擎或其它引擎很可能將很快用到同一個流-入口。這樣就希望確保最近使用過的流-入口保留在高速緩沖存儲器中。
本發(fā)明的高速緩存器的一個特性是無論何時只要有可能最近使用最多(MLU)的流-入口都被保存在高速緩存器中。既然通常同一流的分組總是大量到達并且MRU流-入口很可能為分析子系統(tǒng)中的其它引擎所需要,盡最大可能把MRU流-入口保留在高速緩存器中就能提高在高速緩存器中找到流記錄的可能性,這樣就提高的高速緩存器命中率。
然而本高速緩存器發(fā)明的另一方面是它包括一個使用一組相聯(lián)存儲單元(CAMs)的相聯(lián)存儲器。CAM包含地址,在我們的實現(xiàn)中它是與包括存儲器單元的高速緩沖存儲器(例如,數(shù)據(jù)RAM)中對應的流-入口相聯(lián)的散列值。在一種實施方案中,每個存儲器單元是一個頁。每個CAM還包括指向高速緩沖存儲器頁的指針。這樣,CAM內容包括地址和指向高速緩沖存儲器的指針。通常,每個CAM單元包括帶有輸入的匹配電路。把散列值送進CAM的匹配電路輸入中,如果該散列值匹配CAM中的散列值,就確認匹配輸出,指示有了一個命中。CAM指針指向流-入口在高速緩沖存儲器中的頁號(即地址)。
每個CAM還包括高速緩存器地址輸入、高速緩存器指針輸入和高速緩存器內容輸出以輸入和輸出CAM的地址部分和指針部分。
特定實施方案高速緩存器存儲一個存儲桶的頁中的流-入口,即它能夠存儲單獨的流-入口。這樣,指針就是高速緩沖存儲器中的頁號。在一種版本當中,每個散列值對應N個流-入口(例如,在這個版本的優(yōu)選實施方案中是4個存儲桶)的存儲柜。在另一種實現(xiàn)中,每個散列值指向一個單一地流-入口,即存儲柜和存儲桶大小相當。為簡單起見,在描述高速緩沖存儲器1115時假定采用第二種實現(xiàn)。
此外,按照常規(guī),提供匹配輸出信號給高速緩存器中的相應位置,因此可以在高速緩沖存儲器中的該位置進行讀寫操作。
本發(fā)明的一個方面實現(xiàn)了相聯(lián)和真正的LRU替換策略的結合。為了這一點,高速緩存器系統(tǒng)1115的CAMs被按照一種順序組織成我們稱為CAM棧(也叫CAM陣列)的形式,帶有頂部CAM和底部CAM。從頂部CAM開始每個CAM的地址和指針輸出都連接到下一個CAM的地址和指針輸入上,直到底部。
在我們的實現(xiàn)中,散列用來給高速緩存器定址。散列是CAM陣列的輸入,所擁有的地址與輸入散列相匹配的任意CAM都確認它的指示命中的區(qū)配輸出。當產生高速緩沖存儲器命中時,產生命中的CAM的內容(包括地址和指向高速緩沖存儲器的指針)被放入棧頂?shù)腃AM中。在產生命中的CAM之上的那些CAM內容(高速緩沖存儲器地址和高速緩沖存儲器指針)下移以填充空隙。
如果產生未命中,就把任意新的流記錄放在由底部CAM所指的高速緩沖存儲器單元中。底部之上的所有CAM內容均下移一格,并把新的散列值和指向新的流-入口的高速緩沖存儲器的指針放在CAM棧的最頂部的CAM中。
用這種方式,CAMs被按照使用的遠近順序進行排列,底部CAM指向最近最少使用的高速緩存器內容,頂部CAM指向最近使用過的高速緩存器內容。
此外,和通?;贑AM的高速緩存器不同的是,在CAM中的地址和它所指向的高速緩沖存儲器的哪個單元之間沒有固定的關系。CAM和高速緩沖存儲器頁之間的關系隨著時間而變化。例如,在某個時刻,棧中的第五個CAM包含指向高速緩沖存儲器的一個特定頁的指針,一段時間過后,同樣是第五個CAM可以指向不同的高速緩沖存儲器頁。
在一種實施方案中,CAM陣列包括32個CAM以及包含32個存儲器單元(即存儲器頁)的高速緩沖存儲器,每個CAM內容指向一個頁。假定CAMs分別編號為CAM0、CAM1、...、CAM31,CAM0和CAM31是棧中的頂部和底部CAM。
CAM陣列由CAM控制器控制,CAM控制器實現(xiàn)成一個狀態(tài)機,高速緩沖存儲器由高速緩沖存儲器控制器控制,它也實現(xiàn)成一個狀態(tài)機。本領域的技術人員從這個操作描述可以了解對這種控制器的需要以及如何把它們實現(xiàn)成狀態(tài)機或其它形式。為了不至于混淆這些控制器和其它控制器,例如統(tǒng)一存儲器控制,我們把這兩個控制器分別稱為CAM狀態(tài)機和存儲器狀態(tài)機。
作為一個例子來考慮,高速緩存器的狀態(tài)是它是滿的。進一步假定下表中顯示了CAM棧的內容(地址和指向高速緩沖存儲器的指針)和在高速緩沖存儲器的每個頁號地址上的高速緩沖存儲器內容。
這說明CAM4包含并將匹配散列值hash4,用hash4進行查找將產生匹配和高速緩沖存儲器中的地址page4。此外,高速緩沖存儲器中的page4包含流-入口entry4,用這個符號表示它和散列值hash4相匹配。這個表還指示對hash0的使用比hash1更近,hash5比hash6更近,等等,hash31是最近最少使用的散列值。進一步假定LUE 1107用散列值hash31從統(tǒng)一流鍵緩沖區(qū)1103獲得一個記錄。LUE通過CAM陣列查找高速緩存器子系統(tǒng)。CAM31獲得命中并返回命中的頁號,即page31。高速緩存器子系統(tǒng)現(xiàn)在向LUE 1107指示所提供的散列值產生了命中并向它提供指向高速緩沖存儲器的page31的指針,page31包含與hash31對應的流-入口,即flow31。LUE現(xiàn)在從高速緩沖存儲器在地址page31獲得流-入口flow31。在優(yōu)選實施方案中,對高速緩存器的查找只占用一個時鐘周期。
值hash31是最近使用過的散列值。因此,根據(jù)發(fā)明的高速緩沖存儲器系統(tǒng)的一個方面,要把最近使用過的記錄放在CAM棧的頂部。這樣hash31就被放進CAM0中。此外,hash30現(xiàn)在是LRU散列值,所以把它移到CAM31。下一個最近最少使用的散列值hash29移到CAM30中,等等。這樣,在把MSU記錄放到頂部CAM之后所有的CAM內容都下移一格。在優(yōu)選實施方案中下移CAM記錄只占用一個時鐘周期。這樣,查找和重排CAM陣列以根據(jù)最近使用情況維持次序關系。下表顯示了CAM陣列的新內容以及高速緩沖存儲器的內容(無變化)。
為了延續(xù)這個例子,假定過些時候LUE 1007用散列值hash5進行查找。這在指向高速緩沖存儲器page5的CAM6中產生命中。這樣,在一個時鐘周期內,高速緩存器子系統(tǒng)1115向LUE 1007提供命中指示以及指向指向高速緩沖存儲器中的流-入口的指針。最近的記錄是hash5,因此把hash5和高速緩沖存儲器地址page5送入CAM0中。剩下的CAMs內容都下移一格直到并且包括包含hash5的記錄。也就是說,CAM7、CAM8、...、CAM31保持不變。CAM陣列內容和沒有發(fā)生變化的高速緩沖存儲器內容顯示在下表中。
這樣,在高速緩存器命中的情況下,CAM陣列總是保持用過的散列值按使用的遠近順序排列,最近使用過的散列值保持在頂部CAM中。
將通過繼續(xù)這個例子描述產生高速緩存器命中時高速緩存器子系統(tǒng)的操作。假定有一個對散列值hash43的查找(例如,來自LUE1007)。CAM陣列產生未命中,導致使用該散列在用外部存儲器中查找。我們的特定實現(xiàn)的特定操作是CAM狀態(tài)機發(fā)送一個GET消息給存儲器狀態(tài)機,這導致通過統(tǒng)一存儲器控制(UMC)1119使用該散列的存儲器查找。但是,本領域中的那些技術人員也應該了解當CAM陣列中產生未命中時實現(xiàn)存儲器查找的其它方法。
在流-入口數(shù)據(jù)庫324(即外部存儲器)中的查找產生命中或未命中。假定流-入口數(shù)據(jù)庫324沒有與散列值hash43相匹配的記錄。存儲器狀態(tài)機向CAM狀態(tài)機指示未命中,CAM狀態(tài)機隨后向LUE 1007指示未命中。另一方面,假定在數(shù)據(jù)庫324中有匹配散列值hash43的流-入口-entry43。假若這樣,就把該流-入口取出裝入到高速緩存器中。
根據(jù)本發(fā)明的另一方面,底部CAM記錄CAM31總是指向高速緩沖存儲器中的LRU地址。這樣,實現(xiàn)真正的LRU替換策略包括清洗出LRU高速緩沖存儲器記錄并在底部CAM所指的高速緩沖存儲器位置中插入一個新記錄。并對該CAM記錄進行修改以反映它所指向的高速緩沖存儲器單元中的記錄的散列值。這樣,散列值hash43被放入CAM31中并且記錄entry43也被放入CAM31所指的高速緩存器頁中?,F(xiàn)在CAM陣列和改變了的高速緩沖存儲器內容是
注意插入的記錄是現(xiàn)在的MRU流-入口。因此,現(xiàn)在要把CAM31的內容移到CAM0并且頂部31個CAMs中的以前的記錄要再下移一次,底部CAM指向LRU高速緩沖存儲器頁。
除了通過高速緩存器子系統(tǒng)1115查找數(shù)據(jù)庫324中的記錄以獲得一個現(xiàn)有的流-入口之外,LUE、SP或FIDE引擎還可以通過高速緩存器更新流-入口。同樣,在高速緩存器中也可以有是更新過的流-入口的記錄。在這樣更新過的記錄被寫入外部存儲器中的流-入口數(shù)據(jù)庫324之前,始終稱它們?yōu)椤芭K”記錄。通常要在高速緩存器系統(tǒng)中提供一種機制來指示高速緩存器中的臟記錄。例如,一個臟記錄在數(shù)據(jù)庫324中的相應記錄被更新之前不能被清洗出去。
假定在最后一個例子中,高速緩存器中的記錄也由該操作進行了更改。也就是說,hash43是在MRU CAM0中,CAM0正確指向page30,但高速緩存器的page30中的信息,也就是entry43,并不對應數(shù)據(jù)庫324中的entry43。也就是說,高速緩存器的page30的內容是臟的?,F(xiàn)在需要更新數(shù)據(jù)庫324。這被稱為備份或清除臟記錄。
通常在高速緩存器系統(tǒng)中還用臟標記指示高速緩沖存儲器記錄是臟的。在優(yōu)選實施方案中,對高速緩沖存儲器中的每個字都有一個臟標記。
所發(fā)明的高速緩存器系統(tǒng)的另一個方面是根據(jù)最可能被清除出高速緩沖存儲器的記錄來清除高速緩沖存儲器內容。在我們的LRU高速緩存器實施方案中,高速緩沖存儲器記錄的清除按照使用由遠至近的順序進行。這樣,LRU頁首先被清除與它們可能被首先清洗的最小可能性一致。
在我們的實施方案中,存儲器狀態(tài)機在它空閑的任意時刻都可以被編程以按照從遠到近的順序,即從CAM陣列的底部開始,掃描CAM陣列并查找臟標記。只要發(fā)現(xiàn)了一個臟標記,就把高速緩沖存儲器內容備份到外部存儲器中的數(shù)據(jù)庫324中。
注意一旦高速緩沖存儲器的一個頁被清除,為了防止仍然需要它而繼續(xù)把它保留在高速緩存器中。僅在需要更多高速緩沖存儲器頁時才把該頁沖洗出去。對應的CAM也直到需要一個新的高速緩沖存儲器頁時才被改變。采用這種方式,能夠對包括干凈記錄在內的所有高速緩沖存儲器內容進行有效查找。此外,無論何時要沖洗一個高速緩沖存儲器記錄,都要先進行檢查確認該記錄是干凈記錄。如果該記錄是臟的,要在沖洗之前先對其進行備份。
高速緩存器子系統(tǒng)1115可以一次服務兩個讀傳遞。如果一次有兩個以上活動的讀請求,高速緩存器按照下面的特定順序為它們服務(1)LRU臟寫回。如果最近最少使用高速緩沖存儲器記錄是臟的,高速緩存器就把它寫回存儲器中,因此將總有一個空間用于高速緩沖存儲器未命中時的獲取。
(2)查找和更新引擎1107。
(3)狀態(tài)處理器1108。
(4)流插入和刪除引擎1110。
(5)分析器主機接口和控制1118。
(6)從LRU-1到MRU的臟寫回;當沒有其它未決因素時,高速緩存器引擎把臟記錄寫回到外部存儲器。
圖26顯示了高速緩存器子系統(tǒng)1115的高速緩沖存儲器部件2600。高速緩沖存儲器子系統(tǒng)2600包括高速緩沖存儲器頁的一組雙端口存儲器2603。在我們的優(yōu)選實施方案中有32頁。每個存儲器頁都是雙端口。也就是說,每個存儲器頁包括兩組輸入端口和兩組輸出端口,每個輸入端口都有地址和數(shù)據(jù)輸入,一組輸入和輸出端口被連接到統(tǒng)一存儲器控制(UMC)1119,用于從高速緩沖存儲器和用于流-入口數(shù)據(jù)庫324的外部存儲器讀出或向其寫入數(shù)據(jù)。由多路復用器2611使用來自高速沖存器子系統(tǒng)1115中的CAM存儲器子系統(tǒng)部分的高速緩存器頁選擇信號來選擇把輸出線2609中的哪一個連接到UMC1119上。從數(shù)據(jù)庫324更新高速緩沖存儲器使用來自UMC的高速緩存器數(shù)據(jù)信號2617和高速緩存器地址信號2615。
來自查找/更新引擎(LUE)1107、狀態(tài)處理器(SP)1108或流插入/刪除引擎(FIDE)1110的對高速緩沖存儲器的查找和數(shù)據(jù)更新使用高速緩沖存儲器存儲頁2603的其它端口。一組輸入選擇多路復用器2605和一組輸出選擇多路復用器2607使用一組選擇信號2619分別選擇輸入和輸出引擎。
圖27顯示了連接到CAM陣列2705和存儲器狀態(tài)機20703的高速緩存器CAM狀態(tài)機,以及在這些單元之間傳遞的一些信號。信號名都是自釋義的,并且從上面的描述中也能夠清楚怎樣把這些控制器實現(xiàn)為狀態(tài)機或其它形式。
盡管對CAM陣列操作的上述描述對本領域的技術人員要設計這樣一個CAM陣列來說已經足夠了,并且有多種可能的設計,圖28顯示了一種這樣的設計。參考該圖,CAM陣列2705對CAM存儲器的每個頁都包括一個CAM,例如CAM[7](2807)。查找端口或更新端口取決于LUE、SP或FIDE中的哪一個正在訪問高速緩存器子系統(tǒng)。查找的輸入數(shù)據(jù)通常是散列,圖中顯示為REF-DATA 2803。裝入、更新或清出高速緩存器用信號2805來實現(xiàn),信號2805用選擇多路復用器2809來選擇CAM輸入數(shù)據(jù),這樣的數(shù)據(jù)是命中頁或LRU頁(按照本發(fā)明的一個方面就是底部CAM)。通過5->32解碼器2811完成任何裝入。對陣列中的所有CAM進行CAM查找的結果被提供給一個32->5低到高的編碼器2813,2813輸出命中2815以及產生命中的CAM編號2817。CAM命中頁2819是MUX 2821的輸出,2821擁有每個CAM的CAM數(shù)據(jù)作為輸入以及由產生命中的CAM的信號2817選擇的輸出。對臟記錄的維護從連接到CAM狀態(tài)機2701的更新端口執(zhí)行。MUX2823擁有所有CAM的數(shù)據(jù)輸入和掃描輸入2827。MUX 2823產生臟數(shù)據(jù)2825。
模式解析和提取數(shù)據(jù)庫格式能夠存在于不同層中的不同協(xié)議可以被看作一個或多個由結點鏈接成的樹中的結點。分組類型是樹的根(稱為基層)。每個協(xié)議是下一層上的一些其它協(xié)議的父親結點或終端結點。一個父親結點把一個協(xié)議鏈接到可以在更高層上的其它協(xié)議(子協(xié)議)。這樣一個協(xié)議就可以有零個或多個孩子。
作為樹結構的一個實例,考慮以太網分組。它的孩子結點之一可能是IP協(xié)議,IP協(xié)議的孩子結點之一可能是TCP協(xié)議。IP的另一個孩子可能是UDP協(xié)議。
分組包括所用的每個協(xié)議的至少一個報頭。分組中所用的特定協(xié)議的子協(xié)議由該特定協(xié)議的報頭中一個位置上的內容來標識。分組的內容指定孩子是以子識別模式的形式。
網絡分析器最好能夠分析多種不同協(xié)議。在基層,有很多用在數(shù)字通信中的分組類型,包括以太網、HDLC、ISDN、Lap B、ATM、X.25、幀中繼、數(shù)字數(shù)據(jù)服務、FDDI(光纖分布數(shù)據(jù)接口)和T1以及其它類型。這些分組類型中有很多使用不同的分組和/或幀格式。例如,數(shù)據(jù)在ATM和幀中繼系統(tǒng)中以53個八位位組(即字節(jié))的固定長度分組(稱為“單元”)進行傳輸;需要用幾個這樣的單元來構造可以包括在一些其它類型的單個分組中的信息。
注意術語分組在這里意指包括分組、數(shù)據(jù)報、幀和單元。通常,分組格式或幀格式指怎樣用多個不同的字段和報頭封裝數(shù)據(jù)以通過網絡進行傳輸。例如,數(shù)據(jù)分組通常包括目的地地址字段、長度字段、糾錯碼(ECC)字段或循環(huán)冗余校驗(CRC)字段以及標識分組開始和結尾的報頭和報尾。術語“分組格式”、“幀格式”和“單元格式”一般是同義的。
分組監(jiān)控器300能夠分析不同的協(xié)議,并且這樣就能夠在分組上執(zhí)行不同的協(xié)議特定操作,其中任意協(xié)議的協(xié)議報頭根據(jù)父協(xié)議和分組中所用的協(xié)議被放在不同的位置。這樣,分組監(jiān)控器根據(jù)分組的內容能夠適應不同的協(xié)議。并適應地為特定類型的分組確定從任意分組中要提取的位置和信息。例如,對尋找什么和在哪里尋找它們以形成簽名沒有固定的定義。在一些現(xiàn)有技術系統(tǒng)中,像Chiu etal.在美國專利5,101,402中所描述的系統(tǒng)中,對特定類型的分組有固定的位置。隨著協(xié)議的增殖,指定所有可能的位置以指望確定會話變得越來越困難。同樣,添加一個新協(xié)議或應用也很困難。在本發(fā)明中,對任意協(xié)議層數(shù)都是一個變量,并且是足夠唯一標識到我們想要去的層及所有通往應用層的路徑(在OSI模型中)的任何數(shù)字。
甚至同一協(xié)議也可以有不同的變體。例如,以太網分組有幾種已知的變體,每一種都擁有基本保持相同的基本格式。以太網分組(根結點)可以是以太類型分組—也稱作以太網類型/版本2和DIX(DIGITAL-Intel-Xerox分組)—或IEEE以太網(IEEE 803.x)分組。監(jiān)控器應該能夠處理所有類型的以太網協(xié)議。用以太網協(xié)議時指示子協(xié)議的內容在一個位置,但用IEEE類型時子協(xié)議被指定在一個不同的位置。子協(xié)議由子識別模式指示。
圖16顯示了完整以太網幀(即分組)的報頭信息并包括在目的介質訪問控制地址(Dst MAC 1602)和源介質訪問控制地址(Src MAC1604)上的信息。圖16中還顯示了在PDL文件中為提取簽名而定義的一些(不是全部)信息。在解析結構和提取操作數(shù)據(jù)庫308中也將定義這樣的信息。這以Dst MAC信息1606的六個字節(jié)和Src MAC信息1610的六個字節(jié)形式包括了這一層上的所有報頭信息。還分別定義了散列的源和目的地址部分。這些顯示為來自Dst MAC地址的2字節(jié)Dst散列1608和來自Src MAC地址的2字節(jié)Src散列1612。最后包括的信息(1614)是與下一層有關的信息的報頭從哪里開始。在這個例子中下一層(第二層)信息在分組位移12開始。
圖17A現(xiàn)在顯示了以太類型分組1700的下一層(第2層)的報頭信息。
對以太類型分組1700來說,來自分組指示下一層的有關信息是一個兩字節(jié)類型的字段1702,其中包含下一層的識別模式。剩下的信息1704在圖中顯示為陰影,因為它與這一層無關。列表1712顯示了針對以太類型分組的可能的孩子,由在位移12發(fā)現(xiàn)的子識別模式指示。
還顯示了用于解析器記錄和定位下一個報頭信息的一些提取出的部分。解析器記錄的簽名部分包括提取出的部分1702。還包括來自這個信息的1-字節(jié)散列部分。
位移字段1710提供轉到下一層信息的位移,即定位下一個報頭信息的開始。對以太類型分組來說,下一層報頭的開始在從幀起始處開始14個字節(jié)處。
其它分組類型被進行了不同的排列。例如,在ATM系統(tǒng)中,每個ATM分組包括5個8位位組的“報頭”段,后跟48個8位位組的“有效負載”段。ATM單元的報頭段關于有效負載段中包含的數(shù)據(jù)的路由的信息。報頭段還包含流量控制信息。報頭段的8或12位包含虛擬路徑標識符(VPI),并且報頭段的16位包含虛擬通道標識符(VCI)。每個ATM交換把由VPI和VCI位表示的抽象路由信息轉化為物理或邏輯網絡鏈路的地址并正確地發(fā)送每個ATM單元。
圖17B顯示了可能的下一層之一的報頭結構,即IP協(xié)議的報頭。表1752中顯示了IP協(xié)議可能的孩子。報頭根據(jù)父協(xié)議在不同位置(L3)開始。圖17B中還包括部分要為簽名而提取的一些字段,和指示下一層的報頭從分組中的什么地方開始的標記。
注意圖16、17A和17B中顯示的信息將以PDL文件的形式指定給監(jiān)控器并編譯進模式結構和提取操作數(shù)據(jù)庫308中。
解析子系統(tǒng)根據(jù)存儲在數(shù)據(jù)庫308中的信息在分組報頭數(shù)據(jù)上執(zhí)行操作。因為與協(xié)議有關的數(shù)據(jù)可以被看作組織成樹的形式,在解析子系統(tǒng)中需要把最初以樹的形式組織的數(shù)據(jù)仔細查找一遍。既然實時操作是首選,就需要快速地執(zhí)行這樣的查找。
已知有效存儲信息的數(shù)據(jù)結構被組織成樹。這樣的有效存儲方式通常需要用算術計算來確定指向數(shù)據(jù)結點的指針。對本應用來說使用這樣的有效存儲數(shù)據(jù)結構進行查找可能消耗過多的時間。因此希望以某種能夠快速查找的格式存儲協(xié)議數(shù)據(jù)。
按照本發(fā)明的另一個方面,數(shù)據(jù)庫308被存儲在存儲器中并包括用來存儲將在分組上執(zhí)行的協(xié)議特定操作的數(shù)據(jù)結構。尤其壓縮表示用來在模式解析和提取數(shù)據(jù)庫308中存儲信息,數(shù)據(jù)庫308由模式識別方法304和提取方法306在解析器子系統(tǒng)使用。用了通過使用一組一個或多個索引來檢索數(shù)據(jù)結構的內容從而快速定位子協(xié)議有關的信息,對該數(shù)據(jù)結構進行組織。一個數(shù)據(jù)結構記錄包括一個有效性指示。定位并識別子協(xié)議包括檢索該數(shù)據(jù)結構直到找到有效記錄為止。使用該數(shù)據(jù)結構存儲由模式識別引擎(PRE)1006所用的協(xié)議信息能夠使解析器子系統(tǒng)301執(zhí)行快速查找。
在一種實施方案中,該數(shù)據(jù)結構是三維結構的形式。注意這個三維結構通常被作為一組二維結構依次存儲在存儲器中,由此3-D結構的三維中的一維被用作特定2-D數(shù)組的索引。這形成了該數(shù)據(jù)結構的第一索引。
圖18A顯示了這樣一個3-D表示1800(它可被看作2-D表示的編了索引的集合)。這個數(shù)據(jù)結構的三維是1.類型標識符[1:M]。這是標識特定層上的協(xié)議類型的標識符。例如,01指示以太網幀。64指示IP,16指示IEEE類型以太網分組,等等。根據(jù)分組解析器能夠處理多少個協(xié)議,M可能是一個大數(shù);隨著向監(jiān)控器300添加處理更多協(xié)議的能力M可以隨著時間而增長。當該3-D結構被看作一組2-D結構時,類型ID就是特定2-D結構的索引。
2.大小[1:64]。分組中感興趣的字段的大小。
3.位置[1:512]。這是分組中的偏移位置,表示為多個8位位組(字節(jié))。
在這些位置中的任意一個上面可能有或者沒有有效數(shù)據(jù)。通常,在大多數(shù)位置上都將沒有有效數(shù)據(jù)。3-D數(shù)據(jù)的大小是M*64*512(譯者注*表示乘),可以很大;例如M是10,000。這是一個稀疏矩陣,大多數(shù)記錄都是空的(即無效)。
每個數(shù)組記錄包括一個“結點代碼”,指示內容的種類。這個結點代碼可以是三個值中的其中一個(1)向模式識別方法304指示已知協(xié)議已經被識別為下一個協(xié)議(即子協(xié)議)的“協(xié)議”結點代碼;(2)指向對目前正在查找的協(xié)議沒有子協(xié)議的“終端”結點代碼;(3)指示沒有有效記錄的“空”(也稱為“沖洗”)結點代碼。
在優(yōu)選實施方案中,通過初始化把可能的孩子和其它信息裝入到該數(shù)據(jù)結構中,初始化包括基于PDL文件336和層次選擇338的編譯方法。表示協(xié)議的數(shù)據(jù)結構中的任意記錄包含下列信息。
(a)用于查找下一個的一列孩子(作為類型ID)。例如,對以太網類型2來說,孩子是以太類型(IP、IPX等等,在圖17中顯示為1712)。這些孩子被編譯進類型代碼。IP的代碼是64,IPX的是83,等等。
(b)對列表中的每個ID,需要比較一列子識別模式。例如,列表中的64:080016指示要查找的值是0800(十六進制),對孩子來說是類型ID 64(它是IP協(xié)議)。列表中的83:813716指示要查找的值是8137(十六進制),對孩子來說是類型ID83(它是IPX協(xié)議),等等。
(c)為構造該流的標識簽名而執(zhí)行的提取操作。所用的格式是(位移、長度、流_簽名_值_標識符),流_簽名_值_標識符指示提取出的記錄進入到簽名中的什么地方,包括需要執(zhí)行的操作(與、或等等)。如果還有一個散列鍵部分,那么也包含它上面的信息。例如,對以太類型的分組,在簽名中使用2-字節(jié)類型(圖17中的1706)。此外,包括類型的1-字節(jié)的散列。此外注意子協(xié)議在位移14開始。
附加條目可以是“折疊”。折疊用來減少3-D結構的存儲需求。既然每個協(xié)議ID的2-D數(shù)組可以被稀疏填充,只要單個記錄不相互沖突就可以把多個數(shù)組結合成單一的2-D數(shù)組。然后用折疊號把關聯(lián)每個元素。對給定的查找來說,查找的折疊號必須匹配折疊號記錄。下面將更詳細地描述折疊。
就以太網來說,下一協(xié)議字段可以指示長度,它告訴解析器這是IEEE類型的分組,并且下一協(xié)議是在別處。通常,下一協(xié)議字段包含指示下一個協(xié)議(即子協(xié)議)的值。
用于解析器子系統(tǒng)的記錄點被稱為虛擬基層,并且包含可能的第一個孩子,即分組類型。這里包括一個用高級協(xié)議描述語言(PDL)書寫的一個協(xié)議集實例。該集合包括PDL語言和描述所有可能的記錄點(即虛擬基層)的文件virtual.pdl。這個文件中只有一個孩子01指示以太網。這樣,該特定實例只能處理以太網分組。在實踐中可以有多個記錄點。
在一種實施方案中,分組攔截設備為攔截到的每個分組提供一個報頭并向監(jiān)控器300提供指示分組類型的輸入。這個報頭用來確定虛擬基層記錄點給解析器子系統(tǒng)。這樣,即使在基層解析器子系統(tǒng)也能夠識別分組類型。
最初,查找從在由攔截設備提供的報頭中獲得的虛擬基層的孩子開始。就這個例子來說,它有ID值01,它是用于以太網分組的整個3-D結構中的2-D數(shù)組。
這樣,實現(xiàn)模式分析方法304(例如,圖10中的模式識別引擎(PRE)1006)的硬件進行查找以確定有協(xié)議ID 01的2-D數(shù)組的孩子(如果有的話)。在優(yōu)選實施方案中采用3-D數(shù)據(jù)結構,硬件PRE 1006最多可以同時查找四個長度(即大小)。這樣,方法304以四個長度為一組進行查找。從協(xié)議ID 01開始,查找的前兩組3-D位置是(1,1,1)(1,1,2)(1,2,1)(1,2,2)(1,3,1)(1,3,2)(1,4,1)(1,4,2)在查找的每一步,分析方法304檢查分組和3-D結構以查看是否有匹配(通過查看結點代碼)。如果用代碼結點沒有發(fā)現(xiàn)有效數(shù)據(jù),就增加大小(最大可以到4)并隨后增加位移。
繼續(xù)這個例子,假定模式分析方法304在1、2、12找到了一些東西。這時,我們意謂方法304已經在分組位移12發(fā)現(xiàn)了協(xié)議ID值01(以太網)的數(shù)據(jù),在該分組中有兩字節(jié)(8位位組)長的信息與下一(子)協(xié)議有關。例如,該信息可以是表示為子識別模式的這個協(xié)議的孩子。從該數(shù)據(jù)結構獲得可以獲得分組的可能的子識別模式列表部分。
以太網分組結構有兩種,以太類型的分組和較新的IEEE類型,并且對它們兩個來說指示孩子的分組位置也不相同。以太類型分組中的該位置指示IEEE類型的孩子“長度”,因此對以太網分組要確定“下一協(xié)議”位置包含值還是長度(這被稱為“LENGTH”操作)。成功的LENGTH操作由小于或等于05DC16的內容來指示,那么這是IEEE類型的以太網幀。在這種情況下,要在別處查找子識別模式。否則,該位置包含指示孩子的值。
注意雖然記錄的這個能力是值(例如,子協(xié)議ID)或長度(指示進一步分析以確定子協(xié)議)只用于以太網分組,但將來其它分組可能以正在被修改而結束。因此,這個能力在PDL文件中以宏的形式仍然能夠使將來的分組被解碼。
繼續(xù)這個例子,假定LENGTH操作失敗。那樣我們就有了一個以太類型的分組,并且下一協(xié)議字段(包含子識別模式)是從位移12開始的兩個字節(jié),在17A中顯示為分組字段1702。這將是圖17A的表1712中所示的以太類型的一個孩子。PRE使用數(shù)據(jù)結構中的信息檢查用于找到的2-字節(jié)子識別模式的是什么ID代碼。例如,如果子識別模式是0800(Hex),那么該協(xié)議是IP。如果子識別模式是0BAD(Hex)該協(xié)議是VIP(VINES)。
注意替代實施方案可以保持一個單獨的表格,其中包括所有的子識別模式和它們的對應協(xié)議ID。
繼續(xù)這個例子,假定位于1、2、12的子識別模式是080016,指示IP協(xié)議。IP協(xié)議的ID代碼是6410。繼續(xù)以太類型的實例,一旦解析器匹配了該協(xié)議—在這個例子中,該協(xié)議類型是IP,ID是6410—的可能的孩子中的其中一個,那么解析器就繼續(xù)查找下一層。ID是64,長度未知,位移已知大于等于14個字節(jié)(12字節(jié)的位移用于類型,加上類型的長度2個字節(jié)),因此對3-D結構的查找從位于分組位移14的位置(64,1)開始。在位于分組位移14的位置(64,2)上發(fā)現(xiàn)一個填充的結點。報頭細節(jié)在圖17B中顯示為1750??赡艿暮⒆语@示在表1752中。
另外,假定在(1,2,12)上有一個長度121110。指示這是一個IEEE類型的以太網幀,它在別處存儲它的類型。PRE現(xiàn)在繼續(xù)在同一層上查找,但是是針對一個新ID進行,即IEEE類型以太網幀的ID。IEEE類型分組的協(xié)議ID是16,因此PRE從分組位移14開始用ID 16繼續(xù)查找3-D空間。
在我們的例子中假定在位于分組位移14的(16,2)上發(fā)現(xiàn)了一個“協(xié)議”結點代碼,并且下一個協(xié)議由子識別模式080016指定。這指示孩子是IP協(xié)議,它的類型ID是64。這樣查找從位于分組位移16的(16,1)繼續(xù)進行。
壓縮像上面所指出的那樣,3-D結構非常大,而且是稀疏填充的。例如,如果在每個位置上存儲32個字節(jié),那么長度是M*64*512*32,也就是M兆字節(jié)。如果M=10,000,那就是約10千兆字節(jié)。在解析器子系統(tǒng)中包括10GB的存儲器用于存儲數(shù)據(jù)庫308有些不切實際。因此在優(yōu)選實施方案中使用壓縮形式存儲數(shù)據(jù)。壓縮最好由編譯方法中的優(yōu)化器單元來執(zhí)行。
回想一下該數(shù)據(jù)結構是稀疏的。不同的實施方案可以采用不同的壓縮方案,它們均利用該數(shù)據(jù)結構的稀疏特性。一種實施方案使用多維行程編碼的改進形式。
另一種實施方案使用少一些的2-D結構來存儲信息,而它們又處于一個大的3-D結構之中。在優(yōu)選實施方案中使用第二種方案。
圖18A描繪了把3-D數(shù)組怎樣被看作是一組2-D數(shù)組,對每個協(xié)議(即協(xié)議ID的每個值)有一個2-D數(shù)組。對多達M個協(xié)議ID來說2-D結構顯示為1802-1、1802-2、...、1802-M。一個表格記錄顯示為1804。注意表格中的空隙是用來描繪每個2-D結構表通常也很大。
考慮表示可能的協(xié)議的樹的集合。每個結點表示一個協(xié)議,一個協(xié)議可以有孩子或者是一個終端結點。樹的基(根)把所有的協(xié)議類型都作為孩子。其它結點形成在樹中不同層上的結點,從第1層到樹的終端結點。基結點中的一個元素可以用結點ID 1作參考符號,底部結點中的另一個元素可以用結點ID 2用參考符號等等。因為樹是從根開始遍歷的,在樹中可能有一些同一結點下一次被引用的點。例如,當像Telnet這樣的應用協(xié)議能夠同時運行在幾個像TCP或UDP這樣的傳輸連接上時將會發(fā)生這種情況。與其重復Telnet結點,不如在模式數(shù)據(jù)庫308中只表示一個可以有幾個父親的結點。這就減少了可觀的空間占用。
圖18A中的每個2-D數(shù)組中表示一個協(xié)議。為了能夠通過對每個有幾個父親的協(xié)議只使用一個數(shù)組以節(jié)省空間,在一種實施方案中,模式分析子方法保持“當前報頭”指針。3-D結構中的每個協(xié)議2-D數(shù)組的每個位置(位移)索引是從該特定協(xié)議的報頭起始處開始的相對位置。
2-D數(shù)組中的每一個都是稀疏的。優(yōu)化的下一步是核對每個2-D數(shù)組和所有其它2-D數(shù)組以找出能夠節(jié)省存儲器的2-D數(shù)組。這些2-D數(shù)組中有很多通常都是被稀疏填充的,每個當中只有少量有效記錄。因此,接下來用一個“折疊”方法把兩個或更多2-D數(shù)組結合成一個物理2-D數(shù)組,并且不丟失任意一個原始2-D數(shù)組的同一性(即,所有的2-D數(shù)組邏輯上連續(xù)存在)。折疊可以在任意2-D數(shù)組之間發(fā)生,而不管它們在樹中的位置,只要滿足一定條件即可。
假定正在考慮對兩個2-D數(shù)組進行折疊。命名第一個2-D數(shù)組為A,第二個為B。既然這兩個2-D數(shù)組都是被部分填充的,當且僅當這兩個2-D數(shù)組中的相同位置上沒有相互沖突的單個元素時可以把2-D數(shù)組B與2-D數(shù)組A結合在一起。如果結果是可折疊,那么2-D數(shù)組B中的有效記錄和2-D數(shù)組A中的有效記錄結合在一起產生一個物理2-D數(shù)組。但是,有必要能夠區(qū)別原始2-D數(shù)組A的記錄和2-D數(shù)組B中的記錄。例如,如果由2-D數(shù)組B表示的協(xié)議的父協(xié)議想要引用2-D數(shù)組B的協(xié)議ID,它現(xiàn)在必須改為引用2-D數(shù)組A。但是,只有那些原始2-D數(shù)組B中的記錄才是要查找的有效記錄。為了實現(xiàn)這一點,任意給定2-D數(shù)組中的每個元素都被標上一個折疊號。當創(chuàng)建原始樹時,用零折疊值初始化所有2-D數(shù)組中的所有元素。隨后,如果2-D數(shù)組B被折疊進2-D數(shù)組A中,2-D數(shù)組B中的所有有效元素都被復制到2-D數(shù)組A中的相應位置并且給它們與2-D數(shù)組A中的任意元素都不同的折疊號。例如,如果2-D數(shù)組A和2-D數(shù)組B都是樹中的原始數(shù)組(即以前未折疊過),那么在折疊后,所有的2-D數(shù)組A的記錄將仍然保持折疊號0,而2-D數(shù)組B的記錄現(xiàn)在都有了一個新的折疊值1。在2-D數(shù)組B被折疊進2-D數(shù)組A之后,需要通知2-D數(shù)組B的父親在它們的孩子的2-D數(shù)組物理位置中的更改和在預期的折疊值中的連帶更改。
這個折疊方法也可發(fā)生在兩個已經被折疊過的2-D數(shù)組之間,只要這兩個2-D數(shù)組中在相同2-D數(shù)組位置上沒有沖突的單個元素。如前所述,2-D數(shù)組B中的每個有效元素必須有一個分配給它們的唯一區(qū)別于2-D數(shù)組A的那些折疊號的折疊號。在2-D數(shù)組B被合并到2-D數(shù)組A中的時候通過給所有的2-D數(shù)組B折疊號加上一個固定值可以實現(xiàn)這一點。這個固定值是一個比原始2-D數(shù)組A中最大的折疊值還要大的值。需要指出的一點是,任意給定2-D數(shù)組的折疊號只與那個2-D數(shù)組有關而且并未跨越2-D數(shù)組的整個樹。
現(xiàn)在可以在兩個2-D數(shù)組的所有組合之間嘗試這個折疊方法,直到沒有可以折疊的2-D數(shù)組為止。這樣就可以大大減少2-D數(shù)組的總數(shù)。
無論何時當一個折疊發(fā)生時,都要對3-D結構(即所有2-D數(shù)組)進行查找以找到正在被折疊到另一個數(shù)組中的2-D數(shù)組的父親。以前被映射到標識一個單獨2-D數(shù)組的協(xié)議ID上的匹配模式現(xiàn)在必須替換成該2-D數(shù)組ID和下一個折疊號(即預期的折疊)。
這樣,在壓縮后的數(shù)據(jù)結構中,每個有效記錄包括用于該記錄的折疊號還有用于孩子的預期的折疊號。
圖18B中描繪了用在數(shù)據(jù)庫308中的數(shù)據(jù)結構的一種替代實施方案。這樣,像上面所描述的3-D結構那樣,它允許模式識別方法304通過在存儲器中檢索位置而不是執(zhí)行地址鏈接計算來執(zhí)行快速查找。該結構,像圖18A中的那樣,適于用硬件實現(xiàn),例如對與圖10中的模式識別引擎一起工作的實現(xiàn)來說就是這樣。
表1850被稱為協(xié)議表,對監(jiān)控器300已知的每個協(xié)議它都有一個記錄,并且包括每個協(xié)議的一些特征,包括對在報頭中的什么地方可以找到指定下一個協(xié)議(子識別模式)的字段的描述、下一協(xié)議字段的長度、指示報頭長度和類型的標記以及一個或多個限選器命令,限選命令可以為這一層上的這個協(xié)議的分組構造鍵部分和散列部分。
對任意協(xié)議還有一個或多個查找表(LUTs)。這樣這個實施方案的數(shù)據(jù)庫308還包括一組LUTs 1870。每個LUT擁有256個記錄,由從分組中的下一協(xié)議字段提取出的子識別模式中的一個字節(jié)進行索引。這樣的協(xié)議說明可以是幾個字節(jié)長,因此對任意協(xié)議都需要查找LUTs 1870中的幾個字節(jié)。
每個LUT記錄都包括一個指示內容的種類的2-位“結點代碼”,包括它的有效性。這個結點代碼可以是下列四個值之一(1)“協(xié)議”結點代碼,向模式識別引擎1006指示一個已知協(xié)議已經被識別;(2)“中間”結點代碼,指示一個多字節(jié)協(xié)議代碼已經被部分識別,這樣就允許在此之前把一組LUTs鏈接在一起;(3)“終端”結點代碼,指示目前更在被查找的協(xié)議沒有孩子,即該結點是協(xié)議樹中的一個最終結點;(4)“空”(也稱為“沖洗”或“無效”)結點代碼,指示沒有有效記錄。
除了結點代碼之外,每個LUT記錄還包括下一個LUT編號、下一個協(xié)議編號(用于查找協(xié)議表1850)、LUT記錄的折疊和預期的下一個折疊。像實現(xiàn)3-D表示的壓縮形式的實施方案中那樣,折疊用來減少LUTs集合的存儲需求。既然LUTs 1870可以被稀疏填充,只要單個記錄之間不相互沖突就可以把多個LUTs結合成一個單獨的LUT。隨后用折疊號關聯(lián)每個元素和它的原始LUT。
對一個給定的查找來說,查找的折疊號必須匹配查找表中的折疊號。預期的折疊從前一個查找表(“預期的下一個折疊”字段)中獲得。本實現(xiàn)用5-位來描述折疊,因此允許把最多32個表折疊成一個表。
使用圖18B中的數(shù)據(jù)結構時,當分組到達解析器時虛基層已經被預先確定或者是已知的。虛基層記錄告訴分組識別引擎在哪里找到分組中的第一個子識別模式。模式識別引擎隨后從分組提取出第一個子識別模式字節(jié)并用它們作為進入虛基層表(第一個LUT)的地址。如果用這個方法在指定的下一個LUT中查找到的記錄與在虛基層記錄中所指定的預期的下一個折疊值相匹配,那么就認為查找有效。隨后檢查結點代碼。如果它是中間結點就把從LUT查找獲得的下一個表字段被用作地址的最高有效位。下一個預期的折疊也從記錄中提取。模式識別引擎1006隨后把來自模式識別引擎的下一個字節(jié)用于下一個LUT查找。
這樣,PRE的操作繼續(xù)進行直至找到一個終端結點。在協(xié)議表1850中查找下一個(最初時是基層)協(xié)議以向PRE1006提供有關用分組(在解析器子系統(tǒng)1000的輸入緩沖區(qū)存儲器1008中)中的什么字段來獲得下一個協(xié)議的子識別模式的信息,包括該字段的大小。子識別模式字節(jié)從輸入緩沖區(qū)存儲器1008中取出。構成子識別模式的字節(jié)數(shù)現(xiàn)在也是已知的。
協(xié)議代碼字節(jié)的第一個字節(jié)被用作下一個LUT中的查找。如果LUT查找產生一個指示協(xié)議結點或終端結點的結點代碼,就設置下一個LUT和下一個預期的折疊,并且來自LUT查找的“下一協(xié)議”也被用作進入?yún)f(xié)議表1850的索引。這就給限選器1007提供了指令以及在分組中的什么地方獲得用于下一協(xié)議的字段。這樣,PRE 1006繼續(xù)執(zhí)行直到它完成了對所有字段(即協(xié)議)的處理為止,由到達一個終端結點指示完成。
注意當檢查一個子識別模式和一個表時總有一個預期的折疊。如果該預期折疊匹配表中的折疊信息,就用它來決定下一步做什么。如果折疊不匹配,優(yōu)化器操作就結束了。
還要注意替代實施方案可以使用不同大小的LUTs,然后由不同數(shù)量的子識別模式檢索LUT。
這個實施方案的當前實現(xiàn)允許最高達四個字節(jié)的子識別模式。超過四個字節(jié)的子識別模式被看作特殊情況。
在優(yōu)選實施方案中,數(shù)據(jù)庫由編譯方法產生。編譯方法先構造協(xié)議之間所有鏈接的一個單一協(xié)議表。鏈接由父協(xié)議和子協(xié)議之間的連接組成。每個協(xié)議可以有零個或多個孩子。如果一個協(xié)議有孩子,就創(chuàng)建一個由父協(xié)議、子協(xié)議、子識別模式和子識別模式大小組成的鏈接。編譯器首先提取出子識別模式,它超過兩個字節(jié)長。既然只有這些信息中的少數(shù),就對它們分開處理。為子識別模式大小是兩個字節(jié)的每個鏈接創(chuàng)建下一個子鏈接。
所有的鏈接隨后被編成256個記錄的LUTs。
然后執(zhí)行優(yōu)化。優(yōu)化的第一步是核對每個表和所有其它表以找到共享一個表的那些表。這個方法按照和上述2-D數(shù)組相同的方式進行,但現(xiàn)在是為了稀疏查找表。
初始化方法(例如,編譯器方法310)的一部分用包括指令、源地址、目的地址和長度的數(shù)據(jù)條目裝載限選器指令數(shù)據(jù)庫。當PRE 1006發(fā)送限選器指令時它把這個指令作為進入限選器指令數(shù)據(jù)庫的位移來發(fā)送。指令或操作代碼告訴限選器從進入的分組中提取什么并把它放到流簽名中的什么位置上。向流簽名的特定字段寫入信息會自動產生散列。該指令還能夠告訴限選器怎樣確定特定協(xié)議的連接狀態(tài)。
注意除了編譯PDL文件之外替代實施方案也可以產生模式、解析和提取數(shù)據(jù)庫。
編譯方法現(xiàn)在更詳細地描述編譯方法310。方法310包括創(chuàng)建解析模式和提取數(shù)據(jù)庫308和狀態(tài)處理指令數(shù)據(jù)庫326,308向解析子系統(tǒng)301提供需要用來解析分組并提取標識信息的信息,326提供需要在狀態(tài)處理操作328中執(zhí)行的狀態(tài)方法。
編譯器的輸入包括描述每個可以出現(xiàn)的協(xié)議的一組文件。這些文件是方便的協(xié)議描述語言(PDL),這是一個高級語言。PDL用于規(guī)定新協(xié)議和新層,包括新應用。PDL獨立于計算機網絡中可用的分組和協(xié)議的不同類型。一組PDL文件用來描述什么信息與分組有關以及什么分組需要進行解碼。PDL還用來規(guī)定狀態(tài)分析操作。這樣,解析器子系統(tǒng)和分析器子系統(tǒng)能夠適應并適合多種不同類型的報頭、層和成分,并需要被提取或估計,例如為了構造唯一簽名。
對每個分組類型和每個協(xié)議有一個文件。這樣,對以太網分組有一個PDL文件,對幀中繼分組也有一個PDL文件。PDL文件被編譯形成一個或多個數(shù)據(jù)庫,它們能夠使監(jiān)控器300在分組上執(zhí)行不同的協(xié)議特定操作,其中任意協(xié)議的協(xié)議報頭根據(jù)父協(xié)議或分組中所用的協(xié)議而被放在不同的位置上。這樣,分組監(jiān)控器就能夠根據(jù)分組內容適應不同的協(xié)議。尤其解析器子系統(tǒng)301能夠針對不同類型的分組提取不同類型的數(shù)據(jù)。例如,監(jiān)控器能夠知道怎樣解釋以太網分組,包括對報頭信息進行解碼,并且還知道怎樣解釋幀中繼分組,包括對報頭信息進行解碼。
例如,PDL文件的集合可以包括普通以太網分組文件。對每個變體以太網分組還包括一個PDL文件,例如IEEE以太網文件。
協(xié)議的PDL文件提供編譯方法310需要用來產生數(shù)據(jù)庫308的信息。該數(shù)據(jù)庫依次告訴解析器子系統(tǒng)怎樣解析和/提取信息,包括要為流簽名提取的一個或多個協(xié)議-特定成分,怎樣使用這此些成分構造流簽名,在分組中的什么地方尋找這些成分,在哪里尋找任意子協(xié)議以及要尋找什么子識別模式。對一些協(xié)議來說,提取出的成分可能包括源和目的地址,并且PDL文件可以包括使用這些地址構造鍵的順序。例如,以太網幀有在構造更好的流簽名中有用的終點地址。這樣以太網分組的PDL文件包括關于解析器子系統(tǒng)將怎樣提取源和目的地址上的信息,其中包括那些地址在什么位置以及它們的大小。例如,在幀中繼基層中沒有特定終點地址幫助更好地識別流,因此對那些類型的分組來說PDL文件不包括將導致解析器子系統(tǒng)提取終點地址的信息。
一些協(xié)議還包括有關連接的信息。TCP就是這樣的協(xié)議的一個實例。這樣的協(xié)議使用在每個分組中都存在的連接標識符。這樣一個協(xié)議的PDL文件包括關于那些連接標識符是什么、它們在哪里以及它們的長度是多少的信息。在TCP實例中,例如運行在IP上,這些信息就是端口號。PDL文件還包括關于是否有應用到連接和斷開的狀態(tài)以及可能的孩子是什么狀態(tài)的信息。所以,在這些層中的每一層上,分組監(jiān)控器300認識到更多關于該分組的信息。分組監(jiān)控器300使用連接標識符能夠識別是特定流的一部分的特定分組。一旦流被識別出來,系統(tǒng)就能夠確定當前狀態(tài)和應用什么狀態(tài)處理存在于下一層中的連接和斷開直到這些特定分組。
對優(yōu)選實施方案中所用的特定PDL來說,一個PDL文件可以包括零個或多個FIELD語句,每個FIELD語句定義分組中一個特定的位或字節(jié)串(即一個字段)。一個PDL文件還可以包括零個或多個GROUP語句,每個GROUP語句用來把幾個定義過的字段綁在一起。一組這樣綁在一起的字段被稱為一個組。一個PDL文件還可以包括零個或多個PROTOCOL語句,每個PROTOCOL語句定義在協(xié)議的報頭中字段和組的順序。一個PDL文件還可以包括零個或多個FLOW語句,每個FLOW語句通過描述地址、協(xié)議類型和端口號在分組中的位置來定義一個流。FLOW語句包括對怎樣用狀態(tài)操作確定這個協(xié)議的子流的描述。相關的狀態(tài)可以有用于管理和維護隨著對流中的更多分組進行分析而認識到的新狀態(tài)。
圖24顯示了一組PDL文件,針對在IP之上運行TCP的以太網分組的分層結構。Common.pdl(2403)是包含通用協(xié)議定義—即不同網絡協(xié)議中的通用字段的一些字段定義一的文件。Flows.pdl(2405)是包含通用流定義的文件。Virtual.pdl(2407)是包含所用虛基層的定義的PDL文件。Ethernet.pdl(2411)是包含以太網分組的定義的文件。這里描述了在以太類型對IEEE類型以太網文件上的決定。如果這是以太類型,就從文件Ethertype.pdl(2413)作出選擇。在一種替代實施方案方案中,以太類型選擇定義可以在同一個以太網文件2411中。在一個典型的實現(xiàn)中,可以包括針對其它以太網類型的PDL文件。IP.pdl(2415)是包含Internet協(xié)議的分組定義的PDL文件。TCP.pdl(2417)是包含傳輸控制協(xié)議—在這種情況下就是IP協(xié)議的傳輸服務—的分組定義的PDL文件。除了提取協(xié)議信息之外TCP協(xié)議定義文件還在連接識別方法中幫助處理狀態(tài)。在一個典型的文件集合中,還要有用戶數(shù)據(jù)報協(xié)議(UDP)定義的文件UDP.pdl。RPC.pdl(2419)是包含遠程過程調用的分組定義的PDL文件。
NFS.pdl(2421)是包含網絡文件系統(tǒng)的分組定義的PDL文件。對于監(jiān)控器300可能遇到的所有協(xié)議通常也要包括其它PDL文件。
編譯處理310的輸入是所有感興趣的協(xié)議的PDL文件(例如,圖24中的文件)的集合。方法310的輸入還可以包括圖3中顯示為數(shù)據(jù)報層次選擇338的分層信息。層次選擇信息描述了協(xié)議的分層情況—在任意特定協(xié)議之上運行的是什么協(xié)議。例如,IP可以運行在以太網和很多其它類型的分組上。TCP可以運行在IP之上。UDP也可以運行在IP之上。當沒有明確包括分層信息時,分層信息是內在的;PDL文件包括子協(xié)議,這就提供了分層信息。
圖25中描繪了編譯處理310。編譯器把PDL源文件裝入高速暫存存儲器中(2503步)并檢查文件的語法(解析步驟2505)。一旦完成,編譯器就創(chuàng)建一個包含所有解析元素的中間文件(2507步)。中間文件的格式被稱為“編譯過的協(xié)議語言”(CPL)。CPL指令有固定的分層格式,并包括每個層及一層的整個樹所要求的所有模式、提取和狀態(tài)。CPL文件包括協(xié)議的數(shù)量及協(xié)議定義。每個協(xié)議的協(xié)議定義可以包括一個或多個協(xié)議名、協(xié)議ID、報頭節(jié)、組定義節(jié)、任意特定層的節(jié)、通告節(jié)、有效負載節(jié)、子節(jié)和狀態(tài)節(jié)。隨后由優(yōu)化器運行該CPL文件以創(chuàng)建將由監(jiān)控器300使用的最終數(shù)據(jù)庫。那些本領域的技術人員要清楚編譯處理310的替代方案可以包括不同形式的中間輸出,或者根本沒有中間輸出直接產生最終數(shù)據(jù)庫。
在創(chuàng)建解析元素之后,編譯器創(chuàng)建流簽名元素(2509步)。這在CPL中創(chuàng)建了在構造流簽名(散列鍵)和在層間建立鏈接的每個PDL模塊的每一層上必需的提取操作。
隨著流簽名操作完成,PDL編譯器創(chuàng)建(2511步)從每個PDL模塊提取有效負載元素所必需的操作。這些有效負載元素由更高層上的其它PDL文件中的狀態(tài)用在處理當中。
最后一步是創(chuàng)建每個PDL模塊所需要的狀態(tài)操作。從PDL文件編譯并以CPL形式創(chuàng)建狀態(tài)操作以為后用(2513步)。
CPL文件現(xiàn)在通過優(yōu)化器運行,優(yōu)化器產生由監(jiān)控器300使用的最終數(shù)據(jù)庫。
協(xié)議定義語言(PDL)參考指南(A0.02版)這里包含的是協(xié)議定義語言(PDL)的參考指南(“指南”),在本發(fā)明的一個方面中PDL允許自動生成由解析器和分析器子-系統(tǒng)所使用的數(shù)據(jù)庫,并且還允許監(jiān)控器有包括新的以及修改過的協(xié)議和應用的能力。
版權公告本文檔包含專利在內的部分內容中包含有與版權保護有關的材料。版權所有者(Apptitude有限公司,圣約瑟,加利福尼亞州,原Technically Elite有限公司)不反對由本專利文檔或本專利公開內容或這個文檔的任何人復制副本,因為它已經出現(xiàn)在專利與商標事務處的文檔和記錄中,但另外保留所有的版權。
版權所有Apptitude有限公司(前Technically Elite有限公司)。保留所有權利。
1.導論所發(fā)明的協(xié)議定義語言(PDL)是用來描述網絡協(xié)議及協(xié)議報頭中的所有字段的專用語言。
在本指南中,當沒有和其它類型的描述發(fā)生混淆的危險時,協(xié)議描述(PDL文件)被看作是PDL或規(guī)則。
PDL使用和C編程語言與PERL腳本語言的數(shù)據(jù)結構定義部分相似的形式和組織方式。因為PDL來自一種用來對網絡分組接觸進行解碼的語言,作者已經把該語言形式和分組解碼的要求混合在了一起。這產生了一種非常相似并適用于描述分組內容及表示一個流所需的細節(jié)的表示語言。
1.1概述PDL是非過程化的第四代語言(4GL)。這意味著描述需要做什么而不描述怎樣去做。怎樣做的細節(jié)隱藏在編譯器和編譯后的協(xié)議規(guī)劃(CPL)優(yōu)化程序中。
另外,它還用來通過定義哪個字段是地址字段、哪個是協(xié)議類型字段等來描述網絡流。
一旦寫好了一個PDL文件,用Netscope編譯器(nsc)對其進行編譯,產生MeterFlow數(shù)據(jù)庫(MeterFlow.db)和Netscope數(shù)據(jù)庫(Netscope.db)。MeterFlow數(shù)據(jù)庫包含流定義,Netscope數(shù)據(jù)庫包含協(xié)議報頭定義。
這些數(shù)據(jù)庫由程序使用,像mfkeys,產生流鍵(也稱為流簽名);mfcpl,以CPL形式產生流定義;mfpkts,產生所有已知協(xié)議的實例分組;和netscope,產生snifferTM和tcpdump文件。
1.2 指南慣例本指南自始至終都將使用下列慣例小寫courier字體指示函數(shù)名的C代碼實例。書寫函數(shù)時要在函數(shù)名后跟括號[function()],對變量只寫名字[variables],結構名前面要加“struct”[struct packet]。
斜體指示文件名(例如,mworks/base/h/base.h)。通常相對于分布的根目錄書寫文件名。
常量用十進制表示,除非寫成“0x...”這樣十六進制數(shù)的C語言符號。
注意在PDL文件中兩個連字符(--)之后的任意行上的任何內容都被編譯器忽略掉。也就是說,它們是注釋。
2.程序結構一個MeterFlow解碼與流集合是非空的語句序列。在MeterFlowPDL中有四種基本類型的語句或定義可用。
FIELD,GROUP,PROTOCOL和FLOW。
2.1 FIELD定義FIELD定義用來定義分組中特定的位或字節(jié)串。FIELD定義格式如下Name FIELDSYNTAX Type[{Enums}]DISPLAY-HINT“FormatString”LENGTH“Expression”FLAGS FieldName[,F(xiàn)ieldName2]LOOKUP LookupType[Filename]ENCODING EncodingType
DEFAULT“value”DESCRIPTION“Description”只有FIELD和SYNATX行是必需的。所有其它行都是屬性行,定義關于FIELD的特殊特征。屬性行是可選的并且可以任意順序出現(xiàn)。下面詳細描述了每一個屬性行2.1.1 SYNTAX Type[{Enums}]這個屬性定義類型,并且如果類型是INT、BYTESTRING、BITSTRING或SNMPSEQUENCE類型的話定義FIELD的枚舉類型。當前定義的類型是
2.1.2 DISPLAY-HINT“FormatString”這個屬性用于指定怎樣打印FIELD的值。當前支持的格式是
2.1.3 LENGTH“Expression”這個屬性為確定FIELD的長度定義一個表達式。表達式是算術表達式,并可以通過在引用的字段的名字前面加$而引用分組中其它FIELD的值。例如,如果tcpHeaderLen是為當前分組而定義的另一個字段,“($tcpHeaderLen*4)-20”就是一個有效表達式。
2.1.4 FLAGS FieldFlags這個屬性定義FIELD的幾個特殊標記。當前支持的字段標記是
2.1.5 ENCAP FieldName[,F(xiàn)ieldName2]這個屬性定義一個分組怎樣被封裝在另一個分組中。由FieldName字段的值確定要封裝到的分組。如果用FieldName沒有找到分組就嘗試用FieldName2。
2.1.6 LOOKUP LookupType[Filename]這個屬性定義怎樣查找特定FIELD值的名字。當前支持的LookupType是
2.1.7 ENCODING EncodingType這個屬性定義怎樣對FIELD進行編碼。目前僅支持BER編碼類型(針對由ASN.1定義的基本編碼規(guī)則)。
2.1.8 DEFAULT“value”
這個屬性定義當產生這個協(xié)議的實例分組時用于這個字段的缺省值。
2.1.9 DESCRIPTION“Description”這個屬性定義對FILED的說明。僅用于提供信息目的。
2.2 GROUP定義GROUP定義用來把幾個相關FIELD綁在一起。GROUP定義格式如下Name GROUPLENGTH“Expression”O(jiān)PTIONAL“Condition”SUMMARIZE“Condition”“FormatString”[“Condition”“FormatString”...]DESCRIPTION“Description∷={Name=FieldOrGroup[,Name=FieldOrGroup...}”只有GROUP行和∷=行是必需的。所有其它行都是屬性行,定義GROUP的特殊特性。屬性行是可選的并且可以任意順序出現(xiàn)。下面詳細描述每個屬性行2.2.1 LENGTH“Expression”這個屬性為確定GROUP的長度定義一個表達式。表達式是算術表達式,并可以通過在引用的字段名字前面加$而引用分組中其它FIELD的值。例如,如果tcpHeaderLen是為當前分組而定義的另一個分組,“($tcpHeaderLen*4)-20”就是一個有效表達式。
2.2.2 OPTIONAL“Condition”這個屬性為確定GROUP是否存在定義一個條件。有效條件定義在下面的Condition節(jié)中。
2.2.3 SUMMARIZE“Condition”“FormatString”[“Condition”“FormatString”...]這個屬性定義怎樣以詳細模式顯示一個GROUP??梢詾槊總€條件(Condition)指定一個不同的格式(FormatString)。有效條件定義在下面的Condition節(jié)中。通過在FIELD的名字前面加上$可以在FormatString中引用任意FIELD的值。除了FIELD名之外還有其它幾種特殊的$關鍵字。
2.2.4 DESCRIPTION“Description”這個屬性定義對GROUP的說明。僅用于提供信息目的。
2.2.5 ∷={Name=FieldOrGroup[,Name=FieldOrGroup...]}這個屬性定義GROUP中字段或子群的順序。
2.3 PROTOCOL定義PROTOCOL定義用來定義協(xié)議報頭中FIELD和GROUP的順序。PROTOCOL定義格式如下Name PROTOCOLSUMMARIZE“Condition”“FormatString”[“Condition” “FormatString”...]DESCRIPTION “Description”REFERENCE“Reference”∷={Name=FieldOrGroup[,Name=FieldOrGroup...]}只有PROTOCOL行和∷=行是必需的。所有其它行都是屬性行,為PROTOCOL定義特殊的特征。屬性行是可選的并且可以任意順序出現(xiàn)。下面詳細描述了每個屬性行2.3.1 SUMMARIZE“Condition”“FormatString”[“Condition”“FormatString”...]這個屬性定義怎樣以摘要模式顯示一個PROTOCOL??梢詾槊總€條件(Condition)指定一個不同的格式(FormatString)。有效條件定義在下面的Condition節(jié)中。通過在FIELD的名字前面加上$可以在FormatString中引用任意FIELD的值。除了FIELD名之外還有其它幾種特殊的$關鍵字。
2.3.2 DESCRIPTION“Description”這個屬性定義對PROTOCOL的說明。僅用于提供信息的目的。
2.3.3 REFERENCE“Reference”這個屬性定義用來確定協(xié)議格式的參考材料。僅用于提供信息的目的。
2.3.4 ∷={Name=FieldOrGroup[,Name=FieldOrGroup...]}這個屬性定義PROTOCOL中FIELD和GROUP的順序。
2.4 FLOW定義FLOW定義用來通過描述地址、協(xié)議類型和端口號在分組中的什么地方來定義網絡流。FLOW定義格式如下Name FLOWHEADER{Option[,Option...]}DLC-LAYER{Option[,Option...]}NET-LAYER{Option[,Option...]}CONNECTION{Option[,Option...]}PAYLOAD{Option[,Option...]}CHILDREN{Option[,Option...]}STATE-BASEDSTATES“Definitions”只有FLOW行是必需的。所有其它行都是屬性行,定義FLOW的一些特殊特征。屬性行是可選的并可以任意順序出現(xiàn)。但是,必須至少有一個屬性行。下面詳細描述了每個屬性行2.4.1 HEADER{Option[,Option...]}這個屬性用來描述協(xié)議報頭的長度。當前支持的選項是
2.4.2 DLC-LAYER{Option [,Option...]}如果協(xié)議是數(shù)據(jù)鏈路層協(xié)議,就由這個屬性描述它。當前支持的選項是
2.4.3 NET-LAYER{Option[,Option...]}如果該協(xié)議是網絡層協(xié)議,就由這個屬性描述。當前支持的選項是
2.4.4 CONNECTION{Option[,Option...]}如果該協(xié)議是面向連接的協(xié)議,那么這個屬性描述怎樣建立及斷開連接。當前支持的選項是
2.4.5 PAYLOAD{Option[,Option...]}這個屬性描述應該存儲多少來自這種類型的分組的有效負載以在后來的分析中使用。當前支持的選項是
2.4.6 CHILDREN{Option[,Option...]}這個屬性描述怎樣確定子協(xié)議。當前支持的選項是
2.4.6 STATE-BASED這個屬性指示該流是基于狀態(tài)的流。
2.4.7 STATES“Definitions”這個屬性描述怎樣用狀態(tài)確定這個協(xié)議的子流。從下面的狀態(tài)定義可以知道怎樣定義這些狀態(tài)。
2.5 條件條件和OPTIONAL及SUMMARIZE屬性一起使用,由下列組成
Value1和Value2可以是FIELD引用(字段名前面加$)或常量值。注意目前不支持復合條件語句(使用AND和OR)。
2.6 STATE定義運行在數(shù)據(jù)網絡上的很多應用利用復雜的方法通過使用多種狀態(tài)來給流量分類。狀態(tài)定義用于管理和維護從來自網絡的流量中認識到的狀態(tài)。
狀態(tài)定義的基本格式是StateNameOperand Parameters[Operand Parameters]用下面的操作數(shù)描述特定流的不同狀態(tài)2.6.1 CHECKCONNECT,operand檢查連接。一旦連接上就執(zhí)行operand。
2.6.2 GOTO state轉到state,使用當前分組。
2.6.3 NEXT state轉到state,使用下一個分組。
2.6.4 DEFAULT operand當所有其它操作都失敗時執(zhí)行operand。
2.6.5 CHILD protocol跳轉到子protocol并在這個孩子中執(zhí)行基于狀態(tài)的處理(如果有的話)。
2.6.6 WAIT numPackets,operand1,operand2等待指定數(shù)量的分組。當已經接收到指定數(shù)量的分組時執(zhí)行operand1。當接收到一個分組但還小于指定的分組數(shù)量時執(zhí)行operand2。
2.6.7 MATCH‘string’weight offset LF-offset range LF-range,operand在分組中查找‘string’,如果找到了就執(zhí)行operand2.6.8 CONSTANT number offset range,operand在分組中檢查常數(shù),如果找到就執(zhí)行operand2.6.9 EXTRACTIP offset destination,operand從分組中提取IP地址然后執(zhí)行operand。
2.6.10 EXTRACTPORT offset destination,operand從分組中提取端口號然后執(zhí)行operand。
2.6.11 CREATEREDIRECTEDFLOW,operand創(chuàng)建一個改變了方向的流然后執(zhí)行operand。
3.實例PDL規(guī)則下面一節(jié)包含PDL規(guī)則文件的幾個實例。
3.1 以太網下面是針對以太網的PDL實例<pre listing-type="program-listing"><![CDATA[ MacAddress FIELD SYNTAX BYTESTRING(6) DISPLAY-HINT“1x” LOOKUP MACADDRESS DESCRIPTION “MAC layer physical address” etherType FIELD SYNTAX INT(16) DISPLAY-HINT“1x” LOOKUP FILE “EtherType.cf” DESCRIPTION “Ethernet type field” etherData FIELD SYNTAX BYTESTRING(46..1500) ENCAPetherTypeDISPLAY-HIND “HexDump” DESCRIPTION “Ethernet data” ethernetPROTOCOL DESCRIPTION “Protocol format for an Ethernet frame” REFERENCE “RFC 894” ∷={ MacDest=macAddress,MacSrc=macAddress, EtherType=etherType, Data=etherData} ethernetFLOW HEADER{LENGTH=14} DLC-LAYER { SOURCE=MacSrc, DESTINATION=MacDest, TUNNELING, PROTOCOL } CHILDREN {DESTINATION=EtherType,LLC- CHECK=11c}]]></pre>3.2 IPV4這里是針對IP協(xié)議的PDL實例<pre listing-type="program-listing"><![CDATA[ ipAddress FIELD SYNTAX BYTESTRING(4) DISPLAY-HINT“l(fā)d.” LOOKUP HOSTNAME DESCRIPTION “IP address”ipVersion FIELD SYNATX INT(4) DEFAULT“4” ipHeaderLength FIELD SYNTAX INT(4) ipTypeofService FIELD SYNTAXBITSTRING(8){minCost(1), maxReliability(2),maxThruput(3),minDelay(4)} ipLength FIELD SYNTAX UNSIGNED INT(16) ipFlagsFIELD SYNTAX BITSTRING(3){moreFrags(0), dontFrag(1)} ipProtocol FIELD SYNTAX INT(8) LOOKUP FILE“IpProtocol.cf” ipData FIELD SYNTAX BYTESTRING(0..1500) ENCAP ipProtocol DISPLAY-HINT“HexDump” ip PROTOCOL SUMMARIZE “$FragmentOffset!=0” “IPFragment ID=$Identification Offset=$FragmentOffset”“Default” “IP Protocol=$Protocol” DESCRIPTION “Protocol format for the Internet Protocol” REFERENCE “RFC 791” ∷={Version=ipVersion,HeaderLength=ipHeadLength, TypeOfService=ip TypeOfService,Length=ipLength, Identification=UInt16,IpFlags=ipFlags, FragmentOffset=ipFragmentOffset,TimeToLive=Int8, Protocol=ipProtocol,Checksum=ByteStr2, IpSrc=ipAddress,IpDest=ipAddress,Options=ipOptions, Fragment=ipFragment,Data=ipData} ipFLOW HEADER {LENGTH=HeaderLength,IN-WORD} NET-LAYER { SOURCE=IpSrc, DESTINATION=IpDest, FRAGMENTATION=IPV4, TUNNELING } CHILDREN{DESTINATION=Protocol} ipFragData FIELD SYNTAX BYTESTRING(1..1500) LENGTH “ipLength-ipHeaderLength*4” DISPLAY-HINT“HexDump” ipFragment GROUP OPTIONAL “$FragmentOffset!=0” ∷={Data=ipFragData}ipOptionLength FIELD SYNTAX UNSIGNED INT(8) DESCRIPTION “Length of IP option” ipOptionDataFIELD SYNTAX BYTESTRING(0..1500) ENCAP ipOptionCode DISPLAY-HINT “HexDump” ipOptions GROUP LENGTH “(ipHeaderLength*4)-20” ∷={ Code=ipOptionCode, Length=ipOptionLength, Pointer=UInt8, Data=ipOptionData}]]></pre>3.3 TCP這里是針對TCP協(xié)議的PDL實例<pre listing-type="program-listing"><![CDATA[ tcpPortFIELD SYNTAXUNSIGNED INT(16) LOOKUPFILE“TcpPort.cf” tcpHeaderLengthFIELD SYNTAXINT(4) tcpFlags FIELD SYNTAXBITSTRING(12){fin(0),syn(1),rst(2), psh(3), ack(4),urg(5)} tcpDataFIELD SYNTAXBYTESTRING(0..1564)LENGTH “($ipLength-($ipHeaderLength*4))- ($tcpHeaderLen*4)” ENACP tcpPort DISPLAY“HexDump” tcp PROTOCOL SUMMARIZE “Default” “TCP ACK=$Ack WIN=$WindowSize” DESCRIPTION “Protocol format the Transmission Control Protocol” REFERENCE “RFC 973” ∷={SrcPort=tcpPort,DestPort=tcpPort,SequenceNum=UInt32, Ack=UInt32, HeaderLength=tcpHeaderLen , TcpFlags=tcpFlags, WindowSize=UInt16,Checksum=ByteStr2, UrgentPointer=UInt16,Options=tcpOptions,Data=tcpData} tcp FLOW HEADER {LENGTH=HeaderLength,IN-WORDS} CONNECTION { IDENTIFIER=SequenceNum, CONNECT-START=“TcpFlags1”, CONNECT-COMPLETE=“TcpFlags4”, DISCONNECT-START=“TcpFlags0”, DISCONNECT-COMPLETE=“TcpFlags4” } PAYLOAD {INCLUDE-HEADER} CHILDREN {DESTINATION=DestPort,SOURCE=SrcPort} tcpOptionKindFIELDSYNTAX UNSIGNED INT(8){tcpOptEnd(0), tcpNop(1)}, tcpMSS(2),tcpWscale(3),tcpTimestamp(4)) DESCRIPTION “Type of TCP option” tcpOptionDataFIELD SYNTAXBYTESTRING(0..1500) ENCAP tcoOptionKind FLAGS SAMELAYER DISPLAY-HIN “HexDump” tcpOptionsGROUP LENGTH “($tcpHeaderLen*4)-20” ∷={Option=tcpOptionKind,OptionLength=UInt8, OptionData=tcpOptionData) tcpMSSPROTOCOL ∷={MaxSegmentSize=UInt16}]]></pre>3.4 HTTP(帶狀態(tài))這里是針對HTTP協(xié)議的一個PDL實例<pre listing-type="program-listing"><![CDATA[ httpData FIELD SYNTAX BYTESTRING(1..1500) LENGTH “($ipLength-($ipHeaderLength*4)) - ($tcpHeaderLen*4)” DISPLAY-HINT“Text” FLAGS NOLABEL http PROTOCOL SUMMARIZE “$httpData m/^GET|^HTTP|^HEAD|^POST/”“HTTP $httpData” “$httpData m/^[Dd]ate|^[Ss]erver|^[L1]ast- [Mm]odified/” “HTTP$httpData” “$httpData m/^[Cc]ontent-/” “HTTP $httpData” “$httpData m/^<HTML>/” “HTTP[HTML document]” “$httpData m/^GIF/” “HTTP[GIFimage]” “Default” “HTTP[Data]” DESCRIPTION “Protocol format for HTTP” ∷= {Data=httpData} http FLOW HEADER {LENGTH=0} CONNECTION{INHERITED} PAYLOAD {INCLUDE-HEADER,DATA=Data,LENGTH=256} STATES “S0CHECKCONNECT,GOTO S1 DEFAULT NEXT S0 S1WAIT 2, GOTO S2, NEXTS1 DEFAULTNEXT S0 S2MATCH ‘\n\r\n’ 9000 0 255 0,NEXT S3 ‘\n\n’ 900 0 0 255 0,NEXT S3 ‘POST /tds?’50 0 0 127 1,CHILD sybaseWebsql‘.htsHTTP/1.0’5040127 1,CHILD sybaseJdbc ‘jdbcsybaseTds’5040 127 1,CHILD sybaseTds ‘PCN-ThePoin’50041255 0,CHILD pointcast ‘tBW-C-’ 10041255 0,CHILD backweb DEFAULT NEXT S3 S3MATCH ‘\n\r\n’ 50000 0,NEXT S3 ‘\n\n’50 0 00 0,NEXT S3 ‘Content-Type’ 80000 255 0,CHILEmime ‘PCN-ThePoin’50041 255 0,CHILD pointcast ‘tBW-C-’ 10041 255 0,CHILD backweb DEFAULT NEXT S0 sybaseWebsqlFLOW STATE-BASED sybaseJdbcFLOW STATE-BASED sybaseTds FLOW STATE-BASED pointcast FLOW STATE-BASEDbackweb FLOW STATE-BASED mime FLOW STATE-BASED STATES ‘application’ 90000 1 0,CHILDmimeApplication ‘audio’ 900 00 1 0,CHILDmimeAudio ‘image’ 50 00 1 0,CHILD mimeImage ‘text’50 0 0 1 0,CHILD mimeText ‘video’ 50 00 1 0,CHILDmimeVideo ‘x-world’ 50041 255 0,CHILEmimeXworld DEFAULT GOTO S0” mimeApplication FLOW STATE-BASED mimeAudio FLOW STATE-BASED STATES “S0MATCH ‘basic’ 1000010,CHILD pdBasicAudio ‘midi’100 0 010, CHILD pdMidi ‘mpeg’100 0 010, CHILD pdMpeg2Audio ‘vnd.rn-realaudio’10000 10, CHILD pdRealAudio ‘wav’100 0 010, CHILD pdWav ‘x-aiff’ 100 001 0,CHILD pdAiff‘x-midi’1000010, CHILD pdMidi ‘x-mpeg’1000010, CHILD pdMpeg2Audio ‘x-mpgurl’ 1000010, CHILD pdMpeg3Audio ‘x-pn-realaudio’ 1000010,CHILD pdRealAudio ‘x-wav’1000010, CHILD pdWav DEFAULT GOTO S0” mineImage FLOW STATE-BASED mineText FLOW STATE-BASED mineVideo FLOW STATE-BASED mineXworld FLOW STATE-BASED pdBasicAideo FLOW STATE-BASED pdMidi FLOW STATE-BASED pdMpeg2Audio FLOW STATE-BASEDpdMpeg3Audio FLOW STATE-BASED pdRealAudio FLOW STATE-BASED pdWav FLOW STATE-BASED pdAiffFLOW STATE-BASED]]></pre>重復利用來自流的信息以維持度量每個流的流-入口存儲了該流的一組統(tǒng)計測量信息,包括流中分組的總數(shù)、到達時間和從上次到達的微分時間。
再來看圖3,狀態(tài)處理方法328執(zhí)行為流的狀態(tài)而定義的操作,例如迄今為止針對該流而識別出的特定協(xié)議。本發(fā)明的一個方面是有時可以用存儲在流-入口中的一個或多個統(tǒng)計測量來確定一組一個或多個與該流有關的度量。例如,可以由狀態(tài)處理器運行狀態(tài)處理器指令與模式數(shù)據(jù)庫326中的指令來執(zhí)行這樣的度量確定。隨后可以由分析器子系統(tǒng)把這樣的度量發(fā)往連接到監(jiān)控器的主機上?;蛘咭部梢杂蛇B接到流-入口數(shù)據(jù)庫324的處理器執(zhí)行這樣的度量確定。在圖10中所示的我們的優(yōu)選硬件實現(xiàn)中,可以對分析器主機接口和控制1118進行配置以通過高速緩沖存儲器系統(tǒng)1115訪問流-入口記錄進而通過主機總線接口向處理器進行輸出。隨后處理器可以報告基本度量。
圖15描述了監(jiān)控器系統(tǒng)可以和主機1504裝配在一起。監(jiān)控器300不時地向主機1504發(fā)送度量信息,并且主機1504執(zhí)行部分分析。
下面一節(jié)描述所發(fā)明的監(jiān)控器怎樣被用來通過提供QOS度量來監(jiān)控服務質量(QOS)。
服務質量流量統(tǒng)計(度量)下面這一節(jié)按照本發(fā)明的一個方面定義可能應用于服務質量(QOS)度量的通用結構。還定義了可以在本發(fā)明的實施方案中確定的“原始”(或“基本”)度量集以支持QOS。基本度量被作為狀態(tài)處理的一部分或由連接到監(jiān)控器300的處理器確定,由主機1504從基本度量確定QOS度量。這么分工的主要原因是完整的QOS度量需要復雜的計算,涉及到平方根和其它一些可能無法實時獲得所需計算資源的函數(shù)。因此選擇一些基本函數(shù)簡化實時計算并從中確定完整的QOS度量。在本發(fā)明范圍內也可以有其它函數(shù)分工。
可以由狀態(tài)處理器運行狀態(tài)處理器指令和模式數(shù)據(jù)庫326中的指令來執(zhí)行這樣的度量確定。隨后由分析器子系統(tǒng)通過連接到監(jiān)控器的處理器或邏輯電路把這些基本度量發(fā)送出去?;蛘呖梢杂蛇B接到流-入口數(shù)據(jù)庫324的微處理器(或其它一些邏輯)來執(zhí)行這樣的度量確定。在圖10和圖11中所示我們的優(yōu)選硬件實現(xiàn)中,這樣一個微處理器通過分析器主機接口和控制1118以及主機總線接口連接到高速緩沖存儲器系統(tǒng)1115。可以對這些單元進行配置以通過高速緩沖存儲器系統(tǒng)1115訪問流-入口記錄進而使微處理器能夠確定并報告基本度量。
QOS度量可以分成下列度量組。名字是描述性的。列表并不詳盡,還有其它度量可以使用。下面的QOS度量包括客戶機到服務器(CS)和服務器到客戶機(SC)度量。
像CSTraffic和SCTraffic這樣的流量度量。
像CSJitter和SCJitter這樣的振動度量。
像 CSExchangeReponseTimeStartToStart、CSExchangeResponseTimeEndToStart、CSExchangeResponseTimeStartToEnd 、SCExchangeReponseTimeStartToStart 、SCExchangeResponseTimeEndToStart 、SCExchangeResponseTimeStartToEnd這樣的交換響應度量。
像CSTransactionReponseTimeStartToStart 、CSApplicationReponseTimeEndToStart 、CSApplicationReponseTimeStartToEnd 、SCTransactionReponseTimeStartToStart 、SCApplicationReponseTimeEndToStart 、SCApplicationReponseTimeStartToEnd這樣的事務響應度量。
像 ConnectionEstablishment 、ConnectionGracefulTermination和ConnectionTimeoutTermination這樣的連接度量。
像 CSConnectionRetransmissions 、SCConnectionRetransmissions和CSConnectionOutOfOrders 、SCConnectionOutOfOrders這樣的連接順序度量。
連接窗口度量有CSCoonnectionWindow、SCConnectionWindow、CSConnectionFrozenWindows、SCConnectionFrozenWindows、CSConnectionClosedWindows以及SCConnectionClosedWindows。
QOS基本度量表示一組數(shù)據(jù)最簡單的方法是通過子范圍內的頻率分布。在優(yōu)選實施方案中有一些創(chuàng)建子范圍的規(guī)則。首先范圍需要是已知的。其次需要確定子范圍大小。固定子范圍大小是首選的,替代實施方面可以使用可變的子范圍大小。
確定完整的頻率分布可能要進行大量的計算。這樣,優(yōu)選實施方案使用由對象總體中的單個數(shù)據(jù)元素上的求和函數(shù)確定的度量。
度量報告方法提供可以用來計算有用的統(tǒng)計測量的數(shù)據(jù)。在一種實施方案中,度量報告方法是根據(jù)狀態(tài)而不時執(zhí)行的狀態(tài)處理的一部分,在另一種實施方案中,度量報告方法由訪問流記錄的微處理器不時地執(zhí)行。優(yōu)選地,度量報告方法提供基本度量,由主機1504執(zhí)行最終的QOS度量計算。除了保持實時狀態(tài)處理簡單之外,用這種方式分割任務還提供可升級的度量。例如,來自兩個間隔的度量可以被結合成更大間隔的度量。
例如,考慮把算術平均值定義為數(shù)據(jù)的和除以數(shù)據(jù)元素的個數(shù)。
X‾=ΣxN]]>由度量報告方法提供的兩個基本度量是x的和以及元素個數(shù)N。主機1504執(zhí)行除法操作以得到平均值。此外,通過加上x’的和以及它的元素個數(shù)把來自兩個間隔的兩組基本度量結合在一起可以得到合并后的和以及元素個數(shù)。
已經對基本度量進行了選擇以使可用數(shù)據(jù)的數(shù)量最大,用來存儲度量所需的存儲量最小并使產生度量所需的處理開銷最小。在一個包含五個無符號整數(shù)值的數(shù)據(jù)結構中提供基本度量。
●N 度量的數(shù)據(jù)點個數(shù)●∑X 度量的所有數(shù)據(jù)點值的和●∑(X2) 度量的所有數(shù)據(jù)點值的平方和●Xmax度量的最大數(shù)據(jù)點值●Xmin度量的最小數(shù)據(jù)點值度量用來描述時間間隔上的事件。從保存在流-入口中的統(tǒng)計測量確定基本度量。沒有必要把所有事件都高速緩存起來然后在間隔的末尾對它們計數(shù)?;径攘窟€被設計成在合并相鄰間隔時易于升級。
當合并連續(xù)時間間隔的基本度量時應用下列規(guī)則●N ∑N●∑X ∑(∑X)●∑(X2) ∑(∑(X2))●XmaxMAX(Xmax)●XminMIN(Xmin)除了上面五個值之外,優(yōu)選實施方案數(shù)據(jù)結構中還包括一個“趨勢”指示符。由枚舉類型提供。這么做的原因是產生趨勢信息的優(yōu)選方法是通過從間隔的最終值減去該間隔的最初值來產生趨勢信息。只有結果的符號才對確定趨勢指示有價值。
可以在基本度量上執(zhí)行的典型操作包括●數(shù)量N●頻率NTimeInterval]]>●最大值 Xmax●最小值 Xmin●范圍R=Xmax-Xmin●算術平均值X‾=ΣXN]]>
●均方根值RMS=Σ(X2)N]]>●方差σ2=Σ(X-X‾)2N=(ΣX2)-2X‾(ΣX)+N(X‾2)N]]>●標準偏差σ=Σ(X-X‾)2N=(Σ(X2))-2X‾(ΣX)+N(X‾2)N]]>●趨勢信息可以是選中的間隔之間的趨勢或一個間隔內的趨勢。選中的間隔之間的趨勢是管理應用函數(shù)。通常管理站傾向于報告的間隔的平均值。一個間隔內的趨勢被表示成枚舉類型,并且可以通過從該間隔中的最后一個值減去第一個值并根據(jù)結果的符號值給趨勢賦值很容易地生成。
替代實施方案在度量的不同實現(xiàn)中可以包括下列不同數(shù)據(jù)元素中的一個或多個●增量和(即微分值)。趨勢枚舉可以基于這個簡單的計算。
●增量值的絕對值的和。提供對間隔內的全部活動的測量。
●正增量值的和以及負增量值的和。把這些值中的每一個和相關的計數(shù)及最大值擴展到一起就可以給出精確的信息●斜交的統(tǒng)計測量,可以通過給現(xiàn)有的度量增加∑(X3)而獲得。
●峰度的統(tǒng)計測量,可以通過給現(xiàn)有的度量增加∑(X3)和∑(X4)而獲得。
●用來通過其計算最小二乘方線的斜率的數(shù)據(jù)。
現(xiàn)在詳細描述不同的度量。
流量度量CSTraffic定義這個度量包含有關為給定應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機而測量的流量大小的信息。
在標準、RMON II、AL/NL矩陣表中可以找到這個信息副本。在這里包括它是為了給應用以及提高性能后的相關收益提供方便,提高性能是通過在執(zhí)行QOS分析時避免訪問不同的功能RMON區(qū)域的需要。
度量規(guī)范
SCTRAFFIC定義這個度量包含有關為給定應用以及特定客戶機-服務器對或特定服務器和它的全部客戶機而測量的流量大小的信息。
在標準、RMON II、AL/NL矩陣表中可以找到這個信息副本。在這里包括它是為了給應用以及提高性能后的相關收益提供方便,提高性能是通過在執(zhí)行QOS分析時避免訪問不同的功能RMON區(qū)域的需要。
度量規(guī)范
振動度量CSJitter定義這個度量包含有關為數(shù)據(jù)分組測量的振動(例如,分組間間隔)的信息,該數(shù)據(jù)分組是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSJitter測量從客戶機到服務器的數(shù)據(jù)消息的振動。
數(shù)據(jù)分組以從客戶機到服務器的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以另一方向上的1st后繼數(shù)據(jù)分組作為界線(或終止)。在該消息內的數(shù)據(jù)分組之間測量客戶機到服務器分組間間隔。注意在我們的實現(xiàn)中,ACKnowledgement在這個度量的測量中并不考慮確認。
另外,在測量中也不考慮重傳無序數(shù)據(jù)分組。在從客戶機到服務器的數(shù)據(jù)消息中的最后一個分組和同一方向上下一個數(shù)據(jù)消息的1st分組之間的間隔并不被表示為分組間間隔。
度量規(guī)范
SCJitter定義這個度量包含有關為數(shù)據(jù)分組測量的振動(例如,分組間間隔)的信息,該數(shù)據(jù)分組是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCJitter測量從服務器到客戶機的數(shù)據(jù)消息的振動。
數(shù)據(jù)消息以從服務器到客戶機的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以另一方向上的1st后繼數(shù)據(jù)分組作為界線(或終止)。在該消息內的數(shù)據(jù)分組間測量服務器到客戶機分組間間隔。注意在我們的實現(xiàn)中,在這個度量的測量中并未考慮確認。
度量規(guī)范
交換響應度量CSExchangeResponseTimeStartToStart定義這個度量包含有關為數(shù)據(jù)分組測量的傳輸級響應時間的信息,該數(shù)據(jù)分組是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSExchangeReponseTimeStartToStart測量在客戶機到服務器數(shù)據(jù)消息的開始和從服務器到客戶機的它們的后繼響應數(shù)據(jù)消息的開始之間的響應時間。
客戶機到服務器數(shù)據(jù)消息以從客戶機到服務器的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以另一方向上的1st后繼數(shù)據(jù)分組作為界線(或終止)。用這個度量測量在客戶機到服務器數(shù)據(jù)消息的開始和服務器到客戶機數(shù)據(jù)消息的開始之間的總時間。注意該度量的測量中沒有考慮確認。
另外,在該測量中也沒有考慮重傳或無序數(shù)據(jù)分組。
度量定義
CSExchangeResponseTimeEndToStart定義這個度量包含有關為數(shù)據(jù)分組測量的傳輸級響應時間的信息,該數(shù)據(jù)分組是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSExchangeResponseTimeEndToStart測量在從客戶機到服務器的數(shù)據(jù)消息的結尾和從服務器到客戶機的它們的后繼響應數(shù)據(jù)消息的開始之間的響應時間。
客戶機到服務器數(shù)據(jù)消息以從客戶機到服務器的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以另一方向上的1st后繼數(shù)據(jù)分組作為界線(或終止)。用這個度量測量在客戶機到服務器數(shù)據(jù)消息的結尾和服務器到客戶機的數(shù)據(jù)消息的開始之間的總時間。注意該度量的測量中沒有考慮確認。
另外,在該測量中也沒有考慮對無序數(shù)據(jù)分組的重傳。
度量規(guī)范
CSExchangeReponseTimeStartToEnd定義這個度量包含有關為數(shù)據(jù)分組測量的傳輸級響應時間的信息,該數(shù)據(jù)分組是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSExchangeResponseTimeStartToEnd測量在從客戶機到服務器的數(shù)據(jù)消息的開始和從服務器到客戶機的它們的后繼響應數(shù)據(jù)消息的結尾之間的響應時間。
客戶機到服務器數(shù)據(jù)消息以從客戶機到服務器的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以另一方向上的1st后繼數(shù)據(jù)分組作為界線(或終止)。另一方向(例如,從服務器到客戶機)上的響應消息的結尾以下一個客戶機到服務器消息的1st數(shù)據(jù)分組之前的消息的最后數(shù)據(jù)作為界線。用這個度量測量在客戶機到服務器數(shù)據(jù)消息的開始和服務器到客戶機數(shù)據(jù)消息的結尾之間的總時間。注意該度量的測量中沒有考慮確認。
另外,在該測量中也沒有考慮重傳或無序數(shù)據(jù)分組。
度量規(guī)范
SCExchangeResponseTimeStartToStart定義這個度量包含有關為數(shù)據(jù)分組測量的傳輸級響應時間的信息,該數(shù)據(jù)分組是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCExchangeResponseTimeStartToStart測量在從服務器到客戶機數(shù)據(jù)消息的開始和從客戶機到服務器的它們的后繼響應數(shù)據(jù)消息的開始之間的響應時間。
服務器到客戶機數(shù)據(jù)消息以從服務器到客戶機的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以另一方向上的1st后繼數(shù)據(jù)分組作為界線(或終止)。用這個度量測量在服務器到客戶機數(shù)據(jù)消息的開始和客戶機到服務器數(shù)據(jù)消息的開始之間的總時間。注意該度量的測量中沒有考慮確認。
另外,在該測量中也沒有考慮重傳或無序數(shù)據(jù)分組。
度量規(guī)范
SCExchangeResponseTimeEndtToStart定義這個度量包含有關為數(shù)據(jù)分組測量的傳輸級響應時間的信息,該數(shù)據(jù)分組是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCExchangeResponseTimeEndToStart測量在服務器到客戶機數(shù)據(jù)消息的結尾和客戶機到服務器的它們的后繼響應數(shù)據(jù)消息的開始之間的響應時間。
服務器到客戶機數(shù)據(jù)消息以從服務器到客戶機的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以另一方向上的1st后繼數(shù)據(jù)分組作為界線(或終止)。用這個度量測量在服務器到客戶機數(shù)據(jù)消息的結尾和客戶機到服務器數(shù)據(jù)消息的開始之間的總時間。注意該度量的測量中沒有考慮確認。
另外,在該測量中也沒有考慮重傳或無序數(shù)據(jù)分組。
度量規(guī)范
SCExchangeResponseTimeStartToEnd定義這個度量包含有關為數(shù)據(jù)分組測量的傳輸級響應時間的信息,該數(shù)據(jù)分組是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCExchangeResponseTimeStartToEnd測量在從服務器到客戶機數(shù)據(jù)消息的開始和從客戶機到服務器的它們的后繼響應數(shù)據(jù)消息的結尾之間的響應時間。
服務器到客戶機數(shù)據(jù)消息以從服務器到客戶機的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以另一方向上的1st后繼數(shù)據(jù)分組作為界線(或終止)。另一方向(例如,從客戶機到服務器)上的響應消息的結尾以下一個服務器到客戶機消息的1st數(shù)據(jù)分組之前的消息的最后數(shù)據(jù)作為界線。用這個度量測量在服務器到客戶機數(shù)據(jù)消息的開始和客戶機到服務器數(shù)據(jù)消息的結尾之間的總時間。注意該度量的測量中沒有考慮確認。
另外,在該測量中也沒有考慮對無序數(shù)據(jù)分組的重傳。
度量規(guī)范
事務響應度量CSTransactionResponseTimeStartToStart定義這個度量包含有關為應用事務測量的應用級響應時間的信息,該應用事務是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶的。尤其CSTransactionResponseTimeStartToStart測量在客戶機到服務器應用事務的開始和服務器到客戶機的它們的后繼事務響應的開始之間的響應時間。
客戶機到服務器事務以從客戶機到服務器的事務請求的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以對該事務請求的響應的1st后繼數(shù)據(jù)分組作為界線(或終止)。用這個度量測量在客戶機到服務器事務請求的開始和服務器到客戶機的實際事務響應的開始之間的總時間。
這個度量被看作是“最好-成果”測量。實現(xiàn)這個度量的系統(tǒng)產生“最好-成果”以便用特定應用的邏輯事務定義劃定請求和響應的開始和結尾。對這個度量最低級的支持也使這個度量等效于CSExchangeResponseTimeStartToStart。
度量規(guī)范
CSTransactionResponseTimeEndToStart定義這個度量包含有關為應用事務測量的應用級響應時間的信息,該應用事務是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶的。尤其CSTransactionResponseTimeEndToStart測量在客戶機到服務器的應用事務的結尾和服務器到客戶機的它們的后繼事務響應的開始之間的響應時間。
客戶機到服務器事務以從客戶機到服務器的事務請求的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以對該事務請求的響應的1st后繼數(shù)據(jù)分組作為界線(或終止)。用這個度量測量在客戶機到服務器事務請求的結尾和服務器到客戶機的實際事務響應的開始之間的總時間。
這個度量被看作是“最好-成果”測量。實現(xiàn)這個度量的系統(tǒng)產生“最好-成果”以便用特定應用的邏輯事務定義劃定請求和響應的開始和結尾。對這個度量最低級的支持也使這個度量等效于CSExchangeResponseTimeEndToStart。
度量規(guī)范
CSTransactionResponseTimeStartToEnd定義這個度量包含有關為應用事務測量的應用級響應時間的信息,該應用事務是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶的。尤其CSTransactionResponseTimestartToEndt測量在客戶機到服務器應用事務的開始和服務器到客戶機的它們的后繼事務響應的結尾之間的響應時間。
客戶機到服務器事務以從客戶機到服務器的事務請求的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以對該事務請求的響應的1st后繼數(shù)據(jù)分組作為界線(或終止)。另一方向(例如,從服務器到客戶機)上的事務響應的結尾由下一個客戶機到服務器事務請求的1st數(shù)據(jù)之前的事務響應的最后數(shù)據(jù)劃定。用這個度量測量在客戶機到服務器事務請求的開始和服務器到客戶機的實際事務響應的結尾之間的總時間。
這個度量被看作是“最好-成果”測量。實現(xiàn)這個度量的系統(tǒng)產生“最好-成果”以便用特定應用的邏輯事務定義劃定請求和響應的開始和結尾。對這個度量最低級的支持也使這個度量等效于CSExchangeResponseTimeStartToEnd。
度量規(guī)范
SCTransactionResponseTimeStartToStart定義這個度量包含有關為應用事務測量的應用級響應時間的信息,該應用事務是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶的。尤其SCTransactionResponseTimeStartToStart測量在服務器到客戶機應用事務的開始和客戶機到服務器的它們的后繼事務響應的開始之間的響應時間。
服務器到客戶機事務以從服務器到客戶機的事務請求的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以對該事務請求的響應的1st后繼數(shù)據(jù)分組作為界線(或終止)。用這個度量測量在服務器到客戶機事務請求的開始和客戶機到服務器的實際事務響應的開始之間的總時間。
這個度量被看作是“最好-成果”測量。實現(xiàn)這個度量的系統(tǒng)產生“最好-成果”以便用特定應用的邏輯事務定義劃定請求和響應的開始和結尾。對這個度量最低級的支持也使該度量等效于SCExchangeResponseTimeStartToStart。
度量規(guī)范
SCTransactionResponseTimeEndToStart定義這個度量包含有關為應用事務測量的應用級響應時間的信息,該應用事務是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶的。尤其SCTransactionResponseTimeEndToStart測量在服務器到客戶機應用事務的結尾和客戶機到服務器的它們的后繼事務響應的開始之間的響應時間。
服務器到客戶機事務以從服務器到客戶機的事務請求的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以對該事務請求的響應的1st后繼數(shù)據(jù)分組作為界線(或終止)。用這個度量測量在服務器到客戶機事務請求的結尾和客戶機到服務器的實際事務響應的開始之間的總時間。
這個度量被看作是“最好-成果”測量。實現(xiàn)這個度量的系統(tǒng)產生“最好-成果”以便用特定應用的邏輯事務定義劃定請求和響應的開始和結尾。對這個度量最低級的支持也使該度量等效于SCExchangeResponseTimeEndtToStart。
度量規(guī)范
SCTransactionResponseTimeStartToEnd定義這個度量包含有關為應用事務測量的應用級響應時間的信息,該應用事務是給定的應用以及特定客戶機-服務器對或特定服務器和它的所有客戶的。尤其SCTransactionResponseTimeStartToEnd測量在服務器到客戶機應用事務的開始和客戶機到服務器的它們的后繼事務響應的結尾之間的響應時間。
服務器到客戶機事務以從服務器到客戶機的事務請求的1st傳輸協(xié)議數(shù)據(jù)分組/單元(TPDU)開始,并以對該事務請求的響應的1st后繼數(shù)據(jù)分組作為界線(或終止)。另一方向(例如,從客戶機到服務器)上的事務響應的結尾由下一個服務器到客戶機事務請求的1st數(shù)據(jù)之前的事務響應的最后數(shù)據(jù)劃定。用這個度量測量在服務器到客戶機事務請求的開始和客戶機到服務器的實際事務響應的結尾之間的總時間。
這個度量被看作是“最好-成果”測量。實現(xiàn)這個度量的系統(tǒng)產生“最好-成果”以便用特定應用的邏輯事務定義劃定請求和響應的開始和結尾。對這個度量最低級的支持也使該度量等效于SCExchangeResponseTimeStartToEnd。
度量規(guī)范
連接度量ConnectionEstablishment定義這個度量包含有關給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的傳輸級連接建立的信息。尤其ConnectionsEstablishment測量客戶機到服務器建立的連接數(shù)。該信息包含,實際包括●成功建立的傳輸連接數(shù)●建立的連接的準備時間●同時建立的最大連接數(shù)●失敗的連接建立嘗試(由于超時或拒絕)數(shù)注意從這個度量和ConnectionGracefulTermination和ConnectionTimeoutTermination度量可以獲得“當前建立的傳輸連接數(shù)”,方法如下當前連接數(shù)==“成功建立數(shù)”-“正常終止數(shù)”-“超時終止數(shù)”連接的準備時間被定義為在第一個傳輸級連接建立請求(即,SYN、CR-TPDU等)和在該連接上交換的第一個數(shù)據(jù)分組之間的時間差。
度量規(guī)范
ConnectionGracefulTermination定義這個度量包含有關正常終止的傳輸級連接的信息,該傳輸級連接是給定應用和特定客戶機-服務器對或特定服務器和所有它的客戶機的。尤其ConnectionsGracefulTermination以數(shù)量和總計連接持續(xù)時間測量正常終止的連接。該信息包含,實際上包括●正常終止的傳輸連接數(shù)●正常終止的連接的持續(xù)時間(生命期)度量規(guī)范
ConnectionTimeoutTermination定義這個度量包含有關非正常(例如,超時)終止的傳輸級連接的信息,該傳輸級連接是給定的應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其ConnectionsTimeoutTermination以數(shù)量和總計連接持續(xù)時間測量以前建立并超時的連接。該信息包含,實際上包括●超時傳輸連接數(shù)●超時終止的連接的持續(xù)時間(生命期)這個度量的持續(xù)因子被看作是“最好-成果”測量。當網絡實體實際探測到連接超時狀態(tài)時獨立的網絡監(jiān)控器不能真正的認識到這一點,因此當連接超時真正發(fā)生時需要進行推斷和估計。
度量規(guī)范
連接順序度量CSConnectionRetransmissions定義這個度量包含有關傳輸級連接健康狀態(tài)的信息,該傳輸級連接健康狀態(tài)是針對給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSConnectionRetransmissions測量在從客戶機到服務器的數(shù)據(jù)意義的PDU(分組)被進行了重傳的傳輸中建立的連接的生命期中真實事件的數(shù)量。
注意由網絡監(jiān)控設備看到的重傳事件指示從存在網絡上獲得的TPDU的“副本”。
度量規(guī)范
SCConnectionRetransmisions定義這個度量包含有關傳輸級連接健康狀態(tài)的信息,該傳輸級連接健康狀態(tài)是針對給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCConnectionRetransmissions測量在從服務器到客戶機的數(shù)據(jù)意義的PDU(分組)被進行了重傳的傳輸中建立的連接的生命期中真實事件的數(shù)量。
注意由網絡監(jiān)控設備看到的重傳事件指示從存在網絡上獲得的TPDU的“副本”。
度量規(guī)范
CSConnectionOutOfOrders定義這個度量包含有關傳輸級連接健康狀態(tài)的信息,該傳輸級連接健康狀態(tài)是針對給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSConnectionOutOfOrders測量在從客戶機到服務器的數(shù)據(jù)意義的PDU(分組)被檢測到是不連續(xù)的傳輸中建立的連接的生命期中真實事件的數(shù)量。
注意重傳(或復制)被看作是與無序不同的事件,并在CSConnectionRetransmissions中對其進行單獨跟蹤。
度量規(guī)范
SCConnectionOutOfOrder定義這個度量包含有關傳輸級連接健康狀態(tài)的信息,該傳輸級連接健康狀態(tài)是針對給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCConnectionOutOfOrders測量在從服務器到客戶機的數(shù)據(jù)意義的PDU(分組)被檢測到是不連續(xù)的傳輸中建立的連接的生命期中真實事件的數(shù)量。
注意重傳(或復制)被看作是與無序不同的事件,并在SCConnectionRetransmissions中對其進行單獨跟蹤。
度量規(guī)范
連接窗口度量CSConnectionWindow定義這個度量包含有關傳輸級連接窗口的信息,該窗口是針對給定的應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSConnectionWindow測量從客戶機到服務器建立的連接的生命期中傳輸級確認的數(shù)量和它們的相對大小。
注意通過區(qū)別這個度量的確認數(shù)和從客戶機到服務器的全部流量(見上面的CSTraffic)可以估計數(shù)據(jù)TPDU(分組)的數(shù)量。因為連接建立和終止TPDUS的緣故在這個計算中會有輕微的誤差,但應該是無足輕重的。
度量規(guī)范
SCConnectionWindow定義這個度量包含有關傳輸級連接窗口的信息,該窗口是針對給定的應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCConnectionWindow測量從服務器到客戶機建立的連接的生命期中傳輸級確認的數(shù)量和它們的相對大小。
注意通過區(qū)別這個度量的確認數(shù)和從服務器到客戶機的全部流量(見上面的SCTraffic)可以估計數(shù)據(jù)TPDU(分組)的數(shù)量。因為連接建立和終止TPDUS的緣故在這個計算中會有輕微的誤差,但應該是無足輕重的。
度量規(guī)范
CSConnectionFrozenWindows定義這個度量包含有關傳輸級協(xié)議窗口的信息,該窗口是針對給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSConnectionFrozenWinddow測量在建立的連接生命期中從客戶機到服務器有效確認數(shù)據(jù)的傳輸級確認的數(shù)量,但這些確認●不能增加窗口上部邊緣●減小窗口上部邊緣度量規(guī)范
SCConnectionFrozenWindows定義這個度量包含有關傳輸級協(xié)議窗口的信息,該窗口是針對給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCConnectionFrozenWinddow測量在建立的連接生命期中從服務器到客戶機有效確認數(shù)據(jù)傳輸級確認的數(shù)量,但這些確認●不能增加窗口上部邊緣●減小窗口上部邊緣度量規(guī)范
CSConnectionClosedWindows定義這個度量包含有關傳輸級協(xié)議窗口的信息,該窗口是針對給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其CSConnectionClosedWinddow測量在建立的連接生命期中從客戶機到服務器完全關閉確認/順序窗口的傳輸級確認的數(shù)量。
度量規(guī)范
SCConnectionClosedWindows定義這個度量包含有關傳輸級協(xié)議窗口的信息,該窗口是針對給定應用和特定客戶機-服務器對或特定服務器和它的所有客戶機的。尤其SCConnectionClosedWinddow測量在建立的連接生命期中從服務器到客戶機完全關閉確認/順序窗口的傳輸級確認的數(shù)量。
度量規(guī)范
本發(fā)明的實施方案用必要的識別模式和狀態(tài)轉換程序自動地產生流簽名。這來自根據(jù)解析規(guī)則分析分組并產生狀態(tài)轉換進行查找。任意層上的應用和協(xié)議都可以通過分組序列的狀態(tài)分析進行識別。
注意本領域的技術人員應該理解用來連接多種不同類型設備的計算機網絡,這些設備包括像電話、“Internet”廣播、尋呼機等。這里所用的術語“計算機”包括所有這樣的設備,“計算機網絡”包括這樣的計算機的網絡。
雖然已經根據(jù)目前的優(yōu)選實施方案對本發(fā)明進行了描述,但可以理解這些內容不應該被解釋為對本發(fā)明的限制。不懷疑那些本領域的技術人員在閱讀了上面的內容之后能夠明白多種不同的變更和修改。因此,意圖把權利要求表示為覆蓋所有的變更和修改并符合本發(fā)明的真正精神和范圍。
權利要求
1.一種查找設備,可配置用來從目標數(shù)據(jù)中的一組起始位置中的任意一個開始在目標數(shù)據(jù)中查找NR個單元的引用字符串,該查找設備包括(a)第一引用寄存器,可配置用來接收第一引用字符串;(b)一個或多個目標數(shù)據(jù)寄存器,結合成組以接收目標數(shù)據(jù);和(c)第一多個比較器集,每個比較器集對應于一個起始位置,特定起始位置的比較器集連接到第一引用寄存器的每一個單元和從該特定起始位置開始的目標數(shù)據(jù)寄存器的NR個單元,并比較第一引用寄存器內容和從該特定起始位置開始的目標數(shù)據(jù)寄存器中NR個連續(xù)單元的對應內容,這樣每個比較器集指示從它的相應不同起始位置開始的目標數(shù)據(jù)中是否有第一引用字符串的匹配,此外該第一多個比較器集還并行指示在任意起始位置開始的目標數(shù)據(jù)寄存器中是否包含有該第一引用字符串。
2.根據(jù)權利要求1的查找設備,其中可能的起始位置集包括Nstart個位置,其中一個或多個目標數(shù)據(jù)寄存器被結合成組以接收目標數(shù)據(jù)的至少NR+Nstart-1個單元,并且其中該第一多個比較器集包括Nstart個比較器集,每個比較器集用于Nstart個起始位置中的一個。
3.根據(jù)權利要求2的查找設備,其中每個目標數(shù)據(jù)寄存器保存Nstart個單元的數(shù)據(jù)。
4.根據(jù)權利要求3的查找設備,其中目標數(shù)據(jù)的Nstart個單元在一個時鐘周期內被打入目標數(shù)據(jù)寄存器,這樣該第一多個比較器集在一個時鐘周期內指示從Nstart個起始位置中的任意一個開始的目標數(shù)據(jù)中是否有該第一引用字符串。
5.根據(jù)權利要求4的查找設備,還包括指定位移Noffset的機制,其中在操作的第一個時鐘周期忽略第一個Noffset起始位置,這樣該第一多個比較器集在第一個時鐘周期指示從第一個數(shù)據(jù)寄存器的Nstart-Noffset個起始位置中的任意一個開始的目標區(qū)域中是否有該第一引用字符串,第一個數(shù)據(jù)寄存器從第一個Noffset起始位置之后開始,并且其中在接下來的時鐘周期中考慮所有Nstart個起始位置,此外查找設備在一個或多個時鐘周期內指示從第一個Noffset單元之外的任意位置開始的目標數(shù)據(jù)中是否有第一引用字符串。
6.根據(jù)權利要求1的查找設備,其中每個比較器集包括NR個連續(xù)比較器,每個比較器有引用單元輸入、目標單元輸入和指示匹配的輸出,每個比較器連接到前一個比較器的輸出上,這樣就在引用和目標數(shù)據(jù)輸入相匹配并且前一個比較器的輸出指示匹配時確認比較器的輸出。
7.根據(jù)權利要求1的查找設備,還包括(d)一個或多個更遠引用寄存器,用于接收一個或多個更遠寄存器的NR個單元;和(e)一組或多組更遠的多個比較器集,對相應的多個起始位置中的每一個都有一個比較器集,每組更遠的多個比較器集中的每個特定比較器連接到相應的多個引用寄存器的每個單元和從該特定比較器集的起始位置開始的數(shù)據(jù)寄存器的NR個單元上,并比較相應更遠引用寄存器內容和從該特定比較器集的起始位置開始的目標數(shù)據(jù)寄存器中的NR個單元,這樣該查找設備在從任意起始位置開始的目標寄存器的內容中查找任意一個第一或更遠引用字符串。
8.根據(jù)權利要求7的查找設備,其中每個比較器集包括NR個連續(xù)比較器,每個比較器有引用單元輸入、目標數(shù)據(jù)單元輸入和指示匹配的輸出,每個比較器連接到前一個比較器的輸出上,這樣就在引用和目標數(shù)據(jù)輸入匹配且前一個比較器的輸出指示匹配時確認比較器的輸出。
9.根據(jù)權利要求1的查找設備,其中每個比較器集包括NR個連續(xù)的比較器,每個比較器有引用單元輸入、目標數(shù)據(jù)單元輸入、使能輸入和指示匹配的輸出,這樣就在引用和目標輸入匹配且使能輸入被確認時確認比較器的匹配輸出,其中對于特定起始位置的特定比較器集來說,連續(xù)比較器的引用輸入連接到引用寄存器的連續(xù)單元上,連續(xù)比較器的目標數(shù)據(jù)輸入連接到在該特定起始位置開始的目標數(shù)據(jù)寄存器的連續(xù)單元上,使能該比較器集中的第一個比較器,每個比較器的使能輸入連接到前一個比較器的輸出上,這樣當NR個單元的引用字符串和目標數(shù)據(jù)的NR個單元一致時確認最后一個比較器的輸出。
10.根據(jù)權利要求1的查找設備,其中的單元是字節(jié)。
11.根據(jù)權利要求9的查找設備,其中比較器集中最后一個比較器的輸出連接到優(yōu)選級選擇器,該選擇器的輸出指示引用字符串的匹配發(fā)生在目標數(shù)據(jù)中的什么地方。
12.根據(jù)權利要求10的查找設備,其中NR是16字節(jié)。
13.根據(jù)權利要求2的查找設備,其中NR是16字節(jié)并且其中每個數(shù)據(jù)寄存器有Nstart個字節(jié),這樣該查找設備指示從第一個數(shù)據(jù)寄存器中的任意位置開始的匹配。
全文摘要
用于檢查通過計算機網絡上一個連接點的分組的監(jiān)控器和方法。該方法包括從分組攔截設備接收分組并在分組上執(zhí)行解析/提取操作以創(chuàng)建包括該分組的選中部分的函數(shù)在內的解析器記錄;查找包含以前遇到的對話流的流-入口的流-入口數(shù)據(jù)庫。該查找使用選中的分組部分并確定該分組是否是現(xiàn)有流。若該分組是現(xiàn)有流,則把該分組歸類為屬于找到的現(xiàn)有流,若該分組是新流,則在流-入口數(shù)據(jù)庫中為該新流存儲一個新的流-入口。若該分組是現(xiàn)有流,則更新該現(xiàn)有的流的流-入口。在流的任意階段,都維護它的狀態(tài),且執(zhí)行已經識別出的狀態(tài)的任意狀態(tài)操作以促進識別該流的過程。該方法就這樣實時檢查通過該連接點的每個分組直到確定與該流相關的應用程序為止。
文檔編號H04L12/26GK1571403SQ20041004352
公開日2005年1月26日 申請日期2000年6月30日 優(yōu)先權日1999年6月30日
發(fā)明者R·S·迪茨, J·R·邁克斯納, A·A·科彭哈維, W·H·巴雷斯, H·A·薩爾基相, J·F·托爾格森 申請人:傾向探測公司