一種基於Linux系統伺服器的語音數據內核轉發方法
2023-05-20 06:50:46 2
專利名稱:一種基於Linux系統伺服器的語音數據內核轉發方法
技術領域:
本發明屬於網際網路信息傳播領域,更具體地,涉及一種基於Linux系統伺服器的語音數據內核轉發方法。
背景技術:
隨著網絡技術的發展以及網絡帶寬的提高,網際網路語音技術越來越被廣泛使用,當前一款成功的網際網路即時語音通信產品,需要同時支持幾十萬上百萬、甚至上千萬的同時在線用戶,尤其對於團隊語音軟體來說,需要實現一個用戶到多個目標用戶(可能是上萬用戶)的廣播,只有通過伺服器中轉完成語音廣播。而目前的語音伺服器中,其語音轉發過程都是通過應用層來進行,參見圖1,在現有典型的語音伺服器中,語音轉發都通過以下路徑實現網卡一驅動程序一協議棧一API(應用層、內核層切換,即上下文切換)一應用程式,再由應用層應用程式一API (應用層、內核層切換,即上下文切換)一協議棧一驅動程序—網卡發送至網絡,即語音數據包的轉發過程要在內核層和應用層之間切換,兩次經過協議棧和Linux上下文切換,由於Linux上下文切換非常費時,這導致現有基於應用層的轉發方案經過的路徑長,延時高,使得語音伺服器性能低下,而且非常耗時,對於延時敏感的語音數據來說,轉發質量得不到保證,同時另外由於語音伺服器性能不高,需要部署大量的伺服器,增加了資金投入。
發明內容
本發明的目的,就是克服現有技術的不足,提供一種基於Linux系統伺服器的語音數據內核轉發方法,採用該方法可以大大節省伺服器資源,提高伺服器轉發的工作效率。為了達到上述目的,採用如下技術方案一種基於Linux系統伺服器的語音數據內核轉發方法,包括以下步驟實現Si :通過應用層設置內核轉發模塊的網絡數據包過濾規則及轉發規則;s2 =Linux系統把網卡驅動收到的網絡數據包傳送至內核轉發模塊,內核轉發模塊的過濾單元對網絡數據包進行掃描,並基於步驟Si設置的過濾規則截獲網絡數據包;s3 :將上一步驟中截獲的網絡數據包轉發到內核轉發模塊的轉發單元;s4 :內核轉發模塊基於步驟s2中截獲的網絡數據包的目標埠信息調用與該埠對應的埠處理函數對網絡數據包進行辨識處理;S5 :如上一步驟的埠處理函數判斷網絡數據包可以被轉發,則轉發網絡數據包,如上一步驟的埠處理函數判斷網絡數據包不可以被轉發,則將網絡數據包發送給Linux協議棧處理。進一步地,所述步驟s5中,所述轉發網絡數據包又包括以下步驟s51 :內核轉發模塊對網絡數據包進行修改、計算和校驗;s52 :內核轉發模塊調用預設驅動程序轉發經修改後的當前數據包。更進一步地,所述步驟s52中,預定驅動程序對當前數據包的轉發包括一對一轉發和一對多轉發,所述一對多轉發時,內核轉發模塊先複製網絡數據包並為每個複製體寫A目標地址。再進一步地,所述步驟s52中,內核轉發模塊完成轉發後,將轉發的當前數據包傳遞給應用程式。還進一步地,所述步驟s3_s5中,應用程式定期對內核轉發模塊的工作狀態信息進行採集,如內核轉發模塊處於非正常工作狀態,則設定應用程式直接將數據包發送至應用層。與現有技術相比,本發明的有益效果在於
通過在Linux系統伺服器內核中轉發語音包,大大縮短了語音包在Linux系統伺服器中經過的路徑,提高了單機轉發效率,減少了伺服器的使用量,節省運營成本,同時也降低了轉發的時間延遲;通過將實時性低的命令發送至應用層進行處理,實現了對轉發相關任務的分類管理,最大限度地提高了轉發效率。
圖I是現有技術中語音轉發的流程示意圖。圖2是本發明所述基於Linux系統伺服器的語音數據內核轉發方法的流程示意圖。圖3是本發明所述基於Linux系統伺服器的語音數據內核轉發方法的原理示意圖。圖4是本發明所述基於Linux系統伺服器的語音數據內核轉發方法的應用層和內核模塊的數據交換示意圖。圖5是本發明所述基於Linux系統伺服器的語音數據內核轉發方法的數據包結構示意圖。
具體實施例方式下面參見附圖和具體實施例,對本發明做進一步說明參見圖2,本發明所述的於Linux系統伺服器的語音數據內核轉發方法,其特徵在於,包括以下步驟實現Si :通過應用層設置內核轉發模塊的網絡數據包過濾規則及轉發規則;在Linux系統伺服器內,與語音轉發功能對應的是語音轉發應用程式,用戶可以在應用程式中可以對內核轉發模塊的數據包過濾規則和轉發規則進行設置,該應用程式會提供專門界面以方便用戶執行上述設置操作。更具體地,用戶通過應用程式至少可以對以下項目進行設置和管理=Linux系統伺服器需要攔截的埠、允許轉發的目的地、數據需要被複製的份數、網絡數據包的目的地數量等,參見圖3,上述配置數據都是通過應用程式編程接口(Application Programming Interface,簡稱API)經由路徑⑤一⑥寫入內核控制器,該路徑是通過Linux的文件操作接口實現的,應用程式通過寫一個虛擬的文件,完成對內核的配置。圖4所示為應用程式和內核的一個數據交換示意圖,其中應用程式(Application)通過文件操作接口與內核模塊(Kernel Module)交互,應用層通過與其他伺服器節點交互,完成各種配置數據(包含但不僅限於過濾規則和轉發規則)的獲取和組裝,然後傳輸到內核。s2 =Linux系統把網卡驅動收到的網絡數據包傳送至內核轉發模塊,內核轉發模塊的過濾單元對網絡數據包進行掃描,並基於步驟Si設置的過濾規則截獲網絡數據包;與Linux系統伺服器相對應往往設置有多個與之相配合的客戶端,在Linux系統伺服器接入網絡後,這些客戶端將錄製好的語音打包發送至伺服器進行轉發,Linux的Netfilter模塊提供了一種Hook掛載方式,該方式可以通過在內核模塊中設置回調函數,截獲網卡收到的所有數據包。客戶端送來的數據包被該回調函數收到後被送至內核轉發模塊的過濾單元,過濾單元按照應用層設置的過濾規則對數據包進行攔截,所述過濾規則目 的是判斷那些數據包需要被轉發,在本實施例中,上述過濾規則基於對網絡數據包的特徵信息識別來完成,所述特徵信息可以是數據包包頭中的信息,也可是數據包中的某個特徵,具體地說,上述特徵信息可以是寫入數據包裡的幾個欄位,如I)源、目的IP ;2)源、目的埠 ;3)數據包中數據部分的特定字節,如第0 4位元組是否等於某一個值。這些特徵欄位由客戶端在製作網絡數據包時一併寫入,當Linux伺服器的網卡驅動掃描網絡數據包的過程即是獲取上述欄位並進行判斷,以決定哪些包需要被攔截轉發。現有的Linux作業系統提供的Netfilter開發接口提供了 5個點供模塊開發人員截獲網絡數據包並做相應的處理,該接口的5個點分別如下I)、NF_INET_PRE_ROUTING,接收報文做路由之前的網絡數據;2)、NF_INET_FORWARD,接收路由後,數據包轉到另個一個網絡適配器(NetworkInterface Card,簡稱NIC)之前的網絡數據;3)、NF_INET_P0ST_R0UTING,接收報文送出之前的網絡數據;4)、NF_INET_LOCAL_IN,接收路由後,流入本地的報文;5)、NF_INET_L0CAL_0UT,接收(複製)本地輸出的報文;s3 :將上一步驟中截獲的網絡數據包轉發到內核轉發模塊的轉發單元;需要注意的是,本發明所述的基於Linux系統伺服器的語音數據內核轉發方法只用到NF_INET_PRE_ROUTING接口,在網卡驅動收到網絡數據包且在做路由之前,Linux系統伺服器立即就會調用NF_INET_PRE_ROUTING,該方式是經過路徑最少的接口,因此使得Linux伺服器性能也非常高。s4 內核轉發模塊基於網絡數據包的目標埠信息調用與該埠對應的埠處理函數對網絡數據包進行識別;客戶端在發送語音包時會給每個語音包設置埠信息,具體地說,就是用戶數據報協議(User Datagram Protocol,簡稱UDP)制定的目的埠,當內核轉發模塊截獲NF_INET_PRE_ROUTING送來的用戶數據報協議數據包後,內核轉發模塊讀取該網絡數據包並查詢預置於內核轉發模塊的埠代碼資料庫得到目標的埠信息,再根據埠信息調用埠處理函數對接收到的網絡數據包進行辨識處理。s5 :如上一步驟的埠處理函數判斷網絡數據包可以被轉發,則轉發網絡數據包,如上一步驟的埠處理函數判斷數據包不可以被轉發,則將網絡數據包轉發給Linux協議棧處理。在本步驟中,如上一步驟的埠處理函數認為語音數據包可以被轉發,則調用預定驅動程序製作路由並由內核發送模塊發送語音數據包,如上一步驟的埠處理函數發現數據包不可以被轉發,則轉發給應用層處理,即使數據包被內核轉發,也可以同時交由應用程式繼續做各種處理,包含但不限於轉發處理。本步驟中埠處理函數對網絡數據包的判斷基於步驟Si中設置的轉發規則,其實質是決定被攔截的網絡數據包應該如何被轉發,其轉發規則主要有以下兩種方式I)根據數據包的數據部分(非IP、TCP或UDP的包頭部分)的特定欄位設置的轉發地址或埠轉發;2)根據數據部分的一些欄位,如某 幾個字節等於某一個值,應用層設定對應的值需要被轉發到的目標地址和埠(可能是一個地址,也可以是多個地址),網絡數據包被複製多份,並由轉發單元一一轉發到這些地址。如果本步驟中埠處理函數對網絡數據包的判斷結果是可以被轉發,其後續過程又可以分為以下兩個階段s51 :內核轉發模塊對網絡數據包進行修改、計算和校驗;本步驟主要是更改網絡數據包的目標地址,對數據包的內容也可能做相應改變,其對數據包的更改包含但不限於I)在數據包末尾增加序號信息;2)如果數據包中制定了該數據包的最終目標地址,該目標地址會被放到數據包的包頭信息中,然後目標地址欄位會被修改為轉發伺服器的地址,並對修改後的當前數據包進行校驗。s52 :內核轉發模塊調用預定驅動程序轉發經修改後的當前數據包。當s51中的校驗步驟完成後,內核轉發模塊調用預定驅動程序將當前數據包轉發至目標地址。根據目標的不同,本步驟對當前數據包的轉發包括一對一轉發和一對多轉發;根據網絡數據包的不同,內核轉發模塊對數據包的轉發又可以分為簡單轉發(SimpleForward)和媒體數據轉發(MediaRouter)等方式(參見圖3)參見圖5、一個典型的數據包包括標準IP包頭,標準UDP包頭和UDP包數據部分,其中IP包頭含源、目的地址;標準UDP包頭含源、目的埠 ;UDP包數據部分包括含語音數據,以及用於過濾的特徵欄位,用於轉發的目的地址和埠,以及用於轉發的其他數據。如果網卡截獲的網絡數據包數據部分本身包含目標地址,則內核轉發模塊僅需將接收到的網絡數據包的包頭目的地址修改為數據部分包含的目的地址,並將數據部分目的地址修改為轉發伺服器的地址直接轉發,該方式一般用於在做測試、或者只需要進行一對一轉發時對簡單數據的轉發;而在媒體數據轉發過程中,如果網絡數據中本身不包括轉發目標的地址,則需要Linux系統伺服器添加地址並中轉,該方式可以方便地實現對媒體數據,特別是語音包的轉發,也可以對語音包進行一對一、一對多、和應用程式配合轉發,等多種轉發方式,當轉發為一對多時,內核轉發模塊先對內核轉發模塊收到的網絡數據包進行複製並為每個複製寫入目標地址。另一種情況,如s4步驟的判斷結果是內核轉發模塊無法轉發,則Linux系統協議棧將接收到的網絡數據包轉發至應用層,通過應用軟體進行包括轉發在內的後續處理。在本實施例中,應用程式的和內核轉發模塊之間協同工作,以最大限度地發揮Linux系統伺服器的功能。應用程式的意義還在於,基於不同的網絡環境和伺服器處理能力,為了儘可能充分地利用內核轉發模塊去處理實時性要求較高的語音轉發操作,一些延時要求較低、計算量較大以及信令相關的業務都由應用程式來完成,故在內核轉發過程結束之後,可以將數據包交由應用程式進行存儲或統計等,甚至是繼續做更複雜的轉發(如講將UDP數據包通過TCP轉發出去)。在上述步驟s3_s5中,應用程式還定期對內核轉發模塊的工作狀態信息進行採集,如內核轉發模塊處於非正常工作狀態時,則應用程式將指令內核轉發模塊將接收到的網絡數據包直接發送到應用程式,本系統也同時自動退回應用層轉發模式,參見圖3,路徑⑦一⑧負責內核狀態的採集,應用程式需要獲得內核的各種狀態,與配置數據寫類似,該狀態的獲得通過讀Linux的一個虛擬文件實現。 應該理解,以上具體實施例所公布的內容僅為本發明的部分優選方案,凡是基於本發明的技術方案、符合本發明的技術精神,屬於本領域技術人員無需進行創造性勞動即可得到的實施都應屬於本發明的保護範圍。
權利要求
1.一種基於Linux系統伺服器的語音數據內核轉發方法,其特徵在於,包括以下步驟實現 Si :通過應用層設置內核轉發模塊的網絡數據包過濾規則及轉發規則;s2 =Linux系統把網卡驅動收到的網絡數據包傳送至內核轉發模塊,內核轉發模塊的過濾單元對網絡數據包進行掃描,並基於步驟Si設置的過濾規則截獲網絡數據包;s3 :將上一步驟中截獲的網絡數據包轉發到內核轉發模塊的轉發單元;s4 :內核轉發模塊基於步驟s2中截獲的網絡數據包的目標埠信息調用與該埠對應的埠處理函數對網絡數據包進行辨識處理; s5:如上一步驟的埠處理函數判斷網絡數據包可以被轉發,則轉發網絡數據包,如上一步驟的埠處理函數判斷網絡數據包不可以被轉發,則將網絡數據包發送給Linux協議棧。
2.如權利要求I所述的基於Linux系統伺服器的語音數據內核轉發方法,其特徵在於,所述步驟s5中,所述轉發網絡數據包又包括以下步驟 s51 :內核轉發模塊對網絡數據包進行修改、計算和校驗; s52 :內核轉發模塊調用預設驅動程序轉發經修改後的當前數據包。
3.如權利要求2所述的基於Linux系統伺服器的語音數據內核轉發方法,其特徵在於,所述步驟s52中,預定驅動程序對當前數據包的轉發包括一對一轉發和一對多轉發,所述一對多轉發時,內核轉發模塊先複製網絡數據包並為每個複製體寫入目標地址。
4.如權利要求2所述的基於Linux系統伺服器的語音數據內核轉發方法,其特徵在於,所述步驟s52中,內核轉發模塊完成轉發後,將轉發的當前數據包傳遞給應用程式。
5.如權利要求4所述的基於Linux系統伺服器的語音數據內核轉發方法,其特徵在於,所述步驟s3-s5中,應用程式定期對內核轉發模塊的工作狀態信息進行採集,如內核轉發模塊處於非正常工作狀態,則設定應用程式直接將數據包發送至應用層。
全文摘要
本發明涉及一種基於Linux系統伺服器的語音數據內核轉發方法,包括在應用層設定過濾及轉發規則、內核轉發模塊截獲網絡數據包、內核轉發模塊辨識網絡數據包及轉發等步驟完成,本發明通過在Linux系統伺服器內核中轉發語音包,大大縮短了語音包在Linux系統伺服器中經過的路徑,提高了單機轉發效率,減少了伺服器的使用量,節省運營成本,同時也降低了轉發的時間延遲;通過將實時性低的命令發送至應用層進行處理,實現了對轉發相關任務的分類管理,最大限度地提高了轉發效率。
文檔編號H04L29/06GK102638453SQ20121006637
公開日2012年8月15日 申請日期2012年3月13日 優先權日2012年3月13日
發明者李新輝, 林正顯, 王國光, 胡建強, 蔣德為, 陶思明 申請人:廣州華多網絡科技有限公司