數(shù)據(jù)發(fā)送方法和裝置、數(shù)據(jù)接收方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)發(fā)送方法和裝置、數(shù)據(jù)接收方 法和裝置。
【背景技術(shù)】
[0002] 在數(shù)據(jù)傳輸過程中,會由于網(wǎng)絡(luò)波動、節(jié)點擁塞等不可控因素的影響,發(fā)生數(shù)據(jù)包 丟失的情形。目前為了保證數(shù)據(jù)的可靠傳輸,可以采用三種方式:丟包重傳方式、冗余發(fā)包 方式和交織編碼方式。其中,丟包重傳方式是指數(shù)據(jù)接收方發(fā)現(xiàn)丟包后通知數(shù)據(jù)發(fā)送方重 傳丟失的數(shù)據(jù)包的方式;冗余發(fā)包方式是指數(shù)據(jù)發(fā)送方通過連續(xù)發(fā)送同一數(shù)據(jù)包,降低數(shù) 據(jù)接收方接收失敗的概率,從而降低丟包率的方式;交織編碼方式是把一個較長的突發(fā)差 錯離散成隨機(jī)差錯,再用FEC(ForwardErrorCorrection,前向糾錯)技術(shù)消除隨機(jī)差錯的 方式。
[0003] 然而,目前許多網(wǎng)絡(luò)服務(wù)涉及到高實時性的數(shù)據(jù)傳輸,如游戲加速、音視頻通話 等。采用丟包重傳方式,數(shù)據(jù)接收方發(fā)現(xiàn)丟包后通知數(shù)據(jù)發(fā)送方重傳丟失的數(shù)據(jù)包,至少會 增加一個RTT(Round-TripTime,往返延時),這在高實時性的數(shù)據(jù)傳輸中是不可接受的。采 用冗余發(fā)包方式雖然避免了重傳帶來的延時,但是重復(fù)發(fā)包增大了包量,而且存在因為路 由節(jié)點的尾部丟棄策略而導(dǎo)致重復(fù)發(fā)送的數(shù)據(jù)包均被丟棄的風(fēng)險,此時仍需要采用丟包重 傳方式來重傳丟失的數(shù)據(jù)包,增加了延時。交織編碼方式通過冗余編碼,避免了丟包恢復(fù)時 的重傳,但如果對預(yù)設(shè)數(shù)量的數(shù)據(jù)包進(jìn)行編碼,在數(shù)據(jù)發(fā)送方進(jìn)行冗余編碼前,需要收集到 預(yù)設(shè)數(shù)量的數(shù)據(jù)包后才能編碼并發(fā)送,帶來了額外的延時。
[0004] 可見目前保證數(shù)據(jù)的可靠傳輸?shù)姆绞讲⒉贿m用于高實時性的數(shù)據(jù)傳輸,需要改 進(jìn)。
【發(fā)明內(nèi)容】
[0005] 基于此,有必要針對目前保證數(shù)據(jù)的可靠傳輸?shù)姆绞讲⒉贿m用于高實時性的數(shù)據(jù) 傳輸?shù)膯栴},提供一種數(shù)據(jù)發(fā)送方法和裝置、數(shù)據(jù)接收方法和裝置。
[0006] -種數(shù)據(jù)發(fā)送方法,所述方法包括:
[0007] 獲取待發(fā)送的原始數(shù)據(jù)包;
[0008] 從所述原始數(shù)據(jù)包所屬通信連接所對應(yīng)的緩存隊列的隊首取出重發(fā)包;
[0009] 將取出的重發(fā)包與所述原始數(shù)據(jù)包合并,獲得合并包;
[0010] 通過所述通信連接發(fā)送所述合并包;
[0011] 將所述原始數(shù)據(jù)包加入所述緩存隊列的隊尾。
[0012] 一種數(shù)據(jù)發(fā)送裝置,所述裝置包括:
[0013] 原始數(shù)據(jù)包獲取模塊,用于獲取待發(fā)送的原始數(shù)據(jù)包;
[0014] 緩存隊列管理模塊,用于從所述原始數(shù)據(jù)包所屬通信連接所對應(yīng)的緩存隊列的隊 首取出重發(fā)包;
[0015] 合并模塊,用于將取出的重發(fā)包與所述原始數(shù)據(jù)包合并,獲得合并包;
[0016] 發(fā)送模塊,用于通過所述通信連接發(fā)送所述合并包;
[0017] 所述緩存隊列管理模塊還用于將所述原始數(shù)據(jù)包加入所述緩存隊列的隊尾。
[0018] 上述數(shù)據(jù)發(fā)送方法和裝置,通信連接對應(yīng)設(shè)置有緩存隊列,發(fā)送數(shù)據(jù)時,將待發(fā)送 的原始數(shù)據(jù)包與緩存隊列中緩存的重發(fā)包合并后,通過該通信連接發(fā)送出去。然后將該原 始數(shù)據(jù)包作為新的重發(fā)包加入緩存隊列的隊尾,這樣以后在該原始數(shù)據(jù)包排到緩存隊列隊 首時,就可以與其它數(shù)據(jù)包再合并后發(fā)送。這樣通過發(fā)送合并包,可以避免因發(fā)送重發(fā)包而 導(dǎo)致增加額外的數(shù)據(jù)包發(fā)送數(shù)量,減輕數(shù)據(jù)傳輸負(fù)擔(dān),而且原始數(shù)據(jù)包的合并發(fā)送不需要 等待,適用于高實時性的數(shù)據(jù)傳輸。而且,一個數(shù)據(jù)包與其重發(fā)包是異步發(fā)送的,可以盡量 避免連續(xù)發(fā)送數(shù)據(jù)包和其重發(fā)包導(dǎo)致兩者均丟失的情形。
[0019] -種數(shù)據(jù)接收方法,所述方法包括:
[0020] 接收通過通信連接傳來的合并包;
[0021] 將所述合并包拆分為原始數(shù)據(jù)包和重發(fā)包;
[0022] 根據(jù)所述重發(fā)包的包序號判斷是否首次接收到所述包序號的數(shù)據(jù)包;
[0023] 若是,則保留所述重發(fā)包;
[0024] 若否,則丟棄所述重發(fā)包。
[0025] 一種數(shù)據(jù)接收裝置,所述裝置包括:
[0026] 接收模塊,用于接收通過通信連接傳來的合并包;
[0027] 拆分模塊,用于將所述合并包拆分為原始數(shù)據(jù)包和重發(fā)包;
[0028] 第一判斷模塊,用于根據(jù)所述重發(fā)包的包序號判斷是否首次接收到所述包序號的 數(shù)據(jù)包;
[0029] 第一重發(fā)包處理模塊,用于在所述第一判斷模塊判斷到首次接收到所述重發(fā)包 時,保留所述重發(fā)包;
[0030] 第二重發(fā)包處理模塊,用于在所述第一判斷模塊判斷到非首次接收到所述重發(fā)包 時,丟棄所述重發(fā)包。
[0031] 上述數(shù)據(jù)接收方法和裝置,接收到合并包后,拆分出原始數(shù)據(jù)包和重發(fā)包。然后根 據(jù)重發(fā)包的包序號進(jìn)行去重處理,如果首次接收到該包序號的數(shù)據(jù)包,說明該包序號的數(shù) 據(jù)包在傳輸過程中丟失,此時保留該重發(fā)包來替代丟失的數(shù)據(jù)包。如果不是首次接收到該 包序號的數(shù)據(jù)包,說明該包序號的數(shù)據(jù)包之前已被成功接收,此時可直接丟棄該重發(fā)包。這 樣通過去重處理,保證丟失的數(shù)據(jù)包能夠用重發(fā)包來替代,而已接收到的數(shù)據(jù)包的重發(fā)包 則直接丟棄,保證了數(shù)據(jù)傳輸?shù)臏?zhǔn)確性和完整性,可以保證高實時性的數(shù)據(jù)傳輸?shù)馁|(zhì)量。
【附圖說明】
[0032] 圖1為一個實施例中數(shù)據(jù)傳輸系統(tǒng)的組成結(jié)構(gòu)圖;
[0033] 圖2為一個實施例中用于實現(xiàn)數(shù)據(jù)發(fā)送端和數(shù)據(jù)接收端的電子設(shè)備的內(nèi)部結(jié)構(gòu) 圖;
[0034] 圖3為一個實施例中數(shù)據(jù)發(fā)送方法的流程示意圖;
[0035] 圖4為一個實施例中生成合并包的頭部信息中的會話標(biāo)識標(biāo)志位的值的步驟的 流程示意圖;
[0036] 圖5為一個實施例中從原始數(shù)據(jù)包所屬通信連接所對應(yīng)的緩存隊列的隊首取出 重發(fā)包的步驟的流程示意圖;
[0037] 圖6為一個實施例中緩存隊列的存儲結(jié)構(gòu)示意圖;
[0038] 圖7為一個實施例中調(diào)整緩存隊列的長度的步驟的流程示意圖;
[0039] 圖8為一個具體實施例中數(shù)據(jù)發(fā)送方法的流程示意圖;
[0040] 圖9為一個實施例中數(shù)據(jù)接收方法的流程示意圖;
[0041]圖10為一個實施例中根據(jù)重發(fā)包的包序號判斷是否首次接收到該包序號的數(shù)據(jù) 包的步驟的流程示意圖;
[0042] 圖11為一個實施例中利用通信連接所對應(yīng)的數(shù)組對接收到的數(shù)據(jù)包進(jìn)行去重處 理的過程的示意圖;
[0043] 圖12為一個實施例中請求切換數(shù)據(jù)包發(fā)送工作方式的步驟的流程示意圖;
[0044] 圖13為一個實施例中對工作方式切換操作進(jìn)行確認(rèn)并處理的步驟的流程示意 圖;
[0045] 圖14為一個實施例中數(shù)據(jù)發(fā)送裝置的結(jié)構(gòu)框圖;
[0046] 圖15為另一個實施例中數(shù)據(jù)發(fā)送裝置的結(jié)構(gòu)框圖;
[0047] 圖16為一個實施例中圖14中的緩存隊列管理模塊的結(jié)構(gòu)框圖;
[0048] 圖17為再一個實施例中數(shù)據(jù)發(fā)送裝置的結(jié)構(gòu)框圖;
[0049] 圖18為一個實施例中數(shù)據(jù)發(fā)送裝置的結(jié)構(gòu)框圖;
[0050] 圖19為一個實施例中數(shù)據(jù)接收裝置的結(jié)構(gòu)框圖;
[0051] 圖20為一個實施例中圖19中的第一判斷單元的結(jié)構(gòu)框圖;
[0052] 圖21為另一個實施例中數(shù)據(jù)接收裝置的結(jié)構(gòu)框圖;
[0053] 圖22為再一個實施例中數(shù)據(jù)接收裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0054] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。
[0055] 如圖1所示,在一個實施例中,提供了一種數(shù)據(jù)傳輸系統(tǒng)100,包括數(shù)據(jù)發(fā)送端102 和數(shù)據(jù)接收端104。數(shù)據(jù)發(fā)送端102與數(shù)據(jù)接收端104之間具有通信連接,數(shù)據(jù)發(fā)送端102 通過該通信連接向數(shù)據(jù)接收端104發(fā)送數(shù)據(jù)包,相應(yīng)地,數(shù)據(jù)接收端104接收數(shù)據(jù)發(fā)送端 102通過該通信連接發(fā)來的數(shù)據(jù)包。數(shù)據(jù)發(fā)送端102和數(shù)據(jù)接收端104可以是網(wǎng)絡(luò)中的任 意節(jié)點,比如用戶終端或者服務(wù)器。
[0056] 如圖2所示,在一個實施例中,提供了一種電子設(shè)備,可被配置為數(shù)據(jù)發(fā)送端102, 也可以被配置為數(shù)據(jù)接收端104。該電子設(shè)備包括通過系統(tǒng)總線連接的處理器、內(nèi)存、存儲 介質(zhì)和網(wǎng)絡(luò)接口。其中,該電子設(shè)備的存儲介質(zhì)存儲有操作系統(tǒng),網(wǎng)絡(luò)接口用于通過通信連 接進(jìn)行通信。若該電子設(shè)備被配置為數(shù)據(jù)發(fā)送端102,則該存儲介質(zhì)還包括一種數(shù)據(jù)發(fā)送裝 置,用于實現(xiàn)一種數(shù)據(jù)發(fā)送方法,相應(yīng)地內(nèi)存中存在緩存隊列,主要用于緩存已發(fā)送數(shù)據(jù)包 的重發(fā)包。若該電子設(shè)備被配置為數(shù)據(jù)接收端104,則該存儲介質(zhì)還包括一種數(shù)據(jù)接收裝 置,用于實現(xiàn)一種數(shù)據(jù)接收方法。該電子設(shè)備可以是臺式計算機(jī)、服務(wù)器、CDN(內(nèi)容分發(fā)網(wǎng) 絡(luò))中的網(wǎng)絡(luò)節(jié)點或者移動終端,移動終端包括但不限于智能手機(jī)、平板電腦、PDA(個人數(shù) 字助理等)。
[0057] 如圖3所示,在一個實施例中,提供了一種數(shù)據(jù)發(fā)送方法,本實施例以該方法應(yīng)用 于上述圖1中的數(shù)據(jù)發(fā)送端102來舉例說明。該方法具體包括如下步驟:
[0058] 步驟302,獲取待發(fā)送的原始數(shù)據(jù)包。
[0059] 具體地,原始數(shù)據(jù)包是當(dāng)前需要發(fā)送的數(shù)據(jù)包,原始數(shù)據(jù)包的描述用于與下述合 并包、重發(fā)包的概念相區(qū)分。原始數(shù)據(jù)包可以是數(shù)據(jù)發(fā)送端102自身所生成的數(shù)據(jù)包,也可 以是從其它網(wǎng)絡(luò)節(jié)點接收到的需要轉(zhuǎn)發(fā)的數(shù)據(jù)包。
[0060] 步驟304,從原始數(shù)據(jù)包所屬通信連接所對應(yīng)的緩存隊列的隊首取出重發(fā)包。
[0061] 具體地,原始數(shù)據(jù)包所屬通信連接,是指發(fā)送該原始數(shù)據(jù)包所使用的通信連接。若 兩個數(shù)據(jù)包的目的地址相同,則該兩個數(shù)據(jù)包屬于相同的通信連接。
[0062] -個緩存隊列與一個通信連接是對應(yīng)的,緩存隊列是一個單進(jìn)單出的隊列,主要 用于緩存重發(fā)包,已經(jīng)通過通信連接向數(shù)據(jù)接收端104發(fā)送過的數(shù)據(jù)包緩存在該緩存隊列 中,作為冗余的重發(fā)包排隊等待發(fā)送。該重發(fā)包用于在其相應(yīng)的數(shù)據(jù)包在傳輸過程中被丟 失時,用來替代該丟失的數(shù)據(jù)包。
[0063] 緩存隊列中緩存的數(shù)據(jù)包至少具有該重發(fā)包的包序號,該包序號是該重發(fā)包對應(yīng) 的已發(fā)送的數(shù)據(jù)包的頭部信息中用來唯一標(biāo)識出一個數(shù)據(jù)包的數(shù)據(jù)。一個數(shù)據(jù)包包括頭部 信息和數(shù)據(jù)內(nèi)容,數(shù)據(jù)內(nèi)容就是該數(shù)據(jù)包所要傳達(dá)的信息,而頭部信息則是傳輸數(shù)據(jù)包所 必須的信息,包括源地址和目的地址。具有相同包序號的數(shù)據(jù)包和重發(fā)包,兩者所包括的數(shù) 據(jù)內(nèi)容是相同的。
[0064] 步驟306,將取出的重發(fā)包與原始數(shù)據(jù)包合并,獲得合并包。
[0065] 具體地,可提取出重發(fā)包的頭部信息和原始數(shù)據(jù)包的頭部信息,生成合并包的頭 部信息,并采用預(yù)定義方式將重發(fā)包與原始數(shù)據(jù)包的數(shù)據(jù)內(nèi)容合并,從而生成合并包。其中 數(shù)據(jù)內(nèi)容的合并是可還原的,比如可以用特定字符將兩種數(shù)據(jù)內(nèi)容區(qū)隔開,用于在拆分合 并包時區(qū)分?jǐn)?shù)據(jù)內(nèi)容。生成的合并包是一個數(shù)據(jù)包,該數(shù)據(jù)包的頭部信息包括表示該數(shù)據(jù) 包是合并包的合并包識別標(biāo)志位。
[0066] 步驟308,通過通信連接發(fā)送合并包。
[0067] 具體地,通過與數(shù)據(jù)接收端104的通信連接,將合并包發(fā)送給數(shù)據(jù)接收端104。
[0068] 步驟310,將原始數(shù)據(jù)包加入緩存隊列的隊尾。
[0069] 具體地,原始數(shù)據(jù)包被合并后發(fā)送,然后作為新的重發(fā)包加入緩存隊列的隊尾,這 樣以后在該原始數(shù)據(jù)包排到緩存隊列隊首時,就可以與其它數(shù)據(jù)包再合并后發(fā)送。
[0070] 上述數(shù)據(jù)發(fā)送方法,通信連接對應(yīng)設(shè)置有緩存隊列,發(fā)送數(shù)據(jù)時,將待發(fā)送的原始 數(shù)據(jù)包與緩存隊列中緩存的重發(fā)包合并后,通過該通信連接發(fā)送出去。然后將該原始數(shù)據(jù) 包作為新的重發(fā)包加入緩存隊列的隊尾,這樣以后在該原始數(shù)據(jù)包排到緩存隊列隊首時, 就可以與其它數(shù)據(jù)包再合并后發(fā)送。這樣通過發(fā)送合并包,可以避免因發(fā)送重發(fā)包而導(dǎo)致 增加額外的數(shù)據(jù)包發(fā)送數(shù)量,減輕數(shù)據(jù)傳輸負(fù)擔(dān),而且原始數(shù)據(jù)包的合并發(fā)送不需要等待, 適用于高實時性的數(shù)據(jù)傳輸。而且,一個數(shù)據(jù)包與其重發(fā)包是異步發(fā)送的,可以盡量避免連 續(xù)發(fā)送數(shù)據(jù)包和其重發(fā)包導(dǎo)致兩者均丟失的情形。
[0071 ] 如圖4所示,在一個實施例中,步驟308之前,還包括生成合并包的頭部信息中的 會話標(biāo)識標(biāo)志位的值的步驟,具體包括