一種igmp報文處理方法以及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種IGMP報文處理方法以及裝置。
【背景技術(shù)】
[0002] IGMP(InternetGroupManagementProtocol,互聯(lián)網(wǎng)組管理協(xié)議)是TCP/ IP(TransmissionControlProtocol/InternetProtocol,傳輸控制協(xié)議 / 因特網(wǎng)互聯(lián)協(xié) 議)協(xié)議族中負(fù)責(zé)IP組播成員管理的協(xié)議,用來在IP主機和與其直接相鄰的組播路由器 之間建立、維護組播組成員關(guān)系。
[0003] 隨著組播技術(shù)在網(wǎng)絡(luò)應(yīng)用的普及,對于網(wǎng)絡(luò)設(shè)備處理突發(fā)組播報文的能力要求越 來越高,特別是在現(xiàn)實應(yīng)用和壓力測試時,對于IGMP報文要達(dá)到實時處理,才不會出現(xiàn)丟 包的情況。
[0004] 目前的網(wǎng)絡(luò)設(shè)備在內(nèi)核接收到的IGMP報文經(jīng)過協(xié)議棧后,根據(jù)socket隊列限制 的長度將一定數(shù)量的IGMP報文通過socket機制上送組播進程,等待進程依次處理。在用 戶較多,或有突發(fā)IGMP組播報文時,由于socket上送隊列限制,在隊列排滿后,則會導(dǎo)致后 續(xù)接收到的IGMP報文因為無法排列到隊列中而被丟掉。
【發(fā)明內(nèi)容】
[0005] 有鑒于此,本發(fā)明提供了一種IGMP報文處理方法以及裝置來解決上述問題。
[0006] 本發(fā)明提供一種IGMP報文處理方法,應(yīng)用于IGMP設(shè)備,其中該方法包括:
[0007] 調(diào)用內(nèi)核接收IGMP報文,解析并提取出所述IGMP報文的指定信息;
[0008] 將所述IGMP報文的指定信息儲存于緩存模塊;
[0009] 在進程接收到信息獲取信號時,調(diào)用進程讀取并處理所述緩存模塊儲存的所有指 定信息。
[0010] 本發(fā)明還提供一種IGMP報文處理裝置,應(yīng)用于IGMP設(shè)備,其中該裝置包括:
[0011] 內(nèi)核調(diào)用單元,用于調(diào)用內(nèi)核接收IGMP報文,解析并提取出所述IGMP報文的指定 信息;
[0012] 信息存儲單元,用于將所述IGMP報文的指定信息存儲于緩存模塊;
[0013] 進程調(diào)用單元,用于在進程接收到信息獲取信號時,調(diào)用進程讀取并處理所述緩 存模塊儲存的所有指定信息。
[0014] 本發(fā)明提供的IGMP報文處理方法通過調(diào)用內(nèi)核接收IGMP報文,提取并存儲其指 定信息,同時調(diào)用進程讀取并處理該指定信息,能有效減少內(nèi)存占用,防止更多的IGMP報 文被丟棄。
【附圖說明】
[0015] 圖1是本發(fā)明IGMP報文處理裝置所在網(wǎng)絡(luò)設(shè)備的硬件架構(gòu)示意圖;
[0016] 圖2是本發(fā)明的IGMP報文處理裝置邏輯結(jié)構(gòu)示意圖;
[0017] 圖3是本發(fā)明的IGMP報文處理方法流程示意圖。
【具體實施方式】
[0018]目前的網(wǎng)絡(luò)設(shè)備在內(nèi)核接收到的IGMP報文經(jīng)過協(xié)議棧后,根據(jù)socket隊列限制 的長度將一定數(shù)量的IGMP報文通過socket機制上送組播進程,該一定數(shù)量的IGMP報文會 被排列在隊列中等待進程依次處理。然而,內(nèi)核接收報文的過程和進程處理報文的過程無 法同步進行,只有進程處理完一個報文,隊列才能接收下一個報文。同時進程在處理該IGMP 報文時,只需要根據(jù)該IGMP報文中的部分信息處理即可,若將整個報文排列在隊列中等待 處理則會占用很多的內(nèi)存,這樣就無法在待處理的隊列中加入更多的IGMP報文。特別是用 戶較多,或有突發(fā)IGMP組播報文時,由于socket上送隊列限制,在隊列排滿后,則會導(dǎo)致后 續(xù)接收到的IGMP報文因為無法排列到隊列中而被丟掉。
[0019] 針對上述問題,本發(fā)明提供了一種IGMP報文處理方案,通過調(diào)用內(nèi)核接收IGMP報 文,提取出所述IGMP報文的指定信息儲存于緩存模塊,并通知進程讀取并處理所述緩存模 塊儲存的所有指定信息。
[0020] 本發(fā)明提供的IGMP報文處理裝置應(yīng)用于IGMP設(shè)備,該IGMP設(shè)備可以是路由器、 交換機等網(wǎng)絡(luò)設(shè)備。請參考圖1,為本發(fā)明IGMP報文處理裝置所在網(wǎng)絡(luò)設(shè)備的硬件架構(gòu)示 意圖,該IGMP設(shè)備的基本硬件環(huán)境包括CPU、內(nèi)存、轉(zhuǎn)發(fā)芯片、非易失性存儲器以及其他硬 件。圖2為該IGMP報文處理裝置的邏輯結(jié)構(gòu)示意圖,其從本質(zhì)上說是一個邏輯裝置。在本 實施方式中,以軟件實現(xiàn)為例,該IGMP報文處理裝置在邏輯層面上包括:內(nèi)核調(diào)用單元、信 息存儲單元以及進程調(diào)用單元。
[0021] 請參考圖3,在一個示例性的實施方案中,該IGMP報文處理裝置在運行過程中執(zhí) 行如下處理流程:
[0022] 步驟301,內(nèi)核調(diào)用單元調(diào)用內(nèi)核接收IGMP報文,解析并提取出所述IGMP報文的 指定信息;
[0023] 所述內(nèi)核調(diào)用單元還包括報文識別子單元,用于在中央處理器CPU調(diào)用內(nèi)核接收 報文,根據(jù)報文的協(xié)議號判斷該報文是何種協(xié)議的報文,并從中過濾出IGMP報文。例如, IGMP協(xié)議的協(xié)議號為"2",那么協(xié)議號為"2"的報文則為IGMP報文。
[0024] 所述內(nèi)核調(diào)用單元還包括解析執(zhí)行子單元,用于在根據(jù)協(xié)議號過濾出IGMP報 文之后,進一步判斷接收該IGMP報文的端口是否使能IGMP功能,即端口的IGMP功能為 "down"或"up"。在各接口開啟IGMP功能,即端口的IGMP功能為"up",同時內(nèi)核根據(jù)自身 需要向系統(tǒng)申請預(yù)設(shè)大小的內(nèi)存作為緩存模塊,以存儲待處理的IGMP的指定信息。
[0025] 本發(fā)明實施方式提供的IGMP報文處理裝置會事先收集各端口的IGMP配置信息, 該IGMP配置信息包括端口的IGMP使能情況。并將收集的IGMP配置信息通過系統(tǒng)調(diào)用下 發(fā)至內(nèi)核保存。若期間某端口的IGMP使能情況發(fā)生改變,該內(nèi)核保存的IGMP配置信息也 會隨之更新。
[0026] 對于內(nèi)核接收的IGMP報文,首先檢查內(nèi)核保存的IGMP配置信息中接收該IGMP報 文端口的IGMP功能使能情況,若為"down",說明該端口未使能IGMP功能,則丟棄所述接收 的IGMP報文;若為"up",說明該端口使能IGMP功能,并對該IGMP報文進一步處理。
[0027] 具體地,在接收IGMP報文的端口使能IGMP功能的情況下,內(nèi)核對接收的IGMP報 文進行解析,并提取出IGMP報文的指定信息,以調(diào)用進程對該IGMP報文進行處理。該指定 信息可以包括:所述IGMP報文的目的IP地址、所述IGMP報文的加組信息、所述IGMP報文 的離組信息以及所述IGMP報文的接收端口信息中的至少一項。
[0028] 步驟302,信息存儲單元將所述IGMP報文的指定信息儲存于緩存模塊;
[0029] 現(xiàn)有技術(shù)中,當(dāng)調(diào)用內(nèi)核接收到IGMP報文后,根據(jù)socket隊列限制的長度將一定 數(shù)量的待處理的IGMP報文整個排列在隊列中。然而,進程在處理該IGMP報文時,只需要根 據(jù)該IGMP報文中的部分信息處理即可,若將整個報文排列在隊列中等待處理則會占用很 多的內(nèi)存。本發(fā)明實施方式根據(jù)進程處理IGMP報文的規(guī)則,將IGMP報文中進程所需要的 指定信息提取出來,并僅將該提取的指定信息存儲于開啟IGMP協(xié)議時所申請的內(nèi)存中,即 所述緩存模塊中,并不是如現(xiàn)有技術(shù)中將整個IGMP報文排列在處理隊列中,這樣就可以批 量處理更多的IGMP報文,避免丟棄較多的IGMP報文。
[0030] 由于IGMP報文可包括IGMP加組報文以及IGMP離組報文,上述緩存模塊可根據(jù) IGMP報文的不同設(shè)為多個緩存模塊,或者將該緩存模塊進行分區(qū),分別存儲IGMP加組報文 的指定信息以及IGMP離組報文的指定信息。例如該緩存模塊可以分為igmp_join_buf以 及igmp_leave_buf,其中,igmp_join_buf用以存儲從IGMP加組報文中提取出來的指定信 息,igmp_leaVe_buf用以存儲從IGMP離組報文中提取出來的指定信息。
[0031] 本發(fā)明優(yōu)選地實施方式中,該IGMP報文處理裝置還包括信號發(fā)送單元,用于在提 取到IGMP報文的指定信息后,首先檢查所述緩存模塊是否為空,若該緩存模塊為空,那么 可以在將該指定信息存儲于緩存模塊后,調(diào)用socket機制向進程發(fā)送信息獲取信號,通知 進程讀取該緩存模塊中存儲的指定信息,同時內(nèi)核同步接收新的IGMP報文,解析并存儲提 取其中的指定信息。
[0032] 具體地,判斷緩存模塊是否為空可以為:
[0033]內(nèi)核在將提取的指定信息存儲于緩存模塊時,對所述緩存模塊進行計數(shù)。在存儲 第一個報文的指定信息之前,該緩存模塊會被初始化為空,即計數(shù)為〇,在存儲第一個報文 的指定信息之后,對該緩存模塊計數(shù)為1,后續(xù)每存儲一個指定信息,該計數(shù)會遞增1。因此 在存儲指定信息前,若該緩存計數(shù)為〇,則判斷該緩存模塊為空。
[0034] 在判斷緩存模塊為空時,將該指定信息存儲于緩存模塊,之后向進程發(fā)送信息獲 取信號,通知進程讀取該緩存模塊中存儲的指定信息。其中向進程發(fā)送信息獲取信號可以 為:
[0035] 將接收的第一個IGMP報文通過調(diào)用socket機制發(fā)送至進程,以通知進程可以讀 取該緩存模塊中存儲的指定信息。當(dāng)然,上述判斷緩存模塊是