會話日志發(fā)送方法及裝置的制造方法
【專利摘要】本發(fā)明提供一種會話日志發(fā)送方法及裝置,該方法可以包括將會話日志隊列中的會話日志寫入當前skb中,當前skb為從預先申請的套接字緩存skb池中取出的skb;發(fā)送當前skb中的會話日志。本發(fā)明通過將會話日志存儲至會話日志隊列中,并將會話日志隊列中的各個會話日志依次寫入從預先申請的skb池中取出的skb中進行發(fā)送,可以避免出現(xiàn)會話日志大量丟包的情況,從而可以降低會話日志的丟包率。
【專利說明】
會話日志發(fā)送方法及裝置
技術領域
[0001]本發(fā)明涉及網(wǎng)絡安全技術領域,特別涉及一種會話日志發(fā)送方法及裝置。
【背景技術】
[0002]在網(wǎng)絡安全領域,準確地識別出惡意攻擊和網(wǎng)絡病毒對網(wǎng)絡設備的安全運行有著至關重要的意義?,F(xiàn)有技術中,網(wǎng)絡設備對其接收的數(shù)據(jù)流進行監(jiān)測,并形成用于存儲數(shù)據(jù)流相關信息(諸如數(shù)據(jù)流的五元組、流量大小、會話建立時間和結束時間等)的會話日志。在會話日志形成后,網(wǎng)絡設備通過將會話日志實時并行發(fā)送給識別主機,以使識別主機根據(jù)該會話日志識別出惡意攻擊和網(wǎng)絡病毒。在該識別方法中,并行發(fā)送的各個會話日志在發(fā)送之前均需要分別申請一個skb (socket buffer,套接字緩存),并且在發(fā)送完成之后需要通過釋放申請的各個skb來實現(xiàn)skb的回收。
[0003]然而,由于受到網(wǎng)絡設備內存資源的限制,可申請回收使用的skb數(shù)量有限,因此當會話日志的并發(fā)數(shù)過大時,某些會話日志有可能無法申請到skb,從而可能出現(xiàn)會話日志大量丟包的現(xiàn)象。
【發(fā)明內容】
[0004]有鑒于此,本發(fā)明提供一種日志發(fā)送方法及裝置,以解決發(fā)送會話日志時丟包率較高的問題。
[0005]根據(jù)本發(fā)明實施例的第一方面,本發(fā)明提供一種會話日志發(fā)送方法,包括:將會話日志隊列中的會話日志寫入當前套接字緩存skb中,所述當前skb為從預先申請的skb池中取出的skb ;
[0006]發(fā)送所述當前skb中的會話日志。
[0007]根據(jù)本發(fā)明實施例的第二方面,本發(fā)明提供一種會話日志發(fā)送裝置,包括:寫入單元,用于將會話日志隊列中的會話日志寫入當前skb中,所述當前skb為從預先申請的skb池中取出的skb ;
[0008]發(fā)送單元,用于發(fā)送所述當前skb中的會話日志。
[0009]綜上所述,由于采用了上述技術方案,本發(fā)明的有益效果是:
[0010]本發(fā)明實施例中,本發(fā)明通過將會話日志存儲至會話日志隊列中,并將會話日志隊列中的各個會話日志依次寫入從預先申請的skb池中取出的skb中進行發(fā)送,可以避免出現(xiàn)會話日志大量丟包的情況,從而可以降低會話日志的丟包率。
【附圖說明】
[0011]圖1是本發(fā)明會話日志發(fā)送方法的一個實施例流程圖;
[0012]圖2是本發(fā)明會話日志發(fā)送方法的另一個實施例流程圖;
[0013]圖3是本發(fā)明會話日志發(fā)送裝置所在設備的一種硬件結構圖;
[0014]圖4是本發(fā)明會話日志發(fā)送裝置的一個實施例框圖。
【具體實施方式】
[0015]為了使本技術領域的人員更好地理解本發(fā)明實施例中的技術方案,并使本發(fā)明實施例的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結合附圖對本發(fā)明實施例中技術方案作進一步詳細的說明。
[0016]參見圖1,為本發(fā)明會話日志發(fā)送方法的一個實施例的流程圖,該方法可以包括以下步驟:
[0017]步驟101、將會話日志隊列中的會話日志寫入當前skb中,該當前skb為從預先申請的Skb池中取出的skb。
[0018]在本發(fā)明的優(yōu)選實施例中,網(wǎng)絡設備可以首先在會話日志加載模塊中預先申請多個skb作為skb池,并在會話日志加載模塊中建立用于存儲會話日志的會話日志隊列;然后通過啟動會話日志加載模塊,對該skb池進行初始化并確定該skb池可循環(huán)回收利用。該skb池在初始化完成后,網(wǎng)絡設備可以調用會話日志進程來判斷會話日志隊列中是否存在會話日志。當會話日志隊列中存在會話日志時,會話日志進程從預先申請的skb池中取出skb作為當前skb,由于skb池在初始化完成后,skb池中的各個skb中的數(shù)據(jù)均被清除,各個skb具有足夠的存儲空間來存放會話日志,因而此時會話日志進程可以將該會話日志隊列中的會話日志寫入當前skb中。
[0019]在將會話日志隊列中的會話日志寫入當前skb之后,會話日志進程可以將寫入當前Skb的會話日志從會話日志隊列中清除,從而可以避免會話日志被重復寫入Skb中,由此可以提高會話日志的發(fā)送效率。其中,會話日志線程可以至少采用以下兩種方式來清除會話日志:第一種是將寫入當前Skb中的會話日志直接從會話日志隊列中刪除;第二種是使寫入當前Skb中的會話日志被新存儲至會話日志隊列中的會話日志所覆蓋。
[0020]在將寫入當前skb的會話日志從會話日志隊列中清除之后,會話日志進程可以首先判斷當前Skb中是否還具有用于存放會話日志的存儲空間。在當前Skb中還具有用于存放會話日志的存儲空間時,會話日志進程判斷會話日志隊列中是否還存在會話日志,若會話日志隊列中存在會話日志,則將該會話日志隊列中的下一個會話日志寫入當前Skb中;若會話日志隊列中不存在會話日志,則進一步判斷當前Skb中是否存放有會話日志,若當前Skb中存放有會話日志,則執(zhí)行步驟102。在當前skb中不具有用于存放會話日志的存儲空間時,會話日志進程執(zhí)行步驟102。
[0021]相比于現(xiàn)有技術中一個skb只會寫入一個會話日志,本發(fā)明通過在skb還具有用于存放會話日志的存儲空間時,繼續(xù)將會話日志隊列中的會話日志寫入skb中,可以實現(xiàn)一個Skb中寫入多個會話日志,從而可以降低發(fā)送會話日志所花費的資源開銷(諸如內存或CPU占用率)。
[0022]步驟102、發(fā)送當前skb中的會話日志。
[0023]在本發(fā)明的優(yōu)選實施例中,會話日志進程可以對當前skb的會話日志進行封裝,向當前skb中填充識別主機的IP地址等信息,并調用驅動發(fā)包函數(shù)hard_start_xmit發(fā)送當前skb中封裝后的會話日志,該驅動發(fā)包函數(shù)hard_start_xmit為struct net_device結構中的函數(shù)指針。
[0024]在當前skb中的會話日志發(fā)送完成后,會話日志進程可以至少采用以下兩種方式來回收當前Skb:第一種是直接刪除當前Skb中的數(shù)據(jù);第二種是使當前Skb中原先寫入的會話日志被新寫入的會話日志所覆蓋。
[0025]由上述實施例可見,相比于并行發(fā)送會話日志,本發(fā)明通過將會話日志存儲至會話日志隊列中,并將會話日志隊列中的各個會話日志依次寫入從預先申請的skb池中取出的skb中進行發(fā)送,可以避免出現(xiàn)會話日志大量丟包的情況,從而可以降低會話日志的丟包率。另外,相比于在并行發(fā)送會話日志時需要申請大量的skb,本發(fā)明通過預先申請由多個skb組成的skb池,并在會話日志發(fā)送完成后回收skb池中的skb,可以實現(xiàn)預先申請的skb池的重復利用,避免申請大量的skb,從而可以降低發(fā)送會話日志的資源開銷。
[0026]參見圖2,為本發(fā)明會話日志發(fā)送方法的另一個實施例的流程圖,該實施例詳細描述了會話日志發(fā)送的過程,該方法可以包括以下步驟:
[0027]步驟201、網(wǎng)絡設備在會話日志加載模塊中預先申請由1024個skb組成的skb池,并在會話日志加載模塊中建立用于存儲會話日志的會話日志隊列。
[0028]步驟202、網(wǎng)絡設備啟動會話日志加載模塊,對skb池進行初始化,以清除skb池中各個skb中的數(shù)據(jù);并且為skb池打上可循環(huán)利用的標簽FLAG_PERMANENT_SKBUFF。
[0029]步驟203、網(wǎng)絡設備啟動會話日志線程。
[0030]步驟204、會話日志線程檢測會話日志隊列中是否存在會話日志,若存在,則執(zhí)行步驟205 ;否則,執(zhí)行步驟204。
[0031]步驟205、會話日志線程從預先申請的skb池中取出skb作為當前skb。
[0032]步驟206、會話日志線程將會話日志隊列中的會話日志寫入當前skb中。
[0033]步驟207、會話日志線程將寫入當前skb中的會話日志從會話日志隊列中清除。
[0034]步驟208、會話日志線程判斷當前skb中是否還具有用于存放會話日志的存儲空間,若具有,則執(zhí)行步驟209 ;否則,執(zhí)行步驟211。
[0035]步驟209、會話日志線程判斷會話日志隊列中是否還存在會話日志,若存在,則返回執(zhí)行步驟206 ;否則,執(zhí)行步驟210。
[0036]步驟210、判斷當前skb中是否存放有會話日志,若是,則執(zhí)行步驟211,否則,執(zhí)行步驟204。
[0037]步驟211、發(fā)送當前skb中的會話日志。
[0038]步驟212、回收當前skb,執(zhí)行步驟204。
[0039]由上述實施例可見,相比于并行發(fā)送會話日志,本發(fā)明通過將會話日志存儲至會話日志隊列中,并將會話日志隊列中的各個會話日志依次寫入從預先申請的skb池中取出的skb中進行發(fā)送,可以避免出現(xiàn)會話日志大量丟包的情況,從而可以降低會話日志的丟包率。另外,相比于在并行發(fā)送會話日志時需要申請大量的skb,本發(fā)明通過預先申請由多個skb組成的skb池,并在會話日志發(fā)送完成后回收skb池中的skb,可以實現(xiàn)預先申請的skb池的重復利用,避免申請大量的skb,從而可以降低發(fā)送會話日志的資源開銷。
[0040]與前述會話日志發(fā)送方法實施例相對應,本發(fā)明還提供了會話日志發(fā)送裝置的實施例。
[0041]本發(fā)明會話日志發(fā)送裝置實施例可以通過軟件實現(xiàn),也可以通過硬件或軟硬件結合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內存中運行形成的。從硬件層面而言,如圖3所示,為本發(fā)明會話日志發(fā)送裝置所在設備的一種硬件結構圖,除了圖3所示的處理器、網(wǎng)絡接口、內存以及非易失性存儲器之外,實施例中裝置所在的設備通常還可以包括其他硬件,如負責處理報文的轉發(fā)芯片等;從硬件結構上來講該設備還可能是分布式的設備,可能包括多個接口卡,以便在硬件層面進行報文處理的擴展。
[0042]參見圖4,為本發(fā)明會話日志發(fā)送裝置的一個實施例框圖,該裝置可以包括:
[0043]寫入單元410,用于將會話日志隊列中的會話日志寫入當前skb中,所述當前skb為從預先申請的skb池中取出的skb ;
[0044]發(fā)送單元420,用于發(fā)送所述當前skb中的會話日志;
[0045]在一個可選的實現(xiàn)方式中,所述裝置還可以包括:
[0046]當前skb確定單元430,用于在將會話日志隊列中的會話日志寫入當前skb中之前,預先申請由多個skb組成的skb池;判斷所述會話日志隊列中是否存在會話日志;若存在,貝1J從所述預先申請的skb池中取出skb作為當前skb。
[0047]在另一個可選的實現(xiàn)方式中,
[0048]清除單元440,用于將寫入所述當前skb的會話日志從所述會話日志隊列中清除;
[0049]判斷單元450,用于判斷所述當前skb中是否還具有用于存放會話日志的存儲空間;
[0050]所述判斷單元450,還用于當所述當前skb中還具有用于存放會話日志的存儲空間時,判斷所述會話日志隊列中是否還存在會話日志;
[0051 ] 所述寫入單元410,還用于若所述會話日志隊列中還存在會話日志,則將所述會話日志隊列中的下一個會話日志寫入所述當前skb中。
[0052]在另一個可選的實現(xiàn)方式中,
[0053]所述發(fā)送單元420,具體用于當所述當前skb中不具有用于存放會話日志的存儲空間時,發(fā)送所述當前skb中的會話日志;或者當所述當前skb中還具有用于存放會話日志的存儲空間,且所述會話日志隊列中不存在會話日志時,判斷所述當前skb中是否存放有會話日志;若所述當前skb中存放有會話日志,則發(fā)送所述當前skb中的會話日志。
[0054]在另一個可選的實現(xiàn)方式中,所述裝置還可以包括:
[0055]回收單元460,用于回收所述當前skb。
[0056]上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應步驟的實現(xiàn)過程,在此不再贅述。
[0057]對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本發(fā)明方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
[0058]由上述實施例可見,相比于并行發(fā)送會話日志,本發(fā)明通過將會話日志存儲至會話日志隊列中,并將會話日志隊列中的各個會話日志依次寫入從預先申請的skb池中取出的skb中進行發(fā)送,可以避免出現(xiàn)會話日志大量丟包的情況,從而可以降低會話日志的丟包率。另外,相比于在并行發(fā)送會話日志時需要申請大量的skb,本發(fā)明通過預先申請由多個skb組成的skb池,并在會話日志發(fā)送完成后回收skb池中的skb,可以實現(xiàn)預先申請的skb池的重復利用,避免申請大量的skb,從而可以降低發(fā)送會話日志的資源開銷。
[0059]本領域技術人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實施方案。本申請旨在涵蓋本發(fā)明的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本發(fā)明的一般性原理并包括本發(fā)明未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權利要求指出。
[0060]應當理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本發(fā)明的范圍僅由所附的權利要求來限制。
【主權項】
1.一種會話日志發(fā)送方法,其特征在于,包括: 將會話日志隊列中的會話日志寫入當前套接字緩存Skb中,所述當前skb為從預先申請的skb池中取出的skb ; 發(fā)送所述當前Skb中的會話日志。2.根據(jù)權利要求1所述的方法,其特征在于,在將會話日志隊列中的會話日志寫入當前skb中之前,所述方法還包括: 預先申請由多個skb組成的skb池; 判斷所述會話日志隊列中是否存在會話日志; 若存在,貝1J從所述預先申請的skb池中取出skb作為當前skb。3.根據(jù)權利要求1所述的方法,其特征在于,在將會話日志隊列中的會話日志寫入當前skb中之后,所述方法還包括: 將寫入所述當前skb的會話日志從所述會話日志隊列中清除; 判斷所述當前Skb中是否還具有用于存放會話日志的存儲空間; 當所述當前Skb中還具有用于存放會話日志的存儲空間時,判斷所述會話日志隊列中是否還存在會話日志; 若所述會話日志隊列中還存在會話日志,則將所述會話日志隊列中的下一個會話日志寫入所述當前Skb中。4.根據(jù)權利要求3所述的方法,其特征在于,所述發(fā)送所述當前skb中的會話日志,包括: 當所述當前skb中不具有用于存放會話日志的存儲空間時,發(fā)送所述當前skb中的會話日志;或者 當所述當前skb中還具有用于存放會話日志的存儲空間,且所述會話日志隊列中不存在會話日志時,判斷所述當前skb中是否存放有會話日志; 若所述當前skb中存放有會話日志,貝Ij發(fā)送所述當前skb中的會話日志。5.根據(jù)權利要求1所述的方法,其特征在于,在發(fā)送所述當前skb中的會話日志之后,所述方法還包括:回收所述當前skb。6.一種會話日志發(fā)送裝置,其特征在于,包括: 寫入單元,用于將會話日志隊列中的會話日志寫入當前skb中,所述當前skb為從預先申請的skb池中取出的skb ; 發(fā)送單元,用于發(fā)送所述當前skb中的會話日志。7.根據(jù)權利要求6所述的裝置,其特征在于,所述裝置還包括: 當前skb確定單元,用于在將會話日志隊列中的會話日志寫入當前skb中之前,預先申請由多個Skb組成的Skb池;判斷所述會話日志隊列中是否存在會話日志;若存在,則從所述預先申請的skb池中取出skb作為當前skb。8.根據(jù)權利要求6所述的裝置,其特征在于,所述裝置還包括: 清除單元,用于將寫入所述當前skb的會話日志從所述會話日志隊列中清除; 判斷單元,用于判斷所述當前skb中是否還具有用于存放會話日志的存儲空間;所述判斷單元,還用于當所述當前skb中還具有用于存放會話日志的存儲空間時,判斷所述會話日志隊列中是否還存在會話日志; 所述寫入單元,還用于若所述會話日志隊列中還存在會話日志,則將所述會話日志隊列中的下一個會話日志寫入所述當前Skb中。9.根據(jù)權利要求8所述的裝置,其特征在于,所述發(fā)送單元,具體用于當所述當前skb中不具有用于存放會話日志的存儲空間時,發(fā)送所述當前skb中的會話日志;或者當所述當前Skb中還具有用于存放會話日志的存儲空間,且所述會話日志隊列中不存在會話日志時,判斷所述當前Skb中是否存放有會話日志;若所述當前Skb中存放有會話日志,則發(fā)送所述當前Skb中的會話日志。10.根據(jù)權利要求7所述的裝置,其特征在于,所述裝置還包括: 回收單元,用于回收所述當前skb。
【文檔編號】H04L29/06GK105871780SQ201510029951
【公開日】2016年8月17日
【申請日】2015年1月21日
【發(fā)明人】翟世興
【申請人】杭州迪普科技有限公司