本發(fā)明涉及通信技術(shù)領(lǐng)域,具體涉及一種數(shù)據(jù)流傳輸方法。
背景技術(shù):
對于數(shù)據(jù)中心,網(wǎng)路擁塞一直是應(yīng)用中需要面對的問題。特別是越來越多新型數(shù)據(jù)中心采用大量相對廉價的交換機代替?zhèn)鹘y(tǒng)的昂貴且不易擴展的設(shè)備后,核心層和匯聚層的交換網(wǎng)路變得更加復(fù)雜,數(shù)據(jù)擁塞更是亟待解決的問題。
造成數(shù)據(jù)擁塞的原因有多種,最主要是存在多對一的情況(比如,圖1中核心層和匯聚層之間)?,F(xiàn)有的一些路徑選擇等技術(shù)可以減少這種情況發(fā)生,但無法完全避免。
現(xiàn)有提高帶寬利用率的技術(shù)大多為基于軟件的壓縮技術(shù),缺點為:1)需要占用較多的處理器(CPU)運算時間和帶寬;2)性能往往不如基于硬件的壓縮技術(shù);3)一臺網(wǎng)絡(luò)設(shè)備的多個端口同時進行壓縮/解壓縮時,處理器的帶寬和運算能力會成為瓶頸(如圖2示例)。
技術(shù)實現(xiàn)要素:
為此,本發(fā)明提出一項基于硬件的,在相鄰兩臺網(wǎng)絡(luò)設(shè)備數(shù)據(jù)鏈路上對數(shù)據(jù)流進行傳輸?shù)姆椒ǎㄟ^提高數(shù)據(jù)帶寬的利用率,從而緩解數(shù)據(jù)擁塞的情況。
具體方案如下:
一種數(shù)據(jù)流傳輸方法,包括步驟:
接收端判斷數(shù)據(jù)流是否需要被壓縮,若是,則建立有效映射關(guān)系,將需要壓縮的數(shù)據(jù)流寫入映射表,映射表存儲在發(fā)送端和接收端,若否,則不建立有效映射關(guān)系;
發(fā)送端通過查詢映射表判斷當(dāng)前數(shù)據(jù)流是否能被壓縮,若是,則用可被壓縮數(shù)據(jù)流在映射表中對應(yīng)的索引來壓縮該數(shù)據(jù)流,并發(fā)送壓縮后的數(shù)據(jù)流,若否,則直接發(fā)送未被壓縮數(shù)據(jù)流;
接收端接收發(fā)送端發(fā)送的數(shù)據(jù)流,判斷接收到的數(shù)據(jù)流是否為被壓縮的數(shù)據(jù)流,若是,則在被壓縮數(shù)據(jù)流中提取映射表的索引,并通過查詢映射表獲取被壓縮數(shù)據(jù)流內(nèi)容,從而解壓縮數(shù)據(jù)流,若否,則不需要解壓縮數(shù)據(jù)流;
接收端判斷數(shù)據(jù)流是否不再需要被壓縮,若是,則將映射表中相應(yīng)的映射關(guān)系設(shè)為無效,若否,則保持該映射關(guān)系為有效。
進一步的,所述的接收端判斷數(shù)據(jù)流是否需要被壓縮,若是,則建立有效映射關(guān)系,將需要壓縮的數(shù)據(jù)流寫入映射表,映射表存儲在發(fā)送端和接收端,若否,則不建立有效映射關(guān)系具體包括:
接收端查詢映射表判斷映射表是否具有該數(shù)據(jù)流內(nèi)容,若否且映射表存在空數(shù)據(jù)存儲位,則將該數(shù)據(jù)流內(nèi)容寫入映射表;
獲取接收到該數(shù)據(jù)流內(nèi)容的頻率;
比較接收到該數(shù)據(jù)流內(nèi)容的頻率與預(yù)設(shè)的第一閾值的大小,若接收到該數(shù)據(jù)流內(nèi)容的頻率大于預(yù)設(shè)的第一閾值,則數(shù)據(jù)流需要被壓縮,否則不需要被壓縮;
若數(shù)據(jù)流需要被壓縮,則將映射表中的相應(yīng)映射關(guān)系設(shè)為有效,若數(shù)據(jù)流不需要被壓縮,則該映射關(guān)系無效,對應(yīng)的映射表中的數(shù)據(jù)存儲位仍可用于建立新的映射關(guān)系;
發(fā)送端映射表建立與接收端同樣的映射關(guān)系。
進一步的,所述的發(fā)送端映射表建立與接收端同樣的映射關(guān)系的具體方法是:
接收端發(fā)送注冊包至發(fā)送端,注冊包包含需要壓縮的數(shù)據(jù)流內(nèi)容以及映射表的索引;
發(fā)送端收到注冊包后,將需要壓縮的數(shù)據(jù)流內(nèi)容寫入映射表相應(yīng)索引處;
發(fā)送端發(fā)送ACK包給接收端。
進一步的,所述的用可被壓縮數(shù)據(jù)流在映射表中對應(yīng)的索引來壓縮該數(shù)據(jù)流的具體方法是:
用索引值替換需要壓縮數(shù)據(jù)流內(nèi)容;
在被壓縮數(shù)據(jù)流中設(shè)置相應(yīng)標志位或者標志段,用預(yù)先設(shè)定的不同值,來區(qū)分被壓縮數(shù)據(jù)流和未被壓縮數(shù)據(jù)流。
進一步的,所述的判斷接收到的數(shù)據(jù)流是否為被壓縮的數(shù)據(jù)流的具體方法是:
根據(jù)接收到的數(shù)據(jù)流中上述標志位或者標志段的值,判斷是否為被壓縮數(shù)據(jù)流。
進一步的,所述的接收端判斷數(shù)據(jù)流是否不再需要被壓縮的具體方法是:
接收端檢測映射表各數(shù)據(jù)存儲位對應(yīng)的壓縮數(shù)據(jù)內(nèi)容傳輸?shù)念l率,并比較各個壓縮數(shù)據(jù)內(nèi)容傳輸頻率與預(yù)設(shè)的第二閾值的大小,若某個壓縮數(shù)據(jù)內(nèi)容傳輸頻率小于預(yù)設(shè)的第二閾值,則將接收端映射表中該壓縮數(shù)據(jù)內(nèi)容對應(yīng)的數(shù)據(jù)存儲位設(shè)為空,即將相應(yīng)的映射關(guān)系設(shè)為無效;
將發(fā)送端映射表中該壓縮數(shù)據(jù)內(nèi)容對應(yīng)的數(shù)據(jù)存儲位設(shè)為空。
進一步的,所述的將發(fā)送端映射表中該壓縮數(shù)據(jù)內(nèi)容對應(yīng)的數(shù)據(jù)存儲位設(shè)為空的具體方法是:
接收端發(fā)送注銷包至發(fā)送端;
發(fā)送端收到注銷包后,將發(fā)送端的映射表的數(shù)據(jù)存儲位設(shè)為空,停止壓縮該數(shù)據(jù)流的數(shù)據(jù)包,并發(fā)送ACK包給接收端;
接收端收到ACK包后,也將接收端的映射表的相應(yīng)欄設(shè)為空。
其中,所述的壓縮數(shù)據(jù)流內(nèi)容包括但不限于源MAC地址、目的MAC地址、源IP地址、目的IP地址、TCP源端口地址和TCP目的端口地址。
優(yōu)選的,所述存儲發(fā)送端映射表的存儲介質(zhì)是寄存器或者三態(tài)內(nèi)容尋址存儲器,所述存儲接收端映射表的存儲介質(zhì)是寄存器或者靜態(tài)隨機存取存儲器。
本發(fā)明的有益效果如下:通過不斷更新的映射表,形成自適應(yīng)機制對數(shù)據(jù)流進行壓縮傳輸,極大提升了壓縮效果以及傳輸效率,在數(shù)據(jù)包長度較短時,壓縮效果明顯;在鏈路兩端MAC電路之間自動進行,對上層軟件透明,所以數(shù)據(jù)包不需要送到處理器就能完成壓縮和解壓縮,與基于軟件的壓縮技術(shù)相比,該技術(shù)不需要處理器參與;一臺網(wǎng)絡(luò)設(shè)備的多個端口可以同時進行壓縮和解壓縮,而基于軟件的壓縮技術(shù)由于需要處理器參與,在多個端口同時進行壓縮或解壓縮時,處理器帶寬和運算能力都可能成為瓶頸。
附圖說明
圖1為Fat Tree網(wǎng)絡(luò)拓撲結(jié)構(gòu)示意圖;
圖2為多個端口同時進行壓縮/解壓縮的示意圖;
圖3為以太網(wǎng)幀結(jié)構(gòu)示意圖;
圖4為IP首部結(jié)構(gòu)示意圖;
圖5為TCP首部結(jié)構(gòu)示意圖;
圖6為一實施例映射表;
圖7為以太網(wǎng)數(shù)據(jù)包格式示意圖;
圖8為壓縮后的以太網(wǎng)數(shù)據(jù)包示意圖;
圖9為壓縮和解壓縮的整體結(jié)構(gòu)圖;
圖10為注冊流程圖;
圖11為注銷流程圖。
具體實施方式
為進一步說明各實施例,本發(fā)明提供有附圖。這些附圖為本發(fā)明揭露內(nèi)容的一部分,其主要用以說明實施例,并可配合說明書的相關(guān)描述來解釋實施例的運作原理。配合參考這些內(nèi)容,本領(lǐng)域普通技術(shù)人員應(yīng)能理解其他可能的實施方式以及本發(fā)明的優(yōu)點。現(xiàn)結(jié)合附圖和具體實施方式對本發(fā)明進一步說明。
本發(fā)明的壓縮技術(shù)依據(jù)如下:以TCP/IP協(xié)議來舉例,在實際的應(yīng)用中,兩個終端之間的一個數(shù)據(jù)流會持續(xù)一段時間。同一個數(shù)據(jù)流中的數(shù)據(jù)包(如圖3所示的以太網(wǎng)幀)有很多欄位是一致的,比如以太網(wǎng)首部中的源/目的MAC地址、IP首部(圖4)中的部分欄位、以及TCP首部(圖5)中的部分欄位。如果相鄰兩臺設(shè)備之間能建立相同的映射表,將相同的數(shù)據(jù)欄位(較長)用標簽位(較短)代替,那就能在相鄰兩臺設(shè)備間實現(xiàn)數(shù)據(jù)壓縮與解壓縮,從而提高帶寬利用率。映射表由硬件來實現(xiàn),通過查對應(yīng)的映射表,可以快速有效的實現(xiàn)數(shù)據(jù)的壓縮和解壓縮。
基于上述的壓縮依據(jù),本發(fā)明提出一種數(shù)據(jù)流傳輸方法,包括步驟:
接收端判斷數(shù)據(jù)流是否需要被壓縮,若是,則建立有效映射關(guān)系,將需要壓縮的數(shù)據(jù)流寫入映射表,映射表存儲在發(fā)送端和接收端,若否,則不建立有效映射關(guān)系;
發(fā)送端通過查詢映射表判斷當(dāng)前數(shù)據(jù)流是否能被壓縮,若是,則用可被壓縮數(shù)據(jù)流在映射表中對應(yīng)的索引來壓縮該數(shù)據(jù)流,并發(fā)送壓縮后的數(shù)據(jù)流,若否,則直接發(fā)送未被壓縮數(shù)據(jù)流;
接收端接收發(fā)送端發(fā)送的數(shù)據(jù)流,判斷接收到的數(shù)據(jù)流是否為被壓縮的數(shù)據(jù)流,若是,則在被壓縮數(shù)據(jù)流中提取映射表的索引,并通過查詢映射表獲取被壓縮數(shù)據(jù)流內(nèi)容,從而解壓縮數(shù)據(jù)流,若否,則不需要解壓縮數(shù)據(jù)流;
接收端判斷數(shù)據(jù)流是否不再需要被壓縮,若是,則將映射表中相應(yīng)的映射關(guān)系設(shè)為無效,若否,則保持該映射關(guān)系為有效。
進一步的,所述的接收端判斷數(shù)據(jù)流是否需要被壓縮,若是,則建立有效映射關(guān)系,將需要壓縮的數(shù)據(jù)流寫入映射表,映射表存儲在發(fā)送端和接收端,若否,則不建立有效映射關(guān)系具體包括:
接收端查詢映射表判斷映射表是否具有該數(shù)據(jù)流內(nèi)容,若否且映射表存在空數(shù)據(jù)存儲位,則將該數(shù)據(jù)流內(nèi)容寫入映射表;
獲取接收到該數(shù)據(jù)流內(nèi)容的頻率;
比較接收到該數(shù)據(jù)流內(nèi)容的頻率與預(yù)設(shè)的第一閾值的大小,若接收到該數(shù)據(jù)流內(nèi)容的頻率大于預(yù)設(shè)的第一閾值,則數(shù)據(jù)流需要被壓縮,否則不需要被壓縮;
若數(shù)據(jù)流需要被壓縮,則將映射表中的相應(yīng)映射關(guān)系設(shè)為有效,若數(shù)據(jù)流不需要被壓縮,則該映射關(guān)系無效,對應(yīng)的映射表中的數(shù)據(jù)存儲位仍可用于建立新的映射關(guān)系;
發(fā)送端映射表建立與接收端同樣的映射關(guān)系。
進一步的,所述的發(fā)送端映射表建立與接收端同樣的映射關(guān)系的具體方法是:
接收端發(fā)送注冊包至發(fā)送端,注冊包包含需要壓縮的數(shù)據(jù)流內(nèi)容以及映射表的索引;
發(fā)送端收到注冊包后,將需要壓縮的數(shù)據(jù)流內(nèi)容寫入映射表相應(yīng)索引處;
發(fā)送端發(fā)送ACK包給接收端。
進一步的,所述的用可被壓縮數(shù)據(jù)流在映射表中對應(yīng)的索引來壓縮該數(shù)據(jù)流的具體方法是:
用索引值替換需要壓縮數(shù)據(jù)流內(nèi)容;
在被壓縮數(shù)據(jù)流中設(shè)置相應(yīng)標志位或者標志段,用預(yù)先設(shè)定的不同值,來區(qū)分被壓縮數(shù)據(jù)流和未被壓縮數(shù)據(jù)流。
進一步的,所述的判斷接收到的數(shù)據(jù)流是否為被壓縮的數(shù)據(jù)流的具體方法是:
根據(jù)接收到的數(shù)據(jù)流中上述標志位或者標志段的值,判斷是否為被壓縮數(shù)據(jù)流。
進一步的,所述的接收端判斷數(shù)據(jù)流是否不再需要被壓縮的具體方法是:
接收端檢測映射表各數(shù)據(jù)存儲位對應(yīng)的壓縮數(shù)據(jù)內(nèi)容傳輸?shù)念l率,并比較各個壓縮數(shù)據(jù)內(nèi)容傳輸頻率與預(yù)設(shè)的第二閾值的大小,若某個壓縮數(shù)據(jù)內(nèi)容傳輸頻率小于預(yù)設(shè)的第二閾值,則將接收端映射表中該壓縮數(shù)據(jù)內(nèi)容對應(yīng)的數(shù)據(jù)存儲位設(shè)為空,即將相應(yīng)的映射關(guān)系設(shè)為無效;
將發(fā)送端映射表中該壓縮數(shù)據(jù)內(nèi)容對應(yīng)的數(shù)據(jù)存儲位設(shè)為空。
進一步的,所述的將發(fā)送端映射表中該壓縮數(shù)據(jù)內(nèi)容對應(yīng)的數(shù)據(jù)存儲位設(shè)為空的具體方法是:
接收端發(fā)送注銷包至發(fā)送端;
發(fā)送端收到注銷包后,將發(fā)送端的映射表的數(shù)據(jù)存儲位設(shè)為空,停止壓縮該數(shù)據(jù)流的數(shù)據(jù)包,并發(fā)送ACK包給接收端;
接收端收到ACK包后,也將接收端的映射表的相應(yīng)欄設(shè)為空。
其中,所述的壓縮數(shù)據(jù)流內(nèi)容包括但不限于源MAC地址、目的MAC地址、源IP地址、目的IP地址、TCP源端口地址和TCP目的端口地址。
優(yōu)選的,所述存儲發(fā)送端映射表的存儲介質(zhì)是寄存器或者三態(tài)內(nèi)容尋址存儲器,所述存儲接收端映射表的存儲介質(zhì)是寄存器或者靜態(tài)隨機存取存儲器。
以下為基于本發(fā)明方法一實施例的具體實現(xiàn)過程:
同一個數(shù)據(jù)流中,數(shù)據(jù)包的源/目的MAC地址(共12字節(jié))、源/目的IP地址(共8字節(jié))、以及TCP源/目的端口地址(共4字節(jié))都是相同的,總共有24字節(jié)。通過將這24字節(jié)映射到更短的字段,可以實現(xiàn)數(shù)據(jù)的壓縮。具體的映射方法為:根據(jù)交換機的一個端口上可能運行的數(shù)據(jù)流數(shù)目,設(shè)定一個最多能壓縮的數(shù)據(jù)流數(shù)目,比如8。建立一張相應(yīng)深度為8的映射表,將這24字節(jié)內(nèi)容映射成3比特的索引(index),如圖6所示,在本實施例中,SA = 源MAC地址; DA = 目的MAC地址; SIP = 源IP地址; DIP =目的IP地址;SP=TCP源端口地址; DP = TCP目的端口地址,其中,每一組需要被壓縮的內(nèi)容(比如,{SA5, DA5, SIP5, DIP5, SP5, DP5})分別對應(yīng)一個索引(比如,5)。
表的深度越深,能同時容納的不同數(shù)據(jù)流就越多,能被壓縮的內(nèi)容也就越多。但表的深度越深,被壓縮內(nèi)容對應(yīng)的索引所需的比特位就越多,而且建立表所需的硬件開銷也相應(yīng)更大。需要根據(jù)實際應(yīng)用情況設(shè)定最合適的深度。
建立映射表后,下一步是如何用索引來替換需要被壓縮的內(nèi)容,以下舉例說明一種替換方式:
圖7為以太網(wǎng)數(shù)據(jù)包格式。其中源MAC地址有個特點,即多播地址不可以作為源MAC地址。正常的數(shù)據(jù)包都不會違反這個規(guī)定。利用這個特點,我們可以通過讓壓縮后的數(shù)據(jù)包違反這個規(guī)定,從而使得接收端能分辨出經(jīng)過壓縮的數(shù)據(jù)包和未經(jīng)壓縮的數(shù)據(jù)包。
舉例來說,如果原始的數(shù)據(jù)包滿足{SA5, DA5, SIP5, DIP5, SP5, DP5},映射表中對應(yīng)的索引為5。那數(shù)據(jù)包經(jīng)過壓縮之后可以變成如圖8所示的以太網(wǎng)數(shù)據(jù)包,其中,前導(dǎo)碼、幀開始符:保持不變;目的MAC地址:前面5字節(jié)可以填充任意數(shù)值,最后1字節(jié)插入索引(0x05);源MAC地址:保留1字節(jié),第一比特位為’1’即可,如0xFF。這樣就違反了源MAC地址不能為多播地址的規(guī)定,從而接收端就能辨認出這是壓縮后的數(shù)據(jù)包;長度/類型:保持不變;負載:原始數(shù)據(jù)中扣除源/目的IP地址(SIP5/DIP5),以及TCP源/目的端口地址(SP5、DP5);校驗:保持不變。
通過這個變換,數(shù)據(jù)包長度縮短了17字節(jié)。原始數(shù)據(jù)包越短,壓縮效果越明顯。
圖9是壓縮和解壓縮的整體結(jié)構(gòu)圖。發(fā)送端(TX端)的映射表因為需要將被壓縮內(nèi)容和表中的每一項內(nèi)容進行比較,需要用寄存器或者TCAM實現(xiàn)。接收端(RX端)因為只需要根據(jù)索引讀取被壓縮內(nèi)容,所以可以用寄存器或者SRAM實現(xiàn)。
在發(fā)送端,通過查表將 {MAC地址、IP地址、端口地址} 映射到索引,從而壓縮數(shù)據(jù)包。在接收端,通過查表將索引映射到{MAC地址、IP地址、端口地址},恢復(fù)(解壓縮)成原來的數(shù)據(jù)包。需要說明的是,壓縮功能可以開啟或關(guān)閉。
結(jié)合圖10和圖11,映射表的具體建立過程如下:
1)當(dāng)RX端接收到一個具有新的{MAC地址、IP地址、端口地址}組合的數(shù)據(jù)包,且表格中有空閑時,將這個新的{MAC地址、IP地址、端口地址}寫入到映射表中。持續(xù)觀察一段時間,根據(jù)收到具有這個組合的數(shù)據(jù)包的速率,與一個靜態(tài)或動態(tài)設(shè)定的閾值比較,來決定是否需要對該數(shù)據(jù)流進行壓縮。
2)若RX端決定對該數(shù)據(jù)流進行壓縮,則將映射表的該欄設(shè)成有效,并發(fā)送一個注冊包給TX端。注冊包包含索引和{MAC地址、IP地址、端口地址}組合。TX端收到注冊包后將內(nèi)容填入到映射表的相應(yīng)欄中,并回復(fù)ACK包給RX端。
3)當(dāng)一個映射關(guān)系在TX端和RX端都寫入映射表后,就可以開始對后續(xù)的數(shù)據(jù)包進行壓縮和解壓縮。
4)在RX端對映射表的每一個欄進行速率檢測,若命中某個欄的壓縮包速率低于要求(意味著對該數(shù)據(jù)流進行壓縮不再有意義),則發(fā)送注銷包給TX端。
5)TX端收到注銷包后,將映射表的相應(yīng)欄設(shè)為空,停止壓縮這個流的數(shù)據(jù)包。并發(fā)送ACK包給RX端。
6)RX端收到注銷ACK包后,也將映射表的相應(yīng)欄設(shè)為空。空出來欄可以用來添加新的{MAC地址、IP地址、端口地址}組合。
盡管結(jié)合優(yōu)選實施方案具體展示和介紹了本發(fā)明,但所屬領(lǐng)域的技術(shù)人員應(yīng)該明白,在不脫離所附權(quán)利要求書所限定的本發(fā)明的精神和范圍內(nèi),在形式上和細節(jié)上可以對本發(fā)明做出各種變化,均為本發(fā)明的保護范圍。