一種監控環境下存儲、讀取數據包的方法及對應的裝置制造方法
【專利摘要】本發明公開了一種監控環境下存儲、讀取數據包的方法及對應裝置,包括:接收數據包,獲取數據包的監聽時刻,對數據包解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與所述監聽時刻對應、且與該數據包的服務類型對應的位置,為快速讀取指定監聽時間段內指定服務的數據包提供了準確查詢信息。另外,由于文件存儲區中保存了地址記錄區和數據包,其中地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應,因此,可以直接讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址,快速從所述數據包存儲地址中讀取出數據包。
【專利說明】—種監控環境下存儲、讀取數據包的方法及對應的裝置
【技術領域】
[0001]本發明涉及網絡服務監控領域,特別涉及一種監控環境下存儲、讀取數據包的方法及對應的裝置。
【背景技術】
[0002]隨著互聯網技術的發展,基于網絡提供的服務也多種多樣。為了保證服務的穩定,通常會對所提供的服務的網絡狀態進行監聽,并將監聽所接收的數據包寫入監聽文件。這樣,在需要對服務的網絡狀態進行分析時,可以從監聽文件中讀取出之前接收的數據包進行相應分析。
[0003]在將監聽所接收的數據包寫入監聽文件時,由于這些數據包通常為數據結構完整,但大小不一致的非規則數據包,為了后續在讀取數據包時能夠準確定位,在數據包寫入監聽文件之前,會將數據包調整成標準數據量大小,其中該標準數據量通常至少大于等于各個數據包中的最大值。這樣,當需要讀取數據包時,根據標準數據量進行移位即可在監聽文件中準確定位數據包。
【發明內容】
[0004]但是,現有技術這種存儲數據包的方法使得讀取數據包時,僅能按數據包數目定位,要想定位到指定監聽時間段內指定服務的數據包,則需在讀取過程中花費大量時間對大量數據包進行解析以從中找出符合需要的數據包,最終對監聽人員了解服務的網絡狀態造成了延誤。
[0005]有鑒于此,本發明的主要目的在于提供一種監控環境下存儲、讀取數據包的方法及對應的裝置以實現無需在讀取過程中對數據包解析即可快速定位到指定監聽時間段內指定服務類型的數據包。
[0006]在本發明實施例的第一個方面,提供了一種監控環境下存儲數據包的方法,例如,該方法可以包括:
[0007]接收數據包,以及獲取該數據包的監聽時刻;
[0008]對接收到的數據包執行存儲步驟,所述存儲步驟包括:根據該數據包大小,從文件存儲區中動態分配存儲區保存該數據包,提取該數據包的存儲地址,以及通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置,其中,該文件存儲區中至少分配一塊存儲區作為地址記錄區;以及,判斷是否還有需接收的數據包;
[0009]如果是,返回到接收數據包的步驟。
[0010]在本發明實施例的第二個方面,提供了一種監控環境下存儲數據包的裝置,例如,該裝置可以包括:
[0011]接收單元:用于接收數據包,以及獲取該數據包的監聽時刻;
[0012]存儲單元:用于對接收到的數據包執行存儲步驟,所述存儲步驟包括:根據該數據包大小,從文件存儲區中動態分配存儲區保存該數據包,提取該數據包的存儲地址,以及通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置,其中,該文件存儲區中至少分配一塊存儲區作為地址記錄區;
[0013]判斷單元:用于判斷是否還有需接收的數據包,如果是,觸發接收單元執行。
[0014]在本發明實施例的第三個方面,提供了一種監控環境下讀取數據包的方法,例如,該方法可以包括:
[0015]獲取應用如上所述監控環境下存儲數據包的方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,所述地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應;
[0016]獲取對數據包的讀取指令;
[0017]解析對數據包的讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻;
[0018]根據該對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;
[0019]根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包。
[0020]在本發明實施例的第四個方面,提供了一種監控環境下讀取數據包的裝置,例如,該裝置可以包括:
[0021]獲取文件單元:用于獲取應用如上述監控環境下存儲數據包的方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,所述地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應;
[0022]獲取指令單元:用于獲取對數據包的讀取指令;
[0023]解析單元:用于解析對數據包的讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻;
[0024]第一讀取單元:用于根據該對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;
[0025]第二讀取單元:用于根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包。
[0026]可見本發明具有如下有益效果:
[0027]由于本發明實施例提供的方法在接收數據包時,獲取該數據包的監聽時刻,又通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與所述監聽時刻對應、且與該數據包的服務類型對應的位置,從而為快速讀取指定監聽時間段內指定服務的數據包提供了準確有效的查詢信息;
[0028]相應地,由于該文件存儲區中保存了地址記錄區和數據包,其中地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應,因此,可以在獲取讀取對數據包的讀取指令后,解析數據包的讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻,進而根據該讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址,根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包,因此,應用本發明實施例提供的方法可以按照對各種服務的網絡狀態分析的實際需要,快速準確地讀取到指定監聽時間段內指定服務類型的數據包,而無需在讀取過程中對數據包解析。
[0029]另外,由于本發明實施例提供的方法根據數據包實際大小分配存儲區,因此可以按照數據包實際大小進行存儲,在可以快速準確定位到指定監聽時間段內指定服務類型的數據包的同時,還達到了節省存儲空間的目的。
【專利附圖】
【附圖說明】
[0030]圖1是本發明實施例提供的方法的需求場景示意圖;
[0031]圖2是本發明實施例提供的監控環境下存儲數據包的方法的流程圖之一;
[0032]圖3是本發明實施例涉及的地址記錄區示意圖;
[0033]圖4是本發明實施例提供的監控環境下存儲數據包的方法的流程圖之二 ;
[0034]圖5是本發明實施例提供的監控環境下存儲數據包的方法的流程圖之三;
[0035]圖6是本發明實施例提供的監控環境下存儲數據包的裝置的結構示意圖;
[0036]圖7是本發明實施例提供的監控環境下讀取數據包的方法的流程圖之一;
[0037]圖8是本發明實施例提供的監控環境下讀取數據包的方法的流程圖之二
[0038]圖9是本發明實施例提供的監控環境下讀取數據包的裝置的結構示意圖。
【具體實施方式】
[0039]為使本發明的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和【具體實施方式】對本發明實施例作進一步詳細的說明。
[0040]在多服務網絡狀態監控場景下,通常對數據包進行實時接收,并將其保存在監聽文件中。例如,可能在Tl時刻,接收到SI服務的負載信令包,同時接收到S2服務的請求信令包、S3服務的中斷信令包等,可能在T2時刻,接收到SI服務的請求信令,同時接收到S4服務的中斷信令包等…。并且,每個數據包根據其服務所定義的格式,通常包含服務類型的信息。當過段時間后,可能需要查看各種服務的網絡狀態時,可以從監聽文件中讀取出數據包。
[0041]在查看各種服務的網絡狀態時,可以將讀取出的數據包從時間、服務兩個維度對數據包中的參數進行分析,以呈現在如圖1所示的圖表中。例如,圖1所示的橫坐標用于表示監聽時刻(如數據包的接收時刻、或數據包的發送時刻等)、縱坐標用于表示數據包內某一指定參數,不同線型用于劃分不同服務。因此,如果能夠快速讀取指定監聽時間段內指定服務的數據包,則可以盡快讓監聽人員了解服務的網絡狀態,及時發現問題,確保服務的穩定。
[0042]有鑒于此,本發明提供如下監控環境下存儲數據包的方法:
[0043]參見圖2,為本發明一實施例提供的一種監控環境下存儲數據包的方法的流程圖,如圖所示,該實施例可以包括:
[0044]S210、接收數據包,以及獲取該數據包的監聽時刻;
[0045]需要說明的是,本發明實施例可以根據業務需要確定監聽時刻的具體獲取方式。例如,當業務需求關注數據包的接收時刻時,可以在接收數據包的同時,記錄該數據包的接收時刻,將該接收時刻作為監聽時刻;或者,再例如,當業務需求關注數據包的發送時刻時,可以在接收數據包之后,解析該數據包,從該數據包中提取出數據包的發送時刻。當需要解析數據包獲取數據包的監聽時刻時,該監聽時刻,可以在步驟S220對數據包進行解析得到數據包的服務類型的同時得到。
[0046]S220、對接收到的數據包執行存儲步驟,所述存儲步驟包括:根據該數據包大小,從文件存儲區中動態分配存儲區保存該數據包,提取該數據包的存儲地址,以及通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置,其中,該文件存儲區中至少分配一塊存儲區作為地址記錄區;
[0047]需要說明的是,本文所述文件存儲區可以是對文件標識、文件完整性定義等方面進行過初始化的文件存儲區,其中地址記錄區用于記錄數據包的存儲地址。該用于記錄數據包的存儲地址的地址記錄區根據實施需要例如可以采用二維索引表或者其他結構的存儲區。在分配存儲區作為地址記錄區時,既可以靜態分配,也可以根據實際需要動態分配,例如,優選方式可以是在文件存儲區初始化時分配一塊預設固定大小,如4K的連續存儲區作為地址記錄區,并在分配的同時初始化該存儲區全部為空閑,例如,可以將該存儲區的各個存儲位置標記為O表示空閑,在該4K的連續存儲區沒有可用于記錄數據包存儲地址的空閑位置時,可以再根據實際需要分配下一塊如4K的存儲區作為地址記錄區。具體地,為了能夠隨數據包的增加擴展該地址記錄區,從文件存儲區中至少分配一塊存儲區作為地址記錄區可以包括:
[0048]在該文件存儲區中不存在地址記錄區時,分配一塊連續的存儲區作為地址記錄區;
[0049]在該文件存儲區中不存在地址記錄區時,分配一塊連續的存儲區作為地址記錄區,將該地址記錄區作為當前用于寫入數據包存儲地址的地址記錄區;
[0050]如果當前用于寫入數據包存儲地址的地址記錄區已無可用于寫入數據包存儲地址的位置時,分配一塊連續的存儲區作為下一地址記錄區,并將該下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區,將該下一地址記錄區作為當前用于寫入數據包存儲地址的地址記錄區。
[0051]例如,如圖3所示,在當前用于寫入數據包存儲地址的地址記錄區310已無可用于記錄數據包存儲地址的空閑位時,將另分配的下一地址記錄區320的地址寫入該當前用于寫入數據包存儲地址的地址記錄區可以包括:
[0052]將下一地址記錄區標志(如NEXT標志)寫入該當前用于寫入數據包存儲地址的地址記錄區的第一預設位置(如最后一個位置330),或者,還可以在下一地址記錄區的首地址寫入上一地址記錄區標志(如PREV1US標志);
[0053]將該下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區的第二預設位置(如倒數第二個位置340);
[0054]統計該當前用于寫入數據包存儲地址的地址記錄區中已寫入的數據包存儲地址總數,將統計的總數寫入該當前用于寫入數據包存儲地址的地址記錄區的第三預設位置(如倒數第三個位置350)。
[0055]這樣,后續在讀取數據包存儲地址時,可以根據當前用于寫入數據包存儲地址的地址記錄區預留的第二預設位置查詢到下一地址記錄區,在實現地址記錄區擴展的同時可以準確找到每一個地址記錄區。
[0056]S230、以及,判斷是否還有需接收的數據包;
[0057]S240、如果是,返回到接收數據包的步驟。
[0058]可見,應用本發明上述存儲數據包的方法,可以按照數據包實際大小存儲達到節省存儲空間的目的,而且,又通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置,從而為準確讀取出指定監聽時間段內指定服務的數據包提供了準確有效的查詢信息。
[0059]參見圖4,為本發明另一實施例提供的一種監控環境下存儲數據包的方法的流程圖。該實施例針對數據包到達頻率較快,易發生丟包的問題,采取了二級緩存策略接收數據包。如圖所示,該實施例可以包括:
[0060]S410、接收數據包,將接收的數據包放入內存,以及獲取該數據包的監聽時刻;
[0061]S420、將數據包從內存中取出;
[0062]S430、對該數據包執行所述存儲步驟,所述存儲步驟包括:根據該數據包大小,從文件存儲區中動態分配存儲區保存該數據包,提取該數據包的存儲地址,以及通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置,其中,該文件存儲區中至少分配一塊存儲區作為地址記錄區;
[0063]需要說明的是,本發明實施例對接收到的數據包執行存儲步驟可以包括如下兩種實現方式:(方式一)例如,本發明實施例中的步驟S430對數據包執行存儲步驟之后還可以包括:判斷內存中是否還有未取出的數據包,如果有,從內存中取出該還未取出的數據包,返回到對接收到的數據包執行存儲步驟的步驟。從流程執行的角度來看,其中步驟S420由第二子流程從內存中取出該數據包之后,可以由該第二子流程執行步驟S430以對該數據包執行存儲步驟,這樣,所述第二子流程可以在對該數據包執行存儲步驟結束后,判斷內存中是否還有未取出的數據包,如果有,返回到步驟S420由第二子流程從內存中取出數據包的步驟;或者(方式二)例如,本發明實施例中的步驟S430對接收到的數據包執行存儲步驟時,如果實時監聽到另一數據包到達內存,從內存中取出該數據包,對該數據包執行存儲步驟,相應地,步驟S420所述將該數據包從內存中取出具體在實時監聽到數據包到達內存時,從內存中取出該數據包。從流程執行的角度來看,其中步驟S420由第二子流程從內存中取出該數據包之后,可以由該第二子流程將該數據包發送給空閑的第三子流程,由該第三子流程對該數據包執行存儲步驟,其中第三子流程可以為多個。這樣,所述第二子流程可以通過實時監聽數據包到達內存的狀態,判斷內存中是否有還未取出的數據包,如果有,返回到由第二子流程從內存中取出該數據包的步驟。
[0064]S440、以及,根據實時監聽數據包到達的狀態判斷是否還有需接收的數據包;
[0065]S450、如果是,返回到接收數據包的步驟。
[0066]應用本發明該實施例,由于令第一子流程接收數據包,在接收數據包之后即放入內存,因此,即使在數據包到達頻率較快時,也不會發生丟包的現象。而且,被放入內存的數據包可以由第二子流程順序逐個執行存儲步驟,或者,也可以由第二子流程實時監聽數據包到達內存的狀態,及時從內存中取出數據包,再啟動預先建立的多個第三子流程分別對不同的數據包執行存儲步驟,相當于利用若干個用于執行存儲步驟的第三子流程(如,線程/進程)分別對多個數據包并行存儲,可以提高效率。
[0067]需要說明的是,本文所述數據包的存儲地址可以為該數據包的存儲地址的首地址。
[0068]參見圖5,為本發明又一實施例提供的一種監控環境下存儲數據包的方法的流程圖,在該實施例中,所述地址記錄區如圖3所示為二維索引表,其中一列對應一個服務類型,一行對應一個監聽時刻,如圖所示,該實施例可以包括:
[0069]S510、接收數據包,以及獲取該數據包的監聽時刻;
[0070]對接收到的數據包執行存儲步驟,所述存儲步驟包括:
[0071]S521、根據該數據包大小,從文件存儲區中動態分配存儲區保存該數據包,提取該數據包的存儲地址,以及通過對該數據包進行解析得到該數據包的服務類型;
[0072]S522、查詢出該數據包的服務類型在所述二維索引表中對應的列,假定為J列;
[0073]S523、如果所述二維索引表中不存在任一數據包存儲地址,將寫數據指針移位至所述二維索引表的第一行的第J列,寫入該數據包的存儲地址,并占預設固定位數,將該第一行對應該數據包的監聽時刻;
[0074]例如,假定從二維索引表的第一列至第J列,每列均占預設固定位數,如,每個數據包存儲地址在寫入二維索引表時均占預設固定位數D,所述將寫數據指針移位至所述二維索引表的第一行的第J列的具體實現可以為:將寫數據指針相對于二維索引表的首位移位至第(J-1) *D位,從該位開始寫入該數據包的存儲地址。
[0075]其中,將該第一行對應該數據包的監聽時刻的具體實現方式可以根據實際實施需要采取相應的方法,例如:假設本發明實施例對同一監聽時刻接收的多個數據包可能會在不同次存儲操作中存儲。在這種情況下,可以將二維索引表的預設某一列用于記錄數據包的監聽時刻。進而可以將該數據包的監聽時刻寫入該第一行的預設某一列以實現將該第一行對應該數據包的監聽時刻。或者,再例如:假設本發明實施例對同一監聽時刻接收的多個數據包會在同一次存儲操作中存儲。在這種情況下,會將該多個數據包的存儲地址在同一次存儲操作中寫入第一行,此時,只要將數據包的存儲地址寫入第一行,即可實現將該第一行對應該數據包的監聽時刻。
[0076]S524、如果所述二維索引表中已存在任一數據包存儲地址且已存在與該數據包的監聽時刻對應的行,將寫數據指針移位至該已存在與該數據包的監聽時刻對應的行的第J列,寫入該數據包的存儲地址,并占預設固定位數;
[0077]基于上述假設的場景,其中判斷所述二維索引表中是否已存在任一數據包存儲地址且已存在與該數據包的監聽時刻對應的行的具體實現方式也可以根據實施需要采取相應的判斷方法,例如:假設本發明實施例對同一監聽時刻接收的多個數據包可能會在不同次存儲操作中存儲。在這種情況下,可以將二維索引表的預設某一列用于記錄數據包的監聽時刻。這樣,在對某一數據包執行存儲步驟時,可以遍歷二維索引表的預設某一列,在遍歷過程中判斷二維索引表的預設某一列是否記錄了與該數據包的監聽時刻相同的監聽時亥IJ,如果是,則可以遍歷至記錄了與該數據包的監聽時刻相同的監聽時刻的行停止,將寫數據指針移位至該已記錄了與該數據包的監聽時刻相同的監聽時刻的行的第J列。或者,再例如,假設本發明實施例對同一監聽時刻接收的多個數據包會在同一次存儲操作中存儲。在這種情況下,在對數據包進行存儲時,二維索引表中不會已存在與該數據包的監聽時刻對應的行,則無需判斷所述二維索引表中是否已存在任一數據包存儲地址且已存在與該數據包的監聽時刻對應的行。
[0078]S525、如果所述二維索引表中已存在任一數據包存儲地址且不存在與該數據包的監聽時刻對應的行,查詢出第一個未寫入數據包存儲地址的行,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數,將該行對應該數據包的監聽時刻;
[0079]基于上述假設的場景,其中判斷所述二維索引表中是否已存在任一數據包存儲地址且不存在與該數據包的監聽時刻對應的行的具體實現方式可以根據實施需要采取相應的判斷方法,例如:假設本發明實施例對同一監聽時刻接收的多個數據包可能會在不同次存儲操作中存儲。在這種情況下,可以將二維索引表的預設某一列用于記錄數據包的監聽時刻。這樣,在對某一數據包執行存儲步驟時,可以遍歷二維索引表的預設某一列,在遍歷過程中判斷二維索引表的預設某一列是否存在與該數據包的監聽時刻相同的監聽時刻,如果不存在,則可以遍歷至第一個未寫入數據包存儲地址的行停止,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數,再將該數據包的監聽時刻寫入該行的預設某一列以實現將該行對應該數據包的監聽時刻。或者,再例如,假設本發明實施例對同一監聽時刻接收的多個數據包會在同一次存儲操作中存儲。在這種情況下,在對數據包進行存儲時,可以遍歷二維索引表的行,在遍歷過程中判斷該行中是否已存在數據包存儲地址,如果存在,則可以遍歷至第一個未寫入數據包存儲地址的行停止,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數。
[0080]S530、以及,判斷是否還有需接收的數據包;
[0081]S540、如果是,返回到接收數據包的步驟。
[0082]在該實施例中,地址記錄區采用了二維索引表的存儲結構,其中一列對應一個服務類型,一行對應一個監聽時刻,使得確定與數據包的監聽時刻對應、且與數據包的服務類型對應的位置更加簡單快速,提高存儲速度。
[0083]參見圖6,為本發明一實施例提供的一種監控環境下存儲數據包的裝置的結構示意圖,如圖所示,該裝置可以包括:
[0084]接收單元610:可以用于接收數據包,以及獲取該數據包的監聽時刻;
[0085]存儲單元620:可以用于對接收到的數據包執行存儲步驟,所述存儲步驟包括:根據該數據包大小,從文件存儲區中動態分配存儲區保存該數據包,提取該數據包的存儲地址,以及通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置,其中,該文件存儲區中至少分配一塊存儲區作為地址記錄區;
[0086]判斷單元630:可以用于判斷是否還有需接收的數據包,如果是,觸發接收單元執行。
[0087]為了能夠隨數據包的增加擴展該地址記錄區,本發明實施例的所述存儲單元620:可以用于在該文件存儲區中不存在地址記錄區時,分配一塊連續的存儲區作為地址記錄區,將該地址記錄區作為當前用于寫入數據包存儲地址的地址記錄區;如果當前用于寫入數據包存儲地址的地址記錄區已無可用于寫入數據包存儲地址的位置時,分配一塊連續的存儲區作為下一地址記錄區,并將該下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區,將該下一地址記錄區作為當前用于寫入數據包存儲地址的地址記錄區。
[0088]再具體地,例如,本發明實施例提供的裝置的存儲單元620:可以用于將下一地址記錄區標志寫入該當前用于寫入數據包存儲地址的地址記錄區的第一預設位置;將該下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區的第二預設位置;統計該當前用于寫入數據包存儲地址的地址記錄區中已寫入的數據包存儲地址總數,將統計的總數寫入該當前用于寫入數據包存儲地址的地址記錄區的第三預設位置。
[0089]在本發明另一實施例提供的裝置中,為了解決數據包到達頻率快易發生丟包的問題,采取了二級緩存策略接收數據包,例如,該實施例提供的裝置的接收單元610:可以用于在接收數據包之后,還將該數據包放入內存;相應地,所述存儲單元620:可以用于在對接收到的數據包執行存儲步驟之前,還將該數據包從內存中取出;相應地,所述判斷單元630:可以用于根據實時監聽數據包到達的狀態判斷是否還有需接收的數據包。
[0090]基于該實施例,其中所述存儲單元620的一種可能的實現方式為:可以用于在對接收到的數據包執行存儲步驟之后,還判斷內存是否還有未取出的數據包,如果有,從內存中取出該還未取出的數據包,返回到對接收到的數據包執行存儲步驟的步驟。該種實現方式可以在一個數據包存儲后,再對下一個數據包進行存儲,相當于逐個順序存儲。
[0091]所述存儲單元620的另一種可能的實現方式為:可以用于在實時監聽到數據包到達內存時,從內從中取出該數據包,在對接收到的數據包執行存儲步驟時,如果實時監聽到另一數據包到達內存,從內從中取出該數據包,對該數據包執行存儲步驟。該種實現方式可以利用若干個用于執行存儲步驟的子流程分別對多個數據包并行存儲,可以提高效率。
[0092]為了簡單快速的確定于數據包的監聽時刻對應、且與數據包的服務類型對應的位置,本發明實施例所述的地址記錄區可以為二維索引表,其中一列對應一個服務類型,一行對應一個監聽時刻,相應地,本發明實施例提供的裝置的所述存儲單元620:可以用于對接收到的數據包執行包括如下步驟的存儲步驟:查詢出該數據包的服務類型在所述二維索引表中對應的列,假定為J列;如果所述二維索引表中不存在任一數據包存儲地址,將寫數據指針移位至所述二維索引表的第一行的第J列,寫入該數據包的存儲地址,并占預設固定位數,將該第一行對應該數據包的監聽時刻;如果所述二維索引表中已存在任一數據包存儲地址且已存在與該數據包的監聽時刻對應的行,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數;如果所述二維索引表中已存在任一數據包存儲地址且不存在與該數據包的監聽時刻對應的行,查詢出第一個未寫入數據包存儲地址的行,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數,將該行對應該數據包的監聽時刻。
[0093]參見圖7,為本發明一實施例提供的一種監控環境下讀取數據包的方法的流程圖,如圖所示,該方法可以包括:
[0094]S710、獲取應用如上述一種監控環境下存儲數據包的方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,所述地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應;
[0095]S720、獲取對數據包的讀取指令;
[0096]S730、解析對數據包的讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻;
[0097]S740、根據該對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;
[0098]需要說明的是,文件存儲區中可能存在多個地址記錄區,此時,每個非最后一個地址記錄區中均記錄了該地址記錄區之后的下一地址記錄區的地址。對應這種情況,在讀取數據包存儲地址時,應根據對數據包的讀取指令在所述多個地址記錄區中定位與待讀取數據包的監聽時刻及待讀取數據包的服務類型的位置,例如,該S740步驟可以包括:
[0099]根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;
[0100]根據該對數據包的讀取指令,判斷是否結束對數據包存儲地址的讀取;
[0101]如果否,且該當前地址記錄區記錄了下一地址記錄區的地址,根據該當前地址記錄區記錄的下一地址記錄區的地址,查詢出下一地址記錄區,將該下一地址記錄區作為當前地址記錄區,返回到根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址的步驟。
[0102]更具體地,例如,當所述地址記錄區為多個時,每個非最后一個地址記錄區的第一預設位置(如最后一個位置)中均記錄了下一地址記錄區標志,每個非最后一個地址記錄區的第二預設位置(如倒數第二個位置)中均記錄了該地址記錄區之后的下一個地址記錄區的地址,每個非最后一個地址記錄區的第三預設位置(如倒數第三個位置)中均記錄了該地址記錄區保存的數據包存儲地址的個數。相應地,該S740步驟可以包括:
[0103]根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;
[0104]如果還未結束對數據包存儲地址的讀取,判斷該當前地址記錄區中第一預設位置是否存在下一地址記錄區標志;
[0105]如果存在,從該當前地址記錄區的第二預設位置讀取出下一地址記錄區的地址,根據該下一地址記錄區的地址,查詢出下一地址記錄區,將該下一地址記錄區作為當前地址記錄區,繼續執行所述根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址的步驟。
[0106]S750、根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包。
[0107]由于本發明上述實施例提供的方法中所獲取的文件存儲區保存了地址記錄區和數據包,所述地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應,因此,在獲取對數據包的讀取指令后,可以通過解析該讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻,進而可以直接從地址記錄區中與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置讀取出數據包存儲地址,而無需對數據包進行解析,實現了快速準確地讀取出指定監聽時間段內指定服務的數據包的目的。
[0108]參見圖8,為本發明另一實施例提供的一種監控環境下讀取數據包的方法的流程圖,如圖所示,該實施例可以包括:
[0109]S810、獲取應用如上述一種監控環境下存儲數據包的方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了二維索引表和數據包,所述二維索引表用于保存數據包存儲地址,其中,一列對應一個服務類型、一個行對應一個監聽時刻、每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應;
[0110]S820、獲取對數據包的讀取指令;
[0111]S830、解析對數據包的讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻;
[0112]S840、根據該對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;
[0113]S850、根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包。
[0114]在該實施例中,由于地址記錄區采用了二維索引表的存儲結構,使得確定與待讀取數據包的監聽時刻對應、且與待讀取數據包的服務類型對應的位置更加簡單快速,提高讀取速度。
[0115]下面,結合幾種可能的對數據包的讀取指令,對該實施例讀取數據包存儲地址的具體實現方式進行詳細介紹,例如:
[0116]在一種可能的實現方式中,所述對數據包的讀取指令可以為每第一預設時長內讀取出與一個或一個以上指定服務類型對應的在第二預設數量個時刻內的數據包;
[0117]相應地,所述根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址可以包括:
[0118]在二維索引表中,將讀數據指針每第一預設時長內偏移第二預設數量個行,每偏移一行時,從該行與所述一個或一個以上指定服務類型對應的列中讀取出數據包存儲地址,如果所述讀數據指針偏移至非最后一個二維索引表的表尾,確定未結束對數據包存儲地址的讀取;
[0119]所述根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包可以包括:
[0120]在讀取出一個數據包存儲地址的同時,尋址到該數據包存儲地址,從中讀取出數據包。
[0121]在另一種可能的實現方式中,所述對數據包的讀取指令可以為讀取與任一監聽時刻對應、與任一服務類型對應、且排序位置在所有數據包中指定百分比位置的某個數據包;
[0122]相應地,所述根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址可以包括:
[0123]將第一個二維索引表作為當前二維索引表,設置數據包存儲地址的總個數的初始值;
[0124]如果當前二維索引表的第一預設位置不存在下一地址記錄區標志,遍歷當前二維索引表,通過所述遍歷及根據所述當前二維索引表中保存的每個數據包存儲地址占預設固定位數、且未寫入數據包存儲地址的位置以特殊標記占位,計算當前二維索引表的數據包存儲地址的個數,累計入數據包存儲地址的總個數;
[0125]如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從該當前二維索引表的第三預設位置讀取出當前二維索引表的數據包存儲地址的個數,累計入數據包存儲地址的總個數,從該當前二維索引表的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,返回到所述如果當前二維索引表的第一預設位置不存在下一地址記錄區標志,遍歷當前二維索引表的步驟;
[0126]將第一個二維索引表作為當前二維索引表,設置臨時計數值的初值;
[0127]假定該某個數據包為第X個數據包,根據X等于所述指定百分比乘以所述數據包存儲地址的總個數,計算出X值;
[0128]如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從當前二維索引表的第三預設位置中讀取出當前二維索引表中保存的數據包存儲地址的個數,將該讀取出的個數累計入所述臨時計數值,判斷所述臨時計數值是否大于或等于所述X值,如果否且當前二維索引表的第一預設位置存在下一地址記錄區標志,從該當前地址記錄區的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,返回到如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從當前二維索引表的第三預設位置中讀取出當前二維索引表中保存的數據包存儲地址的個數,將該讀取出的個數累計入所述臨時計數值的步驟;
[0129]根據所述臨時計數值與X值的差值、每個數據包存儲地址占預設固定位數、且未寫入數據包存儲地址的位置以特殊標記占位,查詢出該第X個數據包存儲地址在當前二維索引表中的位置;
[0130]將讀數據指針移位至該第X個數據包存儲地址在二維索引表中的位置,讀取出該第X個數據包存儲地址,并且確定結束對數據包存儲地址的讀取。
[0131]在又一種可能的實現方式中,所述對數據包的讀取指令可以為讀取指定服務類型的第X個數據包;
[0132]相應地,所述根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址可以包括:
[0133]假定所述指定服務類型對應的列為J列,假定所述當前二維索引表的列共對應SN個服務類型,假定每個數據包存儲地址占預設固定位數D ;
[0134]設置N=I及指定數據包存儲地址個數=0 ;
[0135]判斷當前二維索引表是否存在第D* (N*SN+J)位;
[0136]如果不存在且當前二維索引表的最后一個位置存在下一地址記錄區標志,從該當前二維索引表的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,設置N=l,返回到判斷當前二維索引表是否存在第D* (N*SN+J)位的步驟;
[0137]如果存在,判斷當前二維索引表的第D* (N*SN+J)位是否存在特殊標記,其中所述特殊標記用于標識二維索引表中未寫入數據包存儲地址的位置,如果不存在,指定數據包存儲地址個數加1,如果所述指定數據包存儲地址個數小于X值,N=N+1,返回到判斷當前二維索引表是否存在第D* (N*SN+J)位的步驟,如果所述指定數據包存儲地址個數等于X值,將讀數據指針移位至當前索引表的該第D* (N*SN+J)位,從中讀取出該第X個數據包存儲地址。
[0138]需要說明的是,為了便于區分地址記錄區中的各個數據包的存儲地址,本發明上述實施例約定了地址記錄區中記錄的數據包存儲地址占預設固定位數。可以理解的是,在本發明具體實施時還可以約定其他可以在地址記錄區中區分各個數據包存儲地址的規則,在本發明并不進行限制。
[0139]參見圖9為本發明另一實施例提供的一種監控環境下讀取數據包的裝置的結構示意圖,如圖所示,該實施例可以包括:
[0140]獲取文件單元910:可以用于獲取應用如上述一種監控環境下存儲數據包的方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,所述地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應;
[0141]獲取指令單元920:可以用于獲取對數據包的讀取指令;
[0142]解析單元930:可以用于解析對數據包的讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻;
[0143]第一讀取單元940:可以用于根據該對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;
[0144]第二讀取單元950:可以用于根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包。
[0145]對應文件存儲區可能存在多個地址記錄區的情況,本發明實施例所述的獲取文件單元910:可以用于獲取應用如上述一種監控環境下存儲數據包的方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,當所述地址記錄區為多個時,每個非最后一個地址記錄區中均記錄了該地址記錄區之后的下一地址記錄區的地址;
[0146]相應地,所述第一讀取單元940:可以用于根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;根據該對數據包的讀取指令,判斷是否結束對數據包存儲地址的讀取;如果否,且該當前地址記錄區記錄了下一地址記錄區的地址,根據該當前地址記錄區記錄的下一地址記錄區的地址,查詢出下一地址記錄區,將該下一地址記錄區作為當前地址記錄區,返回到根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址的步驟。
[0147]再具體地,例如所述獲取文件單元910:可以用于獲取應用如上述一種監控環境下存儲數據包的方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,當所述地址記錄區為多個時,每個非最后一個地址記錄區的第一預設位置中均記錄了下一地址記錄區標志,每個非最后一個地址記錄區的第二預設位置中均記錄了該地址記錄區之后的下一個地址記錄區的地址,每個非最后一個地址記錄區的第三預設位置中均記錄了該地址記錄區保存的數據包存儲地址的個數;
[0148]相應地,所述第一讀取單元940:可以用于根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;如果還未結束對數據包存儲地址的讀取,判斷該當前地址記錄區中第一預設位置是否存在下一地址記錄區標志;如果存在,從該當前地址記錄區的第二預設位置讀取出下一地址記錄區的地址,根據該下一地址記錄區的地址,查詢出下一地址記錄區,將該下一地址記錄區作為當前地址記錄區,繼續執行所述根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址的步驟。
[0149]為了簡單快速的確定于待讀取數據包的監聽時刻對應、且與待讀取數據包的服務類型對應的位置,本發明實施例所述的地址記錄區可以采用二維索引表的存儲結構。例如,本發明實施例提供的裝置的獲取文件單元910:可以用于獲取應用如上述一種監控環境下存儲數據包的方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,其中所述地址記錄區為二維索引表,其中一列對應一個服務類型,一行對應一個監聽時刻;
[0150]相應地,所述第一讀取單元940:可以用于根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址。
[0151]下面結合幾種可能的對數據包的讀取指令,對本發明實施例讀取數據包存儲地址的具體實現方式進行詳細介紹,例如:
[0152]在一種可能的實現方式中,所述獲取指令單元920:可以用于獲取對數據包的讀取指令,所述對數據包的讀取指令為:每第一預設時長內讀取出與一個或一個以上指定服務類型對應的在第二預設數量個時刻內的數據包;
[0153]相應地,所述第一讀取單元940:可以用于在二維索引表中,將讀數據指針每第一預設時長內偏移第二預設數量個行,每偏移一行時,從該行與所述一個或一個以上指定服務類型對應的列中讀取出數據包存儲地址,如果所述讀數據指針偏移至非最后一個二維索引表的表尾,確定未結束對數據包存儲地址的讀取;
[0154]所述第二讀取單元950:可以用于在讀取出一個數據包存儲地址的同時,尋址到該數據包存儲地址,從中讀取出數據包。
[0155]在另一種可能的實現方式中,所述獲取指令單元920:可以用于獲取對數據包的讀取指令,所述對數據包的讀取指令為:讀取與任一監聽時刻對應、與任一服務類型對應、且排序位置在所有數據包中指定百分比位置的某個數據包;
[0156]相應地,所述第一讀取單元940:可以用于將第一個二維索引表作為當前二維索引表,設置數據包存儲地址的總個數的初始值;如果當前二維索引表的第一預設位置不存在下一地址記錄區標志,遍歷當前二維索引表,通過所述遍歷及根據所述當前二維索引表中保存的每個數據包存儲地址占預設固定位數、且未寫入數據包存儲地址的位置以特殊標記占位,計算當前二維索引表的數據包存儲地址的個數,累計入數據包存儲地址的總個數;如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從該當前二維索引表的第三預設位置讀取出當前二維索引表的數據包存儲地址的個數,累計入數據包存儲地址的總個數,從該當前二維索引表的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,返回到所述如果當前二維索引表的第一預設位置不存在下一地址記錄區標志,遍歷當前二維索引表的步驟;將第一個二維索引表作為當前二維索引表,設置臨時計數值的初值;假定該某個數據包為第X個數據包,根據X等于所述指定百分比乘以所述數據包存儲地址的總個數,計算出X值;如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從當前二維索引表的第三預設位置中讀取出當前二維索引表中保存的數據包存儲地址的個數,將該讀取出的個數累計入所述臨時計數值,判斷所述臨時計數值是否大于或等于所述X值,如果否且當前二維索引表的第一預設位置存在下一地址記錄區標志,從該當前地址記錄區的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,返回到如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從當前二維索引表的第三預設位置中讀取出當前二維索引表中保存的數據包存儲地址的個數,將該讀取出的個數累計入所述臨時計數值的步驟;根據所述臨時計數值與X值的差值、每個數據包存儲地址占預設固定位數、且未寫入數據包存儲地址的位置以特殊標記占位,查詢出該第X個數據包存儲地址在當前二維索引表中的位置;將讀數據指針移位至該第X個數據包存儲地址在二維索引表中的位置,讀取出該第X個數據包存儲地址,并且確定結束對數據包存儲地址的讀取。
[0157]在又一種可能的實現方式中,所述獲取指令單元920:可以用于獲取對數據包的讀取指令,所述對數據包的讀取指令為:讀取指定服務類型的第X個數據包;
[0158]相應地,所述第一讀取單元940:可以用于假定所述指定服務類型對應的列為J列,假定所述當前二維索引表的列共對應SN個服務類型,假定每個數據包存儲地址占預設固定位數D ;設置N=I及指定數據包存儲地址個數=0 ;判斷當前二維索引表是否存在第D*(N*SN+J)位;如果不存在且當前二維索引表的最后一行的最后一個位置存在下一地址記錄區標志,從該當前地址記錄區的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,設置N=l,返回到判斷當前二維索引表是否存在第D* (N*SN+J)位的步驟;如果存在,判斷當前二維索引表的第D* (N*SN+J)位是否存在特殊標記,其中所述特殊標記用于標識二維索引表中未寫入數據包存儲地址的位置,如果不存在,指定數據包存儲地址個數加1,如果所述指定數據包存儲地址個數小于X值,N=N+1,返回到判斷當前二維索引表是否存在第D*(N*SN+J)位的步驟,如果所述指定數據包存儲地址個數等于X值,將讀數據指針移位至當前索引表的該第D* (N*SN+J)位,從中讀取出該第X個數據包存儲地址。
[0159]可見,由于本發明上述實施例獲取文件單元所獲取的文件存儲區保存了地址記錄區和數據包,所述地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應,因此,在獲取對數據包的讀取指令后,可以由解析單元解析該讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻,進而第一讀取單元可以直接從地址記錄區中與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置讀取出數據包存儲地址,再由第二讀取單元從數據包存儲地址直接讀取出數據包,而無需對數據包進行解析,可以快速準確地讀取出指定監聽時間段內指定服務的數據包,進而使監聽人員快速了解服務的網絡狀態,及時發現問題,確保服務的穩定。
[0160]需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
[0161]以上所述僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍。凡在本發明的精神和原則之內所作的任何修改、等同替換、改進等,均包含在本發明的保護范圍內。
【權利要求】
1.一種監控環境下存儲數據包的方法,其特征在于,包括: 接收數據包,以及獲取該數據包的監聽時刻; 對接收到的數據包執行存儲步驟,所述存儲步驟包括:根據該數據包大小,從文件存儲區中動態分配存儲區保存該數據包,提取該數據包的存儲地址,以及通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置,其中,該文件存儲區中至少分配一塊存儲區作為地址記錄區;以及,判斷是否還有需接收的數據包; 如果是,返回到接收數據包的步驟。
2.根據權利要求1所述的方法,其特征在于,所述文件存儲區中至少分配一塊存儲區作為地址記錄區包括: 在該文件存儲區中不存在地址記錄區時,分配一塊連續的存儲區作為地址記錄區,將該地址記錄區作為當前用于寫入數據包存儲地址的地址記錄區; 如果當前用于寫入數據包存儲地址的地址記錄區已無可用于寫入數據包存儲地址的位置時,分配一塊連續的存儲區作為下一地址記錄區,并將該下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區,將該下一地址記錄區作為當前用于寫入數據包存儲地址的地址記錄區。
3.根據權利要求2所述的方法,其特征在于,所述將下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區包括: 將下一地址記錄區標志寫入該當前用于寫入數據包存儲地址的地址記錄區的第一預設位置; 將該下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區的第二預設位置; 統計該當前用于寫入數據包存儲地址的地址記錄區中已寫入的數據包存儲地址總數,將統計的總數寫入該當前用于寫入數據包存儲地址的地址記錄區的第三預設位置。
4.根據權利要求1所述的方法,其特征在于,在所述接收數據包之后,還包括:將該數據包放入內存; 在所述對接收到的數據包執行存儲步驟之前,還包括:將該數據包從內存中取出; 所述判斷是否還有需接收的數據包具體根據實時監聽數據包到達的狀態進行判斷。
5.根據權利要求4所述的方法,其特征在于,所述對接收到的數據包執行存儲步驟之后還包括:判斷內存中是否還有未取出的數據包,如果有,從內存中取出該還未取出的數據包,返回到對接收到的數據包執行存儲步驟的步驟。
6.根據權利要求4所述的方法,其特征在于,所述將該數據包從內存中取出具體在實時監聽到數據包到達內存時,從內存中取出該數據包; 所述對接收到的數據包執行存儲步驟時,如果實時監聽到另一數據包到達內存,從內存中取出該數據包,對該數據包執行存儲步驟。
7.根據權利要求1-6任一項所述的方法,其特征在于,所述地址記錄區為二維索引表,其中一列對應一個服務類型,一行對應一個監聽時刻; 所述將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置的具體實現為: 查詢出該數據包的服務類型在所述二維索引表中對應的列,假定為J列; 如果所述二維索引表中不存在任一數據包存儲地址,將寫數據指針移位至所述二維索引表的第一行的第J列,寫入該數據包的存儲地址,并占預設固定位數,將該第一行對應該數據包的監聽時刻; 如果所述二維索引表中已存在任一數據包存儲地址且已存在與該數據包的監聽時刻對應的行,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數; 如果所述二維索引表中已存在任一數據包存儲地址且不存在與該數據包的監聽時刻對應的行,查詢出第一個未寫入數據包存儲地址的行,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數,將該行對應該數據包的監聽時刻。
8.—種監控環境下存儲數據包的裝置,其特征在于,包括: 接收單元:用于接收數據包,以及獲取該數據包的監聽時刻; 存儲單元:用于對接收到的數據包執行存儲步驟,所述存儲步驟包括:根據該數據包大小,從文件存儲區中動態分配存儲區保存該數據包,提取該數據包的存儲地址,以及通過對該數據包進行解析得到該數據包的服務類型,將該數據包的存儲地址寫入地址記錄區中與該數據包的監聽時刻對應、且與該數據包的服務類型對應的位置,其中,該文件存儲區中至少分配一塊存儲區作為地址記錄區; 判斷單元:用于判斷是否還有需接收的數據包,如果是,觸發接收單元執行。
9.根據權利要求8所述的裝置,其特征在于,所述存儲單元:用于在該文件存儲區中不存在地址記錄區時,分配一塊連續的存儲區作為地址記錄區,將該地址記錄區作為當前用于寫入數據包存儲地址的地址記錄區;如果當前用于寫入數據包存儲地址的地址記錄區已無可用于寫入數據包存儲地址的位置時,分配一塊連續的存儲區作為下一地址記錄區,并將該下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區,將該下一地址記錄區作為當前用于寫入數據包存儲地址的地址記錄區。
10.根據權利要求9所述的裝置,其特征在于,所述存儲單元:用于將下一地址記錄區標志寫入該當前用于寫入數據包存儲地址的地址記錄區的第一預設位置;將該下一地址記錄區的地址寫入該當前用于寫入數據包存儲地址的地址記錄區的第二預設位置;統計該當前用于寫入數據包存儲地址的地址記錄區中已寫入的數據包存儲地址總數,將統計的總數寫入該當前用于寫入數據包存儲地址的地址記錄區的第三預設位置。
11.根據權利要求8所述的裝置,其特征在于,所述接收單元:用于在接收數據包之后,還將該數據包放入內存; 所述存儲單元:用于在對接收到的數據包執行存儲步驟之前,還將該數據包從內存中取出; 所述判斷單元:用于根據實時監聽數據包到達的狀態判斷是否還有需接收的數據包。
12.根據權利要求11所述的裝置,其特征在于,所述存儲單元:用于在對接收到的數據包執行存儲步驟之后,還判斷內存是否還有未取出的數據包,如果有,從內存中取出該還未取出的數據包,返回到對接收到的數據包執行存儲步驟的步驟。
13.根據權利要求11所述的裝置,其特征在于,所述存儲單元:用于在實時監聽到數據包到達內存時,從內從中取出該數據包,在對接收到的數據包執行存儲步驟時,如果實時監聽到另一數據包到達內存,從內從中取出該數據包,對該數據包執行存儲步驟。
14.根據權利要求8-13任一項所述的裝置,其特征在于,所述存儲單元:用于對接收到的數據包執行包括如下步驟的存儲步驟:查詢出該數據包的服務類型在所述二維索引表中對應的列,假定為J列;如果所述二維索引表中不存在任一數據包存儲地址,將寫數據指針移位至所述二維索引表的第一行的第J列,寫入該數據包的存儲地址,并占預設固定位數,將該第一行對應該數據包的監聽時刻;如果所述二維索引表中已存在任一數據包存儲地址且已存在與該數據包的監聽時刻對應的行,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數;如果所述二維索引表中已存在任一數據包存儲地址且不存在與該數據包的監聽時刻對應的行,查詢出第一個未寫入數據包存儲地址的行,將寫數據指針移位至該行的第J列,寫入該數據包的存儲地址,并占預設固定位數,將該行對應該數據包的監聽時刻。
15.一種監控環境下讀取數據包的方法,其特征在于,包括: 獲取應用如權利要求1到7任意一項所述方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,所述地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應; 獲取對數據包的讀取指令; 解析對數據包的讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻; 根據該對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址; 根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包。
16.根據權利要求15所述的方法,其特征在于,當所述地址記錄區為多個時,每個非最后一個地址記錄區中均記錄了該地址記錄區之后的下一地址記錄區的地址; 所述根據該對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址包括: 根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址; 根據該對數據包的讀取指令,判斷是否結束對數據包存儲地址的讀取; 如果否,且該當前地址記錄區記錄了下一地址記錄區的地址,根據該當前地址記錄區記錄的下一地址記錄區的地址,查詢出下一地址記錄區,將該下一地址記錄區作為當前地址記錄區,返回到根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址的步驟。
17.根據權利要求16所述的方法,其特征在于,當所述地址記錄區為多個時,每個非最后一個地址記錄區的第一預設位置中均記錄了下一地址記錄區標志,每個非最后一個地址記錄區的第二預設位置中均記錄了該地址記錄區之后的下一個地址記錄區的地址,每個非最后一個地址記錄區的第三預設位置中均記錄了該地址記錄區保存的數據包存儲地址的個數; 所述根據該對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址包括: 根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址; 如果還未結束對數據包存儲地址的讀取,判斷該當前地址記錄區中第一預設位置是否存在下一地址記錄區標志; 如果存在,從該當前地址記錄區的第二預設位置讀取出下一地址記錄區的地址,根據該下一地址記錄區的地址,查詢出下一地址記錄區,將該下一地址記錄區作為當前地址記錄區,繼續執行所述根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址的步驟。
18.根據權利要求15-17任一項所述的方法,其特征在于,所述地址記錄區為二維索引表,其中一列對應一個服務類型,一行對應一個監聽時刻; 所述根據對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址為: 根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址。
19.根據權利要求18所述的方法,其特征在于,所述對數據包的讀取指令為:每第一預設時長內讀取出與一個或一個以上指定服務類型對應的在第二預設數量個時刻內的數據包; 所述根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址包括:在二維索引表中,將讀數據指針每第一預設時長內偏移第二預設數量個行,每偏移一行時,從該行與所述一個或一個以上指定服務類型對應的列中讀取出數據包存儲地址,如果所述讀數據指針偏移至非最后一個二維索引表的表尾,確定未結束對數據包存儲地址的讀取; 所述根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包包括:在讀取出一個數據包存儲地址的同時,尋址到該數據包存儲地址,從中讀取出數據包。
20.根據權利要求18所述的方法,其特征在于,所述對數據包的讀取指令為:讀取與任一監聽時刻對應、與任一服務類型對應、且排序位置在所有數據包中指定百分比位置的某個數據包; 所述根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址包括:將第一個二維索引表作為當前二維索引表,設置數據包存儲地址的總個數的初始值;如果當前二維索引表的第一預設位置不存在下一地址記錄區標志,遍歷當前二維索引表,通過所述遍歷及根據所述當前二維索引表中保存的每個數據包存儲地址占預設固定位數、且未寫入數據包存儲地址的位置以特殊標記占位,計算當前二維索引表的數據包存儲地址的個數,累計入數據包存儲地址的總個數; 如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從該當前二維索引表的第三預設位置讀取出當前二維索引表的數據包存儲地址的個數,累計入數據包存儲地址的總個數,從該當前二維索引表的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,返回到所述如果當前二維索引表的第一預設位置不存在下一地址記錄區標志,遍歷當前二維索引表的步驟; 將第一個二維索引表作為當前二維索引表,設置臨時計數值的初值; 假定該某個數據包為第X個數據包,根據X等于所述指定百分比乘以所述數據包存儲地址的總個數,計算出X值; 如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從當前二維索引表的第三預設位置中讀取出當前二維索引表中保存的數據包存儲地址的個數,將該讀取出的個數累計入所述臨時計數值,判斷所述臨時計數值是否大于或等于所述X值,如果否且當前二維索引表的第一預設位置存在下一地址記錄區標志,從該當前地址記錄區的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,返回到如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從當前二維索引表的第三預設位置中讀取出當前二維索引表中保存的數據包存儲地址的個數,將該讀取出的個數累計入所述臨時計數值的步驟; 根據所述臨時計數值與X值的差值、每個數據包存儲地址占預設固定位數、且未寫入數據包存儲地址的位置以特殊標記占位,查詢出該第X個數據包存儲地址在當前二維索引表中的位置; 將讀數據指針移位至該第X個數據包存儲地址在二維索引表中的位置,讀取出該第X個數據包存儲地址,并且確定結束對數據包存儲地址的讀取。
21.根據權利要求18所述的方法,其特征在于,所述對數據包的讀取指令為:讀取指定服務類型的第X個數據包; 所述根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址包括: 假定所述指定服務類型對應的列為J列,假定所述當前二維索引表的列共對應SN個服務類型,假定每個數據包存儲地址占預設固定位數D ; 設置N=I及指定數據包存儲地址個數=O ; 判斷當前二維索引表是否存在第D* (N*SN+J)位; 如果不存在且當前二維索引表的最后一行的最后一個位置存在下一地址記錄區標志,從該當前地址記錄區的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,設置N=l,返回到判斷當前二維索引表是否存在第D* (N*SN+J)位的步驟; 如果存在,判斷當前二維索引表的第D* (N*SN+J)位是否存在特殊標記,其中所述特殊標記用于標識二維索引表中未寫入數據包存儲地址的位置,如果不存在,指定數據包存儲地址個數加1,如果所述指定數據包存儲地址個數小于X值,N=N+1,返回到判斷當前二維索引表是否存在第D* (N*SN+J)位的步驟,如果所述指定數據包存儲地址個數等于X值,將讀數據指針移位至當前索引表的該第D* (N*SN+J)位,從中讀取出該第X個數據包存儲地址。
22.—種監控環境下讀取數據包的裝置,其特征在于,包括: 獲取文件單元:用于獲取應用如權利要求1到7任意一項所述方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,所述地址記錄區用于保存數據包存儲地址,其中,每個數據包存儲地址保存的位置均與一個服務類型對應且與一個監聽時刻對應; 獲取指令單元:用于獲取對數據包的讀取指令; 解析單元:用于解析對數據包的讀取指令以獲取待讀取數據包的服務類型及待讀取數據包的監聽時刻; 第一讀取單元:用于根據該對數據包的讀取指令,從地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址; 第二讀取單元:用于根據該對數據包的讀取指令,從所述數據包存儲地址中讀取出數據包。
23.根據權利要求22所述的裝置,其特征在于,所述獲取文件單元:用于獲取應用如權利要求I到7任意一項所述方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,當所述地址記錄區為多個時,每個非最后一個地址記錄區中均記錄了該地址記錄區之后的下一地址記錄區的地址; 所述第一讀取單元:用于根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;根據該對數據包的讀取指令,判斷是否結束對數據包存儲地址的讀取;如果否,且該當前地址記錄區記錄了下一地址記錄區的地址,根據該當前地址記錄區記錄的下一地址記錄區的地址,查詢出下一地址記錄區,將該下一地址記錄區作為當前地址記錄區,返回到根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址的步驟。
24.根據權利要求23所述的裝置,其特征在于,所述獲取文件單元:用于獲取應用如權利要求I到7任意一項所述方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,當所述地址記錄區為多個時,每個非最后一個地址記錄區的第一預設位置中均記錄了下一地址記錄區標志,每個非最后一個地址記錄區的第二預設位置中均記錄了該地址記錄區之后的下一個地址記錄區的地址,每個非最后一個地址記錄區的第三預設位置中均記錄了該地址記錄區保存的數據包存儲地址的個數; 所述第一讀取單元:用于根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址;如果還未結束對數據包存儲地址的讀取,判斷該當前地址記錄區中第一預設位置是否存在下一地址記錄區標志;如果存在,從該當前地址記錄區的第二預設位置讀取出下一地址記錄區的地址,根據該下一地址記錄區的地址,查詢出下一地址記錄區,將該下一地址記錄區作為當前地址記錄區,繼續執行所述根據該對數據包的讀取指令,從當前地址記錄區保存的數據包存儲地址中,讀取出與待讀取數據包的服務類型對應且與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址的步驟。
25.根據權利要求22-24任一項所述的裝置,其特征在于,所述獲取文件單元:用于獲取應用如權利要求1到7任意一項所述方法對數據包進行存儲得到的文件存儲區,其中,所述文件存儲區中保存了地址記錄區和數據包,其中所述地址記錄區為二維索引表,其中一列對應一個服務類型,一行對應一個監聽時刻; 所述第一讀取單元:用于根據對數據包的讀取指令,從二維索引表保存的數據包存儲地址中,讀取出列與待讀取數據包的服務類型對應、且行與待讀取數據包的監聽時刻對應的位置所保存的數據包存儲地址。
26.根據權利要求25所述的裝置,其特征在于,所述獲取指令單元:用于獲取對數據包的讀取指令,所述對數據包的讀取指令為:每第一預設時長內讀取出與一個或一個以上指定服務類型對應的在第二預設數量個時刻內的數據包; 所述第一讀取單元:用于在二維索引表中,將讀數據指針每第一預設時長內偏移第二預設數量個行,每偏移一行時,從該行與所述一個或一個以上指定服務類型對應的列中讀取出數據包存儲地址,如果所述讀數據指針偏移至非最后一個二維索引表的表尾,確定未結束對數據包存儲地址的讀取; 所述第二讀取單元:用于在讀取出一個數據包存儲地址的同時,尋址到該數據包存儲地址,從中讀取出數據包。
27.根據權利要求25所述的裝置,其特征在于,所述獲取指令單元:用于獲取對數據包的讀取指令,所述對數據包的讀取指令為:讀取與任一監聽時刻對應、與任一服務類型對應、且排序位置在所有數據包中指定百分比位置的某個數據包; 所述第一讀取單元:用于將第一個二維索引表作為當前二維索引表,設置數據包存儲地址的總個數的初始值;如果當前二維索引表的第一預設位置不存在下一地址記錄區標志,遍歷當前二維索引表,通過所述遍歷及根據所述當前二維索引表中保存的每個數據包存儲地址占預設固定位數、且未寫入數據包存儲地址的位置以特殊標記占位,計算當前二維索引表的數據包存儲地址的個數,累計入數據包存儲地址的總個數;如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從該當前二維索引表的第三預設位置讀取出當前二維索引表的數據包存儲地址的個數,累計入數據包存儲地址的總個數,從該當前二維索引表的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,返回到所述如果當前二維索引表的第一預設位置不存在下一地址記錄區標志,遍歷當前二維索引表的步驟;將第一個二維索引表作為當前二維索引表,設置臨時計數值的初值;假定該某個數據包為第X個數據包,根據X等于所述指定百分比乘以所述數據包存儲地址的總個數,計算出X值;如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從當前二維索引表的第三預設位置中讀取出當前二維索引表中保存的數據包存儲地址的個數,將該讀取出的個數累計入所述臨時計數值,判斷所述臨時計數值是否大于或等于所述X值,如果否且當前二維索引表的第一預設位置存在下一地址記錄區標志,從該當前地址記錄區的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,返回到如果當前二維索引表的第一預設位置存在下一地址記錄區標志,從當前二維索引表的第三預設位置中讀取出當前二維索引表中保存的數據包存儲地址的個數,將該讀取出的個數累計入所述臨時計數值的步驟;根據所述臨時計數值與X值的差值、每個數據包存儲地址占預設固定位數、且未寫入數據包存儲地址的位置以特殊標記占位,查詢出該第X個數據包存儲地址在當前二維索引表中的位置;將讀數據指針移位至該第X個數據包存儲地址在二維索引表中的位置,讀取出該第X個數據包存儲地址,并且確定結束對數據包存儲地址的讀取。
28.根據權利要求25所述的裝置,其特征在于,所述所述獲取指令單元:用于獲取對數據包的讀取指令,所述對數據包的讀取指令為:讀取指定服務類型的第X個數據包; 所述第一讀取單元:用于假定所述指定服務類型對應的列為J列,假定所述當前二維索引表的列共對應SN個服務類型,假定每個數據包存儲地址占預設固定位數D ;設置N=I及指定數據包存儲地址個數=O ;判斷當前二維索引表是否存在第D* (N*SN+J)位;如果不存在且當前二維索引表的最后一行的最后一個位置存在下一地址記錄區標志,從該當前地址記錄區的第二預設位置讀取出下一二維索引表的地址,根據該下一二維索引表的地址,查詢出下一二維索引表,將該下一二維索引表作為當前二維索引表,設置N=l,返回到判斷當前二維索引表是否存在第D* (N*SN+J)位的步驟;如果存在,判斷當前二維索引表的第D* (N*SN+J)位是否存在特殊標記,其中所述特殊標記用于標識二維索引表中未寫入數據包存儲地址的位置,如果不存在,指定數據包存儲地址個數加1,如果所述指定數據包存儲地址個數小于X值,N=N+1,返回到判斷當前二維索引表是否存在第D* (N*SN+J)位的步驟,如果所述指定數據包存儲地址個數等于X值,將讀數據指針移位至當前索引表的該第D*(N*SN+J)位,從中讀取出該第X個數據包存儲地址。
【文檔編號】G06F17/30GK104253713SQ201310257503
【公開日】2014年12月31日 申請日期:2013年6月25日 優先權日:2013年6月25日
【發明者】盧林鋒 申請人:阿里巴巴集團控股有限公司