本申請涉及網絡通信技術領域,特別涉及一種基于數據報文分類的報文壓縮的方法和裝置。
背景技術:
數據報文是網絡設備進行信息交互的媒介,隨著網絡設備的智能化,網絡環境的復雜化,數據報文的傳輸也變得愈發龐大,網絡間數據傳輸的穩定、可靠尤其重要。
不論是路由器還是交換機或者更為高級的網絡交換設備,其CPU的交換容量都有自己的固有能力,如果數據報文過大,導致超出CPU的處理能力,勢必會出現數據傳輸失敗,流量丟失的情況。
技術實現要素:
有鑒于此,本申請提供一種基于數據報文分類的報文壓縮的方法和裝置,應用于交換設備。
具體地,本申請是通過如下技術方案實現的:
一種基于數據報文分類的報文壓縮的方法,應用于交換設備,包括:
基于預設的訪問控制列表ACL規則,對接收到的數據報文進行分類;
對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文;其中,所述壓縮報文包含數據載荷相同的報文個數以及相同的數據載荷;
將所述壓縮報文上報至CPU,由該CPU將所述壓縮報文發送至對端設備。
一種基于數據報文分類的報文壓縮的裝置,應用于交換設備,包括:
分類單元,用于基于預設的ACL規則,對接收到的數據報文進行分類;
壓縮單元,用于對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文;其中,所述壓縮報文包含數據載荷相同的報文個數以及相同的數據載荷;
上報單元,用于將所述壓縮報文上報至CPU,由該CPU將所述壓縮報文發送至對端設備。
由以上本申請提供的技術方案可見,本申請通過基于預設的ACL規則,對接收到的數據報文進行分類;對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文;其中,所述壓縮報文包含數據載荷相同的報文個數以及相同的數據載荷;然后將所述壓縮報文上報至CPU,由該CPU將所述壓縮報文發送至對端設備。
由于針對各類型數據報文中的相同數據報文進行了裁剪,并將所述裁剪后若干相同數據報文壓縮成一個數據報文,從而可以降低接收到的數據報文的報文負載,提升CPU緩存區的使用率以及緩解CPU的報文傳輸壓力,可以有效解決在進行大數據傳輸時由于CPU處理能力有限,對接收到的數據報文進行丟棄而導致數據傳輸丟失的問題。
附圖說明
圖1為相關技術中一示例性實施例示出的一種數據報文上報的原理圖;
圖2為相關技術中一示例性實施例示出的一種數據報文上報的示意圖;
圖3為本申請一示例性實施例示出的一種基于數據報文分類的報文壓縮的方法流程圖;
圖4為本申請一示例性實施例示出的一種數據報文分類的示意圖;
圖5為本申請一示例性實施例示出的一種數據報文壓縮的示意圖;
圖6為本申請一示例性實施例示出的一種壓縮報文解壓縮的示意圖;
圖7為本申請一示例性實施例示出的一種基于數據報文分類的報文壓縮的裝置所在交換設備的一種硬件結構圖;
圖8為本申請一示例性實施例示出的一種基于數據報文分類的報文壓縮的裝置。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權利要求書中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指并包含一個或多個相關聯的列出項目的任何或所有可能組合。
應當理解,盡管在本申請可能采用術語第一、第二、第三等來描述各種信息,但這些信息不應限于這些術語。這些術語僅用來將同一類型的信息彼此區分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應于確定”。
請參見圖1,圖1為相關技術中一示例性實施例示出的一種數據報文上報的原理圖。
在相關技術中,交換設備通過物理口收到數據報文后,首先會將數據報文緩存至CPU的物理緩存區中。其中,物理緩存區中緩存的數據報文,可以采用中斷的方式上報給CPU。在數據緩存的過程中,當中斷周期到達,交換設備可以暫停將數據報文緩存至CPU的物理緩存區中,然后將物理緩存區中緩存的數據報文上報至CPU,該CPU收到數據報文后可以關閉中斷上下文,并喚醒任務上下文,接著就可以對緩存區上報的數據報文進行處理了。最后對該數據報文處理完畢之后,就可以將數據報文通過物理出接口發送至對端設備。
然而,中斷響應之前,當CPU的物理緩存區被占滿時,就會有大量的數據報文被上報至CPU,這樣就會給CPU的處理帶來很大的壓力。而且,如果CPU的帶寬被占滿,在這樣的情況下,必然會引起CPU的處理能力下降,導致部分數據報文丟失,從而就會給用戶帶來巨大的損失。
例如,如圖2所示,交換設備接收到數據報文后,會將報文緩存至CPU的物理緩存區中,假設每個緩存節點上的儲存空間為M,CPU共有N個緩存節點,那么這個CPU的交換容量即為M*N,如果CPU的帶寬已經被占滿了,在這樣的情況下,該CPU的處理能力已然已經下降了,當數據報文的容量超過M*N時,在這樣的情況下,多余的數據報文就會全部丟失。
為了解決相關技術中存在的問題,本申請提供了一種基于數據報文分類的報文壓縮的方法,應用于交換設備,通過基于預設的訪問控制列表ACL規則,對接收到的數據報文進行分類;然后對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文;其中,所述壓縮報文包含數據載荷相同的報文個數以及相同的數據載荷;最后,將所述壓縮報文上報至CPU,由該CPU將所述壓縮報文發送至對端設備。
由于針對各類型數據報文中的相同數據報文進行了裁剪,并將所述裁剪后若干相同數據報文壓縮成一個數據報文,從而可以降低接收到的數據報文的報文負載,提升CPU緩存區的使用率以及緩解CPU的報文傳輸壓力,可以有效解決在進行大數據傳輸時由于CPU處理能力有限,對接收到的數據報文進行丟棄而導致數據傳輸丟失的問題。
請參見圖3,圖3為本申請一示例性實施例示出的一種基于數據報文分類的報文壓縮的方法流程圖,應用于交換設備,具體執行以下步驟:
步驟301:基于預設的ACL規則,對接收到的數據報文進行分類;
步驟302:對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文;其中,所述壓縮報文包含數據載荷相同的報文個數以及相同的數據載荷;
步驟303:將所述壓縮報文上報至CPU,由該CPU將所述壓縮報文發送至對端設備。
在本例中,用戶可以在上述交換設備上預先配置ACL(Access Control list,訪問控制列表)規則。其中,上述ACL規則用于將交換設備接收到的數據報文進行分類在該ACL規則中可以包含用于進行匹配的分類特征。
其中,上述分類特征,在本例中不進行特別限定,可以基于實際的分類需求進行設定;例如,可以包括三層報文頭、協議類型、二層報文頭、以太網類型、VLAN等不同的報文特征。
上述ACL規則中,除了上述分類特征以外,還可以包括與上述分類特征對應的執行動作。其中,在一種實施方式中,上述執行動作可以是將與分類特征匹配的數據報文緩存至指定的緩存隊列。
當物理口接收到數據報文后,可以基于CPU下發的ACL規則對接收到的數據報文進行分類。
其中,CPU下發上述ACL規則時,可以在物理端口收到數據報文之前預先下發,也可以在物理端口接收到數據報文后,進行動態下發,在本例中不進行特別限定。
例如,如圖4所示,物理端口可以將接收到的數據報文逐條與所述若干條ACL規則進行匹配,比如當數據報文A與ACL規則A進行匹配時,如果ACL規則A對應的動作是將匹配成功的數據報文緩存至緩存隊列0里面,那么數據報文A與ACL規則匹配成功,就可以將數據報文A緩存至緩存隊列0里面;如果匹配不成功,那么就可以將數據報文A與其余ACL規則繼續進行匹配,直到匹配成功。
在示出的一種實施方式中,用戶還可以按照使用場景及數據傳輸的重要程度,對不同分類的數據報文分別預配置優先級,同時為了保證優先級高的數據報文優先被處理,在將不同分類的數據報文緩存至不同的緩存隊列之后,還可以根據為不同分類數據報文分別預配置的優先級,按照優先級從高到低的順序針對各緩存隊列進行排序。
當排序完成后,可以基于排序后的緩存隊列就可以生成對應的緩存鏈表。此時生成的該緩存鏈表中的各緩存隊列,后續將會按照該排序的順序依次進行處理。
CPU生成對應的緩存鏈表之后,就可以基于數據報文與緩存隊列的對應關系,將匹配成功的數據報文緩存至緩存鏈表中相應的緩存隊列中。其中,所述緩存鏈表的容量會隨著數據報文的增多變得越來越大,不僅緩存隊列的數量會增多,而且緩存隊列中的數據報文的數量也會逐漸增多。
在示出的一種實施方式中,數據報文緩存至緩存隊列中相應的緩存隊列中之后,CPU可以遍歷所述緩存鏈表,然后依次查找所述緩存鏈表中各緩存隊列中,是否存在數據載荷相同的數據報文;如果存在數據載荷相同的數據報文,此時,CPU可以統計數據載荷相同的數據報文的數量,并可以從所述數據載荷相同的報文中裁剪出數據載荷;然后可以將基于裁剪出的數據載荷構建對應的壓縮報文。
其中,CPU在遍歷上述緩存鏈表時,可以按照緩存鏈表中緩存隊列的順序,依次在各緩存隊列中查找數據載荷相同的數據報文。例如,CPU依次在各緩存隊列中查找數據載荷相同的數據報文時,如果某一緩存隊列中出現多條數據載荷相同的數據報文時,則可以將這多條數據報文進行裁剪,將數據報文的報文頭和數據載荷分離,然后在數據載荷部分添加數據載荷相同的數據報文的個數的內容,在這種情況下,數據載荷部分就可以包括數據載荷和相同數據報文個數,因此就可以將多個數據載荷相同的數據報文壓縮成一個數據報文。之后,如果再次出現相同的數據報文,此時就可以直接對原來壓縮過的數據報文中的數據載荷部分進行修改,對數據載荷相同的數據報文的個數進行相應的累加即可。
在示出的一種實施方式中,當對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文后,還可以將與所述報文對應的原始報文刪除。
通過將壓縮報文對應的原始報文刪除,可以留出緩存空間緩存更多的數據報文,從而在大量數據報文緩存至緩存隊列時,可以在一定程度上減輕CPU的緩存壓力,避免數據報文的丟失。
當然,如果緩存隊列中不存在數據載荷相同的數據報文,則不對這些數據報文進行處理,保持數據報文原本的樣子,待報文中斷周期到達之后將這些數據報文與壓縮報文一起上報至CPU,由CPU進一步處理。
例如,如圖5所示,CPU在緩存隊列0中查找到兩個數據載荷相的數據報文時,將這兩個數據報文進行裁剪,然后形成如圖5所示的一個壓縮報文,然后將與該壓縮報文對應的原始報文刪除掉,留出更多的緩存空間緩存數據報文。
在本例中,報文中斷周期到達之后(比如CPU接收到轉發芯片上報的中斷信號),物理接口可以暫停將數據報文緩存至緩存隊列,然后可以將緩存隊列中所有的數據報文一起上報至CPU,然后,CPU會關閉中斷上下文,喚醒任務上下文,由CPU對數據報文處理。另外,為了保證對端設備完整的收到數據,在本例中,CPU在將數據報文傳輸至對端設備時,可以采用斷點重傳機制。
其中,斷點重傳機制是指,CPU在將數據報文傳輸到對端設備時,可以在接收到對端設備針對上一個數據報文的響應報文后,然后再繼續向對端設備發送數據報文,保證每一次向對端設備發送數據報文之前,先確定接收到上一個數據報文的響應報文。
可見,通過這種方式可以留出緩存空間緩存更多的數據報文,從而在大量數據報文緩存至緩存隊列時,可以在一定程度上減輕CPU的緩存壓力,避免數據報文的丟失。
以上描述為數據報文的壓縮,接下來描述的是數據報文的解壓縮。
在示出的一種實施方式中,當接收到對端設備發送的壓縮報文時,仍然可以根據ACL規則對接收到的壓縮報文進行分類,并存儲到不同緩存對列,并對緩存對列進行排序。其中,基于ACL規則進行分類以及對緩存對列的排序過程不再贅述。
當中斷周期到達后,由于此時物理緩存區中存儲數據報文可能是壓縮報文,在這種情況下,物理接口在將物理緩存區的報文上報至CPU之前,可以檢查上報的報文是否為壓縮報文(比如可以檢查數據報文承載的報文載荷中是否攜帶數據載荷相同的數據報文的個數),如果為壓縮報文,則可以還原所述壓縮過的報文,得到原始的數據報文。
具體地,可以讀取所述壓縮報文中的數據載荷相同的報文個數N;然后可以對所述壓縮報文中的數據載荷復制N次,并基于與所述壓縮報文相同的報文封裝格式,可以針對復制后的數據載荷重新進行報文封裝,以得到N個原始的數據報文。
例如,如圖6所示,從緩存隊列中提取到如圖6中所示的壓縮報文,可以從數據載荷部分讀取到數據載荷相同的報文個數N,然后可以將相同的數據載荷進行復制N次,接著按照壓縮報文的封裝格式可以將復制后的數據載荷進行數據報文的封裝,因此可以得到N個原始數據報文,然后可以將壓縮報文刪除。
由以上本申請提供的技術方案可見,本申請通過基于預設的ACL規則,對接收到的數據報文進行分類;對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文;其中,所述壓縮報文包含數據載荷相同的報文個數以及相同的數據載荷;然后將所述壓縮報文上報至CPU,由該CPU將所述壓縮報文發送至對端設備。
由于針對各類型數據報文中的相同數據報文進行了裁剪,并將所述裁剪后若干相同數據報文壓縮成一個數據報文,從而可以降低接收到的數據報文的報文負載,提升CPU緩存區的使用率以及緩解CPU的報文傳輸壓力,可以有效解決在進行大數據傳輸時由于CPU處理能力有限,對接收到的數據報文進行丟棄而導致數據傳輸丟失的問題。
與前述一種基于數據報文分類的報文壓縮的方法的實施例相對應,本申請還提供了一種基于數據報文分類的報文壓縮的裝置的實施例。
本申請一種基于數據報文分類的報文壓縮的裝置的實施例可以應用在交換設備上。裝置實施例可以通過軟件實現,也可以通過硬件或者軟硬件結合的方式實現。以軟件實現為例,作為一個邏輯意義上的裝置,是通過其所在交換設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內存中運行形成的。從硬件層面而言,如圖7所示,為本申請一種基于數據報文分類的報文壓縮的裝置所在交換設備的一種硬件結構圖,除了圖7所示的處理器、內存、網絡接口、以及非易失性存儲器之外,實施例中裝置所在的交換設備通常根據該基于數據報文分類的報文壓縮的實際功能,還可以包括其他硬件,對此不再贅述。
請參考圖8,圖8為本申請一示例性實施例示出的一種基于數據報文分類的報文壓縮的裝置,應用于交換設備,所述裝置包括:分類單元810,壓縮單元820,上報單元830。
其中,分類單元810,用于基于預設的ACL規則,對接收到的數據報文進行分類;
壓縮單元820,用于對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文;其中,所述壓縮報文包含數據載荷相同的報文個數以及相同的數據載荷;
上報單元830,用于將所述壓縮報文上報至CPU,由該CPU將所述壓縮報文發送至對端設備。
在本例中,所述裝置還包括:
緩存單元,用于將不同分類的數據報文緩存至不同的緩存隊列;
排序單元,用于根據為不同分類的數據報文分別預配置的優先級,按照優先級從高到低的順序針對各緩存隊列進行排序;
生成單元,用于基于排序后的緩存隊列生成對應的緩存鏈表。
刪除單元,用于當對分類后的數據報文中數據載荷相同的數據報文進行壓縮,生成壓縮報文后,將與所述壓縮報文對應的原始報文刪除。
讀取單元,用于當接收到對端設備發送的壓縮報文時,讀取所述壓縮報文中的數據載荷相同的報文個數N;
封裝單元,用于對所述壓縮報文中的數據載荷復制N次,并基于與所述壓縮報文相同的報文封裝格式,針對復制后的數據載荷重新進行報文封裝,以得到N個原始的數據報文。
其中,所述壓縮單元具體用于:
遍歷所述緩存鏈表,依次查找所述緩存鏈表中各緩存隊列中,是否存在數據載荷相同的數據報文;
如果存在數據載荷相同的數據報文,統計數據載荷相同的數據報文的數量,并從所述數據載荷相同的報文中裁剪出數據載荷;
基于裁剪出的數據載荷構建對應的壓縮報文。
所述上報單元具體用于:
當到達報文中斷周期時,暫停將數據報文緩存至緩存隊列中,將緩存隊列中數據報文上傳至CPU。
上述裝置中各個單元的功能和作用的實現過程具體詳見上述方法中對應步驟的實現過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本申請方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解并實施。
以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本申請的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本申請保護的范圍之內。