最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

一種基于反饋的網(wǎng)絡(luò)編碼tcp解碼方法及裝置的制造方法

文檔序號(hào):10660557閱讀:631來(lái)源:國(guó)知局
一種基于反饋的網(wǎng)絡(luò)編碼tcp解碼方法及裝置的制造方法
【專利摘要】本發(fā)明提供了一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法及裝置,所述方法包括:當(dāng)接收到TCP層發(fā)送的TCP數(shù)據(jù)包時(shí),發(fā)送端根據(jù)當(dāng)前鏈路丟包率對(duì)當(dāng)前需要發(fā)送的編碼包數(shù)量Sn進(jìn)行更新;根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋信息確定當(dāng)前的編碼窗口鎖的次數(shù)Ln;若當(dāng)前的編碼窗口鎖的次數(shù)Ln不為0,則固定編碼窗口,并將編碼窗口內(nèi)的W個(gè)TCP數(shù)據(jù)包按照編碼包數(shù)量進(jìn)行預(yù)設(shè)編碼,將編碼好的個(gè)數(shù)據(jù)包發(fā)送至接收端。本發(fā)明不僅能夠根據(jù)網(wǎng)絡(luò)環(huán)境產(chǎn)生主動(dòng)補(bǔ)償,并且可以基于反饋?zhàn)龀鱿鄳?yīng)調(diào)整以加速解碼矩陣滿秩,減少解碼等待時(shí)延。
【專利說(shuō)明】
一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法及裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及通信技術(shù)領(lǐng)域,具體涉及一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法及裝 置。
【背景技術(shù)】
[0002] 網(wǎng)絡(luò)編碼TCP是一類可以有效提高TCP在無(wú)線網(wǎng)絡(luò)中的傳輸吞吐量和可靠性的通 信技術(shù)。在無(wú)線網(wǎng)絡(luò)中,由于終端移動(dòng),物體遮擋等原因,常出現(xiàn)大量隨機(jī)丟包。而當(dāng)今使用 最為廣泛的傳輸協(xié)議TCP最初卻是為普通的有線網(wǎng)絡(luò)設(shè)計(jì),TCP的擁塞控制算法僅僅考慮了 擁塞造成的丟包。網(wǎng)絡(luò)編碼TCP通過(guò)在TCP數(shù)據(jù)包中添加冗余信息來(lái)補(bǔ)償無(wú)線網(wǎng)絡(luò)中的隨機(jī) 丟包。然而,當(dāng)網(wǎng)絡(luò)編碼TCP應(yīng)用到在線應(yīng)用中時(shí)(比如實(shí)時(shí)多媒體應(yīng)用),解碼引起的解碼 時(shí)延卻是一個(gè)不得不考慮的挑戰(zhàn)。網(wǎng)絡(luò)編碼TCP通過(guò)將不同的TCP原始數(shù)據(jù)包混合編碼發(fā) 出,接收端只有接受到足夠多的線性無(wú)關(guān)的編碼包才能使解碼矩陣達(dá)到滿秩狀態(tài),只有滿 秩了才能成功解碼。而網(wǎng)絡(luò)中不可控的丟包會(huì)使得解碼端等待滿秩的時(shí)間不可控。在這段 時(shí)間內(nèi)無(wú)法成功解碼所有緩沖區(qū)內(nèi)收到的編碼包,也無(wú)法向上層交付任何數(shù)據(jù)包。從而造 成巨大的解碼時(shí)延以及交付抖動(dòng)。而在線應(yīng)用需要一個(gè)平滑的接收速率以及嚴(yán)格的時(shí)延控 制。根據(jù)有關(guān)文獻(xiàn)記載,亞馬遜估計(jì)時(shí)延每增加 looms就會(huì)損耗1%的利潤(rùn)所得。所以降低解 碼時(shí)延對(duì)于網(wǎng)絡(luò)編碼TCP性能的提升起著重要的作用。
[0003] 網(wǎng)絡(luò)編碼TCP中的解碼時(shí)延是指當(dāng)一個(gè)TCP原始數(shù)據(jù)包第一次被編碼發(fā)出到最終 被成功解碼交付給應(yīng)用層所經(jīng)歷的時(shí)間。解碼時(shí)延主要包含三個(gè)部分:傳輸時(shí)延,等待時(shí)延 和計(jì)算時(shí)延。其中,傳輸時(shí)延有鏈路本身的參數(shù)所控制,無(wú)法改變。等待時(shí)延即等待滿秩的 時(shí)延,這部分可以通過(guò)調(diào)整冗余信息來(lái)協(xié)同鏈路丟包來(lái)得以控制最大程度上逼近完全消除 的理想效果。因?yàn)檫@部分時(shí)延基本決定了整個(gè)解碼時(shí)延的大小。計(jì)算時(shí)延是指當(dāng)解碼矩陣 滿秩后到成功解碼的時(shí)間,目前針對(duì)隨機(jī)線性編碼,采用最廣泛的解碼算法是高斯-約旦消 元。這部分時(shí)延與解碼矩陣的大小成〇(n 2)關(guān)系。
[0004] 綜上所述可知,控制網(wǎng)絡(luò)編碼TCP解碼時(shí)延的根本在于根據(jù)網(wǎng)絡(luò)情況正確調(diào)整冗 余加速解碼矩陣快速滿秩。
[0005] 現(xiàn)有的在線網(wǎng)絡(luò)編碼TCP解碼方法通過(guò)合理的控制編碼窗口大小來(lái)選擇每次參與 編碼的原始包數(shù)目。編碼窗口的大小代表了它掩蓋丟包的能力。以TCP/NC為代表的這類算 法以只掩蓋無(wú)線丟包而不掩蓋擁塞丟包為目的,合理的控制重傳和冗余來(lái)達(dá)到在線編解碼 的目的。TCP/NC每次都將最新到達(dá)網(wǎng)絡(luò)編碼層的W個(gè)TCP原始數(shù)據(jù)包進(jìn)行編碼發(fā)出,其中W為 編碼窗口大小。這類網(wǎng)絡(luò)編碼TCP算法可以同時(shí)兼容基于丟包和RTT的TCP擁塞控制機(jī)制。然 而,這類算法采用一個(gè)預(yù)設(shè)的固定的冗余值R:
[0007]其中,P為平均丟包率。在具體的解碼過(guò)程中,當(dāng)每次有新的TCP原始數(shù)據(jù)包到達(dá)網(wǎng) 絡(luò)編碼層時(shí),TCP/NC的編碼窗口總會(huì)滑動(dòng)以使編碼窗口中總是包含最新到達(dá)的W個(gè)TCP原始 數(shù)據(jù)包,并通過(guò)預(yù)設(shè)的冗余值R來(lái)對(duì)通信中的無(wú)線隨機(jī)丟包進(jìn)行補(bǔ)償。然而這個(gè)固定的預(yù)設(shè) 的冗余值R很難適應(yīng)實(shí)時(shí)變化的信道丟包率。從而導(dǎo)致丟包與冗余補(bǔ)償不匹配,最終導(dǎo)致解 碼矩陣變得非常大,解碼時(shí)延失控。

【發(fā)明內(nèi)容】

[0008] 針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明提供一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法及裝 置,不僅能夠根據(jù)基本的網(wǎng)絡(luò)環(huán)境產(chǎn)生主動(dòng)補(bǔ)償,并且可以基于反饋?zhàn)龀鱿鄳?yīng)調(diào)整以加速 解碼矩陣滿秩,減少解碼等待時(shí)延,平滑數(shù)據(jù)交付抖動(dòng)。
[0009] 為解決上述技術(shù)問(wèn)題,本發(fā)明提供以下技術(shù)方案:
[0010] 第一方面,本發(fā)明提供了一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法,包括:
[0011] 當(dāng)接收到上層傳輸控制協(xié)議TCP層發(fā)送的TCP數(shù)據(jù)包時(shí),發(fā)送端根據(jù)當(dāng)前鏈路丟包 率對(duì)當(dāng)前需要發(fā)送的編碼包數(shù)量Sn進(jìn)行更新:
[0012] Sn = Sn+R
[0013] 其中,R為根據(jù)當(dāng)前鏈路丟包率確定的冗余系數(shù),1?=1八1-?),?為當(dāng)前鏈路丟包 率;
[0014] 根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋信息確定當(dāng)前的 編碼窗口鎖的次數(shù)Ln;
[0015] 若當(dāng)前的編碼窗口鎖的次數(shù)Ln不為0,則固定編碼窗口,并將編碼窗口內(nèi)的W個(gè)TCP 數(shù)據(jù)包按照所述編碼包數(shù)量b&」進(jìn)行預(yù)設(shè)編碼,以及將編碼好的個(gè)數(shù)據(jù)包發(fā)送至接收 端;
[0016] 其中,W為編碼窗口的大小。
[0017] 優(yōu)選地,若當(dāng)前的編碼窗口鎖的次數(shù)Ln為0,則滑動(dòng)編碼窗口使之包含最近接收到 的不超過(guò)W個(gè)TCP數(shù)據(jù)包,并將編碼窗口內(nèi)的TCP數(shù)據(jù)包按照所述編碼包數(shù)量進(jìn)行預(yù)設(shè) 編碼,以及將編碼好的|_辦」個(gè)數(shù)據(jù)包發(fā)送至接收端。
[0018]優(yōu)選地,所述根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋信息 確定當(dāng)前的編碼窗口鎖的次數(shù)Ln,包括:
[0019] 根據(jù)當(dāng)前時(shí)刻接收到的應(yīng)答消息中攜帶的反饋信息中所包含的接收端欲成功解 碼所缺少的數(shù)據(jù)包數(shù)量Ack. loss、上一時(shí)刻接收到的應(yīng)答消息中攜帶的反饋信息中所包含 的接收端欲成功解碼所缺少的數(shù)據(jù)包數(shù)量last, loss以及根據(jù)當(dāng)前時(shí)刻接收到的應(yīng)答消息 中攜帶的反饋信息中所包含的用于觸發(fā)當(dāng)前時(shí)刻的應(yīng)答信息產(chǎn)生的數(shù)據(jù)包的序列號(hào) Ack. trigSeq計(jì)算得到的發(fā)送端在發(fā)送擁有序列號(hào)Ack. trigSeq的數(shù)據(jù)包之后發(fā)送的冗余 包數(shù)量Rn,采用下述公式一確定當(dāng)前的編碼窗口鎖的次數(shù)Ln:
[0020] Ln=max{Ln+Ack. loss-last · loss_Rn,0} 公式一
[0021] 其中,Ack. loss-last, loss表示在兩個(gè)應(yīng)答消息之間出現(xiàn)的新的丟包數(shù)。
[0022] 優(yōu)選地,在將編碼好的個(gè)數(shù)據(jù)包發(fā)送至接收端之后,所述方法還包括更新Ln 為:
[0023] Ln - Ln - |_S/?J 〇
[0024] 優(yōu)選地,在將編碼好的b&」個(gè)數(shù)據(jù)包發(fā)送至接收端之后,所述方法還包括更新Sn 為:
[0025] 5? = 5)? -。
[0026] 優(yōu)選地,如果接收到的上層TCP層發(fā)送的TCP數(shù)據(jù)包為重傳包,則直接將該TCP數(shù)據(jù) 包向接收端發(fā)送[_&」次。
[0027]第二方面,本發(fā)明還提供了一種基于上述任一種方法的網(wǎng)絡(luò)編碼TCP解碼方法,包 括:
[0028] 當(dāng)接收端接收到一個(gè)編碼包C時(shí),接收端從編碼包C中提取編碼系數(shù)向量V,并將編 碼系數(shù)向量V加入解碼矩陣,對(duì)編碼系數(shù)向量V進(jìn)行高斯-約旦消元;
[0029] 若消元后的編碼系數(shù)向量V變成全零向量,則丟棄編碼包C,否則將編碼包C的負(fù)載 部分加入解碼緩沖區(qū);其中,編碼包C的負(fù)載部分為編碼包C除去頭部信息的數(shù)據(jù)信息部分;
[0030] 對(duì)編碼包C的負(fù)載部分執(zhí)行高斯-約旦消元,若有數(shù)據(jù)包被順序成功解碼,將成功 解碼的數(shù)據(jù)包發(fā)送給上層TCP層;
[0031] 向發(fā)送端發(fā)送應(yīng)答消息,所述應(yīng)答消息中攜帶有反饋信息,所述反饋信息用于使 得發(fā)送端確定所述編碼窗口鎖的次數(shù)Ln。
[0032]優(yōu)選地,所述應(yīng)答消息中攜帶的反饋信息中包括最老的不可見(jiàn)包的序列號(hào) Ack.Seq和接收端當(dāng)前欲成功解碼所缺少的數(shù)據(jù)包數(shù)量Ack. loss,以及觸發(fā)當(dāng)前時(shí)刻的應(yīng) 答信息產(chǎn)生的數(shù)據(jù)包的序列號(hào)Ack.trigSeq;
[0033]其中,最老的不可見(jiàn)包的序列號(hào)Ack.Seq用于告知發(fā)送端哪些數(shù)據(jù)包不需要再參 與編碼和重傳;對(duì)于一個(gè)C = Pi+q,且= 的編碼包,Pi為可見(jiàn)包,Pi (l>i)為不可見(jiàn) 包,P1+1為最老的不可見(jiàn)包,3,為編碼系數(shù)。
[0034]第三方面,本發(fā)明還提供了一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼裝置,包括:
[0035]更新單元,用于在接收到上層傳輸控制協(xié)議TCP層發(fā)送的TCP數(shù)據(jù)包時(shí),根據(jù)當(dāng)前 鏈路丟包率對(duì)當(dāng)前需要發(fā)送的編碼包數(shù)量Sn進(jìn)行更新:
[0036] Sn = Sn+R
[0037] 其中,R為根據(jù)當(dāng)前鏈路丟包率確定的冗余系數(shù),1?=1八1-?),?為當(dāng)前鏈路丟包 率;
[0038] 確定單元,用于根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋信 息確定當(dāng)前的編碼窗口鎖的次數(shù)Ln;
[0039] 判斷單元,用于判斷當(dāng)前的編碼窗口鎖的次數(shù)Ln是否為0;
[0040] 處理單元,用于在所述判斷單元確定當(dāng)前的編碼窗口鎖的次數(shù)Ln不為0的情況下, 固定編碼窗口,并將編碼窗口內(nèi)的W個(gè)TCP數(shù)據(jù)包按照所述編碼包數(shù)量L&?」進(jìn)行預(yù)設(shè)編碼, 以及將編碼好的[_&」個(gè)數(shù)據(jù)包發(fā)送至接收端;其中W為編碼窗口的大小。
[0041] 第四方面,本發(fā)明還提供了一種基于上面所述裝置的基于反饋的網(wǎng)絡(luò)編碼TCP解 碼裝置,包括:
[0042] 第一消元單元,用于在接收到一個(gè)編碼包C時(shí),從編碼包C中提取編碼系數(shù)向量V, 并將編碼系數(shù)向量V加入解碼矩陣,對(duì)編碼系數(shù)向量V進(jìn)行高斯-約旦消元;
[0043] 判斷單元,用于判斷消元后的編碼系數(shù)向量V是否為全零向量;
[0044] 丟棄單元,用于在所述判斷單元確定消元后的編碼系數(shù)向量V為全零向量時(shí),丟棄 編碼包C;
[0045] 第二消元單元,用于在所述判斷單元確定消元后的編碼系數(shù)向量V不為全零向量 時(shí),將編碼包C的負(fù)載部分加入解碼緩沖區(qū),并對(duì)編碼包C的負(fù)載部分執(zhí)行高斯-約旦消元;
[0046] 發(fā)送單元,用于在第二消元單元成功解碼出數(shù)據(jù)包時(shí),將成功解碼出的數(shù)據(jù)包發(fā) 送給上層TCP層;
[0047] 所述發(fā)送單元,還用于向如上面所述的裝置發(fā)送應(yīng)答消息,所述應(yīng)答消息中攜帶 有反饋信息,所述反饋信息用于使得如上面所述的裝置確定所述編碼窗口鎖次數(shù)Ln。
[0048] 由上述技術(shù)方案可知,本發(fā)明所述的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法,不僅能夠 根據(jù)基本的網(wǎng)絡(luò)環(huán)境產(chǎn)生主動(dòng)補(bǔ)償,并且可以基于反饋?zhàn)龀鱿鄳?yīng)調(diào)整以加速解碼矩陣滿 秩,減少解碼等待時(shí)延,平滑數(shù)據(jù)交付抖動(dòng)。能夠在無(wú)線網(wǎng)絡(luò)中保證通信吞吐量的同時(shí)降低 解碼時(shí)延,滿足用戶應(yīng)用的實(shí)時(shí)性需求。
【附圖說(shuō)明】
[0049] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明 的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù) 這些附圖獲得其他的附圖。
[0050] 圖1是本發(fā)明第一個(gè)實(shí)施例提供的一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法的流程 圖;
[0051] 圖2是本發(fā)明第一個(gè)實(shí)施例提供的另一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法的流 程圖;
[0052] 圖3是本發(fā)明第二個(gè)實(shí)施例提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法的流程圖; [0053]圖4是本發(fā)明第三個(gè)實(shí)施例提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼裝置的結(jié)構(gòu)示意 圖;
[0054] 圖5是本發(fā)明第四個(gè)實(shí)施例提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼裝置的結(jié)構(gòu)示意 圖。
【具體實(shí)施方式】
[0055] 為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例 中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0056]現(xiàn)有的解碼方法大致是這樣的:每次有新的TCP原始數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)編碼層時(shí), TCP/NC的編碼窗口總會(huì)滑動(dòng)以使編碼窗口中總是包含最新到達(dá)的W個(gè)TCP原始數(shù)據(jù)包,并通 過(guò)預(yù)設(shè)的冗余來(lái)對(duì)通信中的無(wú)線隨機(jī)丟包進(jìn)行補(bǔ)償。然而預(yù)設(shè)的冗余常常不足以補(bǔ)償動(dòng)態(tài) 變化的無(wú)線隨機(jī)丟包,從而造成巨大的解碼時(shí)延。本發(fā)明中基于反饋的在線網(wǎng)絡(luò)編碼TCP解 碼方法,以下簡(jiǎn)稱為FNC方案,當(dāng)通過(guò)預(yù)設(shè)的冗余不能完全補(bǔ)償通信中的隨機(jī)無(wú)線丟包時(shí), 使用反饋帶來(lái)解碼矩陣的信息,在恰當(dāng)?shù)臅r(shí)候固定編碼窗口,阻止其產(chǎn)生滑動(dòng),以選取合適 的TCP原始數(shù)據(jù)包參與編碼來(lái)加速接收端解碼矩陣滿秩。為了與現(xiàn)有的TCP/IP架構(gòu)保持良 好的兼容性,本發(fā)明保留了 TCP/NC中的框架。而在其網(wǎng)絡(luò)編碼層的編碼發(fā)送端與解碼接收 端實(shí)現(xiàn)了本申請(qǐng)?zhí)峁┑姆椒?。下面分別介紹了 FNC方案在TCP網(wǎng)絡(luò)編碼層發(fā)送端和接收端的 詳細(xì)步驟,并添加了一個(gè)FNC方案實(shí)例以展現(xiàn)FNC方案中固定編碼窗口的優(yōu)勢(shì)。
[0057]本發(fā)明第一個(gè)實(shí)施例提供了一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法,參見(jiàn)圖1,該 方法包括如下步驟:
[0058]步驟101:當(dāng)接收到上層傳輸控制協(xié)議TCP層發(fā)送的TCP數(shù)據(jù)包時(shí),發(fā)送端根據(jù)當(dāng)前 鏈路丟包率對(duì)當(dāng)前需要發(fā)送的編碼包數(shù)量Sn進(jìn)行更新:
[0059] Sn = Sn+R
[0060] 其中,R為根據(jù)當(dāng)前鏈路丟包率確定的冗余系數(shù),1?=1八1_?),?為當(dāng)前鏈路丟包 率。
[0061] 在本步驟中,根據(jù)當(dāng)前鏈路丟包率P計(jì)算冗余系數(shù)R,然后再根據(jù)冗余系數(shù)R計(jì)算當(dāng) 前需要發(fā)送的編碼包數(shù)量Sn。
[0062] 此外,由于本步驟的操作在是網(wǎng)絡(luò)編碼層,因此需要接收上層TCP層發(fā)送的TCP數(shù) 據(jù)包。
[0063] 步驟102:根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋信息確 定當(dāng)前的編碼窗口鎖的次數(shù)Ln。
[0064] 在本步驟中,根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋信息 確定當(dāng)前的編碼窗口鎖的次數(shù)Ln,包括:
[0065] 根據(jù)當(dāng)前時(shí)刻接收到的應(yīng)答消息中攜帶的反饋信息中所包含的接收端欲成功解 碼所缺少的數(shù)據(jù)包數(shù)量Ack. loss、上一時(shí)刻接收到的應(yīng)答消息中攜帶的反饋信息中所包含 的接收端欲成功解碼所缺少的數(shù)據(jù)包數(shù)量last, loss以及根據(jù)當(dāng)前時(shí)刻接收到的應(yīng)答消息 中攜帶的反饋信息中所包含的用于觸發(fā)當(dāng)前時(shí)刻的應(yīng)答信息產(chǎn)生的數(shù)據(jù)包的序列號(hào) Ack. trigSeq計(jì)算得到的發(fā)送端在發(fā)送擁有序列號(hào)Ack. trigSeq的數(shù)據(jù)包之后發(fā)送的冗余 包數(shù)量Rn,采用下述公式一確定當(dāng)前的編碼窗口鎖的次數(shù)Ln:
[0066] Ln=max{Ln+Ack. loss-last. loss_Rn,0} 公式一
[0067] 其中,Ack. loss-last, loss表示在兩個(gè)應(yīng)答消息之間出現(xiàn)的新的丟包數(shù)。
[0068]其中,在根據(jù)Ack. trigSeq計(jì)算得到Rn時(shí),還需要根據(jù)發(fā)送端發(fā)送的數(shù)據(jù)包序列, 該數(shù)據(jù)包序列中包含了發(fā)送端發(fā)送的各個(gè)數(shù)據(jù)包的序列號(hào)。
[0069] 例如假設(shè)根據(jù)當(dāng)前鏈路丟包率P計(jì)算得到的冗余系數(shù)R=l. 2,假設(shè)發(fā)送端發(fā)送序 列為1,2,3,4,5,(:,6,7,8,9,10,(:,11,12,其中(:代表增加的冗余包。這里用一個(gè)隊(duì)列記錄如 上發(fā)送端的包發(fā)送情況,則一個(gè)應(yīng)答消息ACK返回時(shí),若反饋信息告訴它是由5號(hào)包觸發(fā)的, 則通過(guò)這個(gè)隊(duì)列可知截止到此刻5號(hào)包后發(fā)送了兩個(gè)冗余包,那么Rn = 2。
[0070] 進(jìn)一步地,當(dāng)前時(shí)刻接收到的應(yīng)答消息中攜帶的反饋信息中還包含最老的不可見(jiàn) 包的序列號(hào)Ack. Seq,其中,最老的不可見(jiàn)包的序列號(hào)Ack. Seq用于告知發(fā)送端哪些數(shù)據(jù)包 不需要再參與編碼和重傳。因此發(fā)送端根據(jù)最老的不可見(jiàn)包的序列號(hào)Ack. Seq可以獲知哪 些數(shù)據(jù)包不需要再參與編碼和重傳,這對(duì)后續(xù)步驟l〇3a進(jìn)行編碼時(shí)具有指導(dǎo)意義。
[0071] 其中,對(duì)于一個(gè)C = Pi+q,且ν = 的編碼包,pi為可見(jiàn)包,ρια>?)為不可見(jiàn) 包,Pi+i為最老的不可見(jiàn)包。為編碼系數(shù)。
[0072]步驟103:判斷當(dāng)前的編碼窗口鎖的次數(shù)Ln是否為0;若否,則執(zhí)行步驟103a。
[0073] 步驟103a:固定編碼窗口,并將編碼窗口內(nèi)的W個(gè)TCP數(shù)據(jù)包按照所述編碼包數(shù)量 [/?」進(jìn)行預(yù)設(shè)編碼,以及將編碼好的個(gè)數(shù)據(jù)包發(fā)送至接收端;w為編碼窗口的大小。
[0074] 在本步驟中,在當(dāng)前的編碼窗口鎖的次數(shù)Ln不為0的情況下,采用了固定編碼窗口 的方式,將編碼窗口內(nèi)的W個(gè)TCP數(shù)據(jù)包按照所述編碼包數(shù)量[_&」進(jìn)行預(yù)設(shè)編碼,以及將編 碼好的個(gè)數(shù)據(jù)包發(fā)送至接收端,這里所述進(jìn)行預(yù)設(shè)編碼可以采用補(bǔ)償編碼中常用的編 碼方法進(jìn)行編碼,由于這部分知識(shí)對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)較為熟知,因此不再贅述。其 中,L」為向下取整的符號(hào)。
[0075] 本步驟中采用的固定編碼窗口的方式相對(duì)于現(xiàn)有技術(shù)中滑動(dòng)編碼窗口的方式,具 有減少接收數(shù)據(jù)包投遞速度的優(yōu)勢(shì)。下面通過(guò)一個(gè)具體的例子詳細(xì)分析固定編碼窗口具有 這種優(yōu)勢(shì)的原因。
[0076] 例如,對(duì)于一個(gè)編碼窗口 W = 3的編碼TCP方案TCP/NC,TCP/NC發(fā)送端采用滑動(dòng)編碼 窗口方式,每次將數(shù)目不大于W的原始包進(jìn)行編碼發(fā)出,其總共發(fā)送7個(gè)編碼包CS1,(0< i < 7),如下:
[0078] 其中,Cs3 = 9P47P2+3P3,CS4 = 2P2+8P3+3P4。如果沒(méi)有包丟失,則接收端收到7個(gè)線 性無(wú)關(guān)的編碼包,解碼矩陣滿秩,經(jīng)過(guò)高斯消元后,解碼矩陣變換成7行7列的單位矩陣,Pi, P2,P3,P4,P5,P 6,P7 均被解出。
[0079] 假設(shè),在傳輸過(guò)程中CS4丟失,接收端只能收到6個(gè)包,經(jīng)過(guò)高斯消元,接收端只能成 功解出Pi,P2,p 3。按照滑動(dòng)窗口方式的編碼方案將導(dǎo)致P4,p5,p6,P7不能被解出。除去單位矩 陣部分,TCP/NC方案解碼矩陣形式如下:
[0081]假設(shè)當(dāng)準(zhǔn)備發(fā)送第6個(gè)包時(shí),Cs5觸發(fā)的ACK帶回了丟包信息。由于當(dāng)接收端收到編 碼包Cs5時(shí),經(jīng)過(guò)高斯消元Cs5轉(zhuǎn)化為Cr5 = P4+q,q = 4P5,則當(dāng)前最新的可見(jiàn)包為4,最老的不可 見(jiàn)包為5。所以Cs5觸發(fā)的ACK中的反饋信息Ack. loss = 1,Ack. Seq = 5,Ack. trigSeq = 5。由于 該ACK是CS5觸發(fā)的,所以Ack. trigSeq = 5。經(jīng)過(guò)計(jì)算,F(xiàn)NC方案中編碼窗口鎖的次數(shù)Ln = 1, FNC將鎖住當(dāng)前編碼窗口,使之不向前滑動(dòng),此時(shí)編碼窗口內(nèi)的原始包分別為P3,P4,P5,而非 滑動(dòng)窗口方式下的最新到達(dá)的W個(gè)包P4,P5,P 6,從而使得發(fā)送的包為C ' s6= 11P3+2P4+3P5,而 非Cs6 = 2P4+9P5+15P6。當(dāng)成功接收到C ' s6接收端經(jīng)過(guò)高斯消元可成功解碼Pi,P2,P3,P4,P5。只 有P6,P7不能被解出。除去單位矩陣部分,F(xiàn)NC方案解碼矩陣形式如下:
[0083] 由以上例子可以看出本實(shí)施例提供的FNC基于反饋的編碼窗口鎖方案比滑動(dòng)窗口 編碼方案能夠更快的解出原始包。由于數(shù)據(jù)包只有被順序解出才能被交付給應(yīng)用層,因此 本實(shí)施例提供的FNC有利于減少接收數(shù)據(jù)包的投遞速度。
[0084] 當(dāng)然,若當(dāng)前的編碼窗口鎖的次數(shù)Ln為0,則會(huì)采用普通的滑動(dòng)編碼窗口方式。參 見(jiàn)圖2,若當(dāng)前的編碼窗口鎖的次數(shù)Ln為0,那么將會(huì)執(zhí)行步驟103b,即滑動(dòng)編碼窗口使之包 含最近接收到的不超過(guò)W個(gè)TCP數(shù)據(jù)包,并將編碼窗口內(nèi)的TCP數(shù)據(jù)包按照所述編碼包數(shù)量 bs?」進(jìn)行預(yù)設(shè)編碼,以及將編碼好的[你」個(gè)數(shù)據(jù)包發(fā)送至接收端。
[0085] 優(yōu)選地,在將編碼好的[_Sk」個(gè)數(shù)據(jù)包發(fā)送至接收端之后,所述方法還包括更新Ln 為:
[0086] Ln ~ Ln - \βη\ "
[0087] 優(yōu)選地,在將編碼好的pn」個(gè)數(shù)據(jù)包發(fā)送至接收端之后,所述方法還包括更新Sn 為:
[0088] Sn = Sn. - \_Sn.j 〇
[0089] 優(yōu)選地,如果接收到的上層TCP層發(fā)送的TCP數(shù)據(jù)包為重傳包,則直接將該TCP數(shù)據(jù) 包向接收端發(fā)送bsw」次,然后更新Sn為:汾二&-bs?」。否則,將該TCP數(shù)據(jù)包加入緩沖區(qū)等 待編碼。
[0090] 其中,對(duì)于是否為重傳包,可以根據(jù)該數(shù)據(jù)包上帶的序列號(hào)進(jìn)行判斷。例如還是上 述步驟102舉的例子,發(fā)送端由目前為止發(fā)送的最大序列號(hào)的包的信息,該例子中為12,則 如果TCP來(lái)的數(shù)據(jù)包的序列號(hào)小于等于12則該包為重傳包。
[0091 ] 綜上可知,網(wǎng)絡(luò)編碼層的發(fā)送端的數(shù)據(jù)處理過(guò)程如下所示:
[0092] (A)在TCP網(wǎng)絡(luò)編碼層發(fā)送端,用一個(gè)隊(duì)列來(lái)記錄發(fā)送的冗余包的序列號(hào)信息(即 該編碼冗余包中參與編碼的最大序號(hào)的TCP原始數(shù)據(jù)包的序列號(hào))。當(dāng)接收到由接收端發(fā)送 的應(yīng)答信息,如ACK包時(shí),發(fā)送端按如下步驟執(zhí)行:
[0093] 1)在ACK包中提取相應(yīng)的反饋信息:接收端解碼矩陣滿秩所需的數(shù)據(jù)包數(shù) Ack. loss,即成功解碼所需的數(shù)據(jù)包數(shù),以及觸發(fā)這個(gè)ACK產(chǎn)生的數(shù)據(jù)包序列號(hào) Ack.trigSeq〇
[0094] 2)根據(jù)Ack. trigSeq來(lái)計(jì)算出發(fā)送端在發(fā)送擁有序列號(hào)Ack. trigSeq的數(shù)據(jù)包之 后發(fā)送的冗余包數(shù)目Rn。
[0095] 3)用last. loss來(lái)記錄上一個(gè)ACK帶來(lái)的信息Ack. loss,Ln來(lái)表示編碼窗口鎖的次 數(shù),根據(jù)最新的反饋信息更新Ln:
[0096] Ln=max{Ln+Ack. loss-last. Ioss-Rn,0}
[0097] 其中Ack. loss-last. loss代表在兩個(gè)ACK之間出現(xiàn)的新的丟包數(shù)
[0098] 4)更新last · loss
[0099] last. loss=Ack. loss
[0100] (B)當(dāng)收到一個(gè)來(lái)自上層TCP層發(fā)送的TCP數(shù)據(jù)包時(shí),發(fā)送端按如下步驟執(zhí)行:
[0101 ] 1)更新本次的應(yīng)該發(fā)送的編碼包數(shù)目Sn:
[0102] Sn = Sn+R
[0103] 其中,冗余系數(shù)R=1/(1-P),P為當(dāng)前鏈路丟包率。
[0104] 若果該數(shù)據(jù)包是一個(gè)重傳包,直接發(fā)送該數(shù)據(jù)包[汾」次。跳轉(zhuǎn)到步驟4),否則將該 數(shù)據(jù)包加入緩沖區(qū)。
[0105] 2)檢查L(zhǎng)n,若果Ln不為零,則固定編碼窗口。否則,滑動(dòng)編碼窗口使之包含最新的 不超過(guò)W個(gè)TCP數(shù)據(jù)包,并更新Ln:
[0106] = /.,?-L5."」
[0107] 3)將編碼窗口內(nèi)的TCP數(shù)據(jù)包編碼生成|_辦」個(gè)編碼包,并依次將其發(fā)出。
[0108] 4)更新 Sn:
[0109] S/? = 5V? -- |_5ν?」
[0110] 從上面的描述可知,本實(shí)施例提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法,不僅能夠 根據(jù)基本的網(wǎng)絡(luò)環(huán)境產(chǎn)生主動(dòng)補(bǔ)償(例如根據(jù)當(dāng)前的鏈路丟包率獲取冗余系數(shù)R,然后根據(jù) 冗余系數(shù)R獲取當(dāng)前應(yīng)該發(fā)送的編碼包數(shù)目Sn:),并且可以基于反饋?zhàn)龀鱿鄳?yīng)調(diào)整以加速 解碼矩陣滿秩(例如當(dāng)滿足一定條件時(shí),固定編碼窗口進(jìn)行編碼),減少解碼等待時(shí)延,平滑 數(shù)據(jù)交付抖動(dòng)。能夠在無(wú)線網(wǎng)絡(luò)中保證通信吞吐量的同時(shí)降低解碼時(shí)延,滿足用戶應(yīng)用的 實(shí)時(shí)性需求。
[0111] 本發(fā)明第二個(gè)實(shí)施例提供了另一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法,與上述第 一個(gè)實(shí)施例不同的是,上述第一個(gè)實(shí)施例提供基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法應(yīng)用在網(wǎng) 絡(luò)編碼層的發(fā)送端,而本實(shí)施例提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法應(yīng)用在網(wǎng)絡(luò)編碼 層的接收端,兩者相互呼應(yīng)。具體地,參見(jiàn)圖3,本實(shí)施例提供的基于反饋的網(wǎng)絡(luò)編碼TCP解 碼方法,包括如下步驟:
[0112] 步驟201:當(dāng)接收端接收到一個(gè)編碼包C時(shí),接收端從編碼包C中提取編碼系數(shù)向量 V,并將編碼系數(shù)向量V加入解碼矩陣,對(duì)編碼系數(shù)向量V進(jìn)行高斯-約旦消元。
[0113] 步驟202:判斷消元后的編碼系數(shù)向量V是否變成全零向量,若是,則執(zhí)行步驟 202a;否則,執(zhí)行步驟202b。
[0114] 步驟202a:丟棄編碼包C。
[0115] 步驟202b:將編碼包C的負(fù)載部分加入解碼緩沖區(qū);其中,編碼包C的負(fù)載部分為編 碼包C除去頭部信息的數(shù)據(jù)信息部分。
[0116]步驟203 :對(duì)編碼包C的負(fù)載部分執(zhí)行高斯-約旦消元,若有數(shù)據(jù)包被順序成功解 碼,將成功解碼的數(shù)據(jù)包發(fā)送給上層TCP層。
[0117] 步驟204:向發(fā)送端發(fā)送應(yīng)答消息,所述應(yīng)答消息中攜帶有反饋信息,所述反饋信 息用于使得發(fā)送端確定所述編碼窗口鎖的次數(shù)Ln。
[0118] 在本步驟中,優(yōu)選地,所述應(yīng)答消息中攜帶的反饋信息中包括最老的不可見(jiàn)包的 序列號(hào)Ack. Seq和接收端當(dāng)前欲成功解碼所缺少的數(shù)據(jù)包數(shù)量Ack. loss,以及觸發(fā)當(dāng)前時(shí) 刻的應(yīng)答信息產(chǎn)生的數(shù)據(jù)包的序列號(hào)Ack. tr i gSeq;
[0119] 其中,最老的不可見(jiàn)包的序列號(hào)Ack.Seq用于告知發(fā)送端哪些數(shù)據(jù)包不需要再參 與編碼和重傳。
[0120] 其中,對(duì)于一個(gè)C = Pi+q,且^ = 丨的編碼包,pi為可見(jiàn)包,pi(i>i)為不可見(jiàn) 包,Pi+i為最老的不可見(jiàn)包。
[0121] 其中,所述反饋信息用于使得發(fā)送端確定所述編碼窗口鎖的次數(shù)Ln,包括:
[0122] 發(fā)送端根據(jù)反饋信息中所包含的接收端欲成功解碼所缺少的數(shù)據(jù)包數(shù)量 Ack. loss、以及根據(jù)上一時(shí)刻接收到的應(yīng)答消息中攜帶的反饋信息中所包含的接收端欲成 功解碼所缺少的數(shù)據(jù)包數(shù)量last, loss,以及根據(jù)反饋信息中所包含的用于觸發(fā)當(dāng)前時(shí)刻 的應(yīng)答信息產(chǎn)生的數(shù)據(jù)包的序列號(hào)Ack. trigSeq計(jì)算得到的發(fā)送端在發(fā)送擁有序列號(hào) Ack. trigSeq的數(shù)據(jù)包之后發(fā)送的冗余包數(shù)量Rn,采用下述公式一確定當(dāng)前的編碼窗口鎖 的次數(shù)Ln:
[0123] Ln=max{Ln+Ack. loss-last. loss_Rn,0} 公式一
[0124] 其中,Ack. loss-last, loss表示在兩個(gè)應(yīng)答消息之間出現(xiàn)的新的丟包數(shù)。
[0125] 綜上可知,網(wǎng)絡(luò)編碼層的接收端的數(shù)據(jù)處理過(guò)程如下所示:
[0126] (A)當(dāng)接收端接收到一個(gè)編碼包C時(shí),接收端將按照以下的步驟執(zhí)行:
[0127] 1)從編碼包C中提取編碼系數(shù)向量V,并將編碼系數(shù)向量V加入解碼矩陣,做高斯-約旦消元。如果,消元后的編碼系數(shù)向量V變成全零向量,則編碼包C為線性相關(guān)的數(shù)據(jù)包, 丟棄編碼包C。否則將編碼包C的負(fù)載部分加入解碼緩沖區(qū)。
[0128] 2)對(duì)負(fù)載部分執(zhí)行高斯-約旦消元,若果有包被順序解出,將其交付給上層TCP層。 同時(shí)產(chǎn)生一個(gè)反饋ACK包含最老的不可見(jiàn)包的序列號(hào)Ack.Seq、當(dāng)前解碼矩陣滿秩所缺的編 碼包的數(shù)量Ack. loss(即接收端當(dāng)前欲成功解碼所缺少的數(shù)據(jù)包數(shù)量Ack. loss),以及觸發(fā) 當(dāng)前時(shí)刻的應(yīng)答信息(反饋ACK包)產(chǎn)生的數(shù)據(jù)包的序列號(hào)Ack. tr i gSeq。
[0129] 其中,最老的不可見(jiàn)包的序列號(hào)Ack. Seq用于告知發(fā)送端哪些數(shù)據(jù)包不需要再參 與編碼和重傳。對(duì)于一個(gè)C = Pi+q,且^ = 丨的編碼包,Pi為可見(jiàn)包,為不可見(jiàn) 包,Pi+i為最老的不可見(jiàn)包。
[0130] (B)當(dāng)收到來(lái)自上層TCP層的ACK時(shí),丟棄該TCP層發(fā)送的ACK。由于ACK由網(wǎng)絡(luò)編碼 層產(chǎn)生并返回,由于網(wǎng)絡(luò)編碼層產(chǎn)生的ACK包含了所有需要的信息,因此TCP層的ACK就不需 要了。
[0131]為了驗(yàn)證本發(fā)明提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法(簡(jiǎn)稱FNC算法)的性能, 這里在NS2仿真平臺(tái)上進(jìn)行了對(duì)比試驗(yàn),將本發(fā)明中的FNC算法和其他相關(guān)文獻(xiàn)中的只基于 預(yù)設(shè)補(bǔ)償?shù)腡CP/NC算法以及只基于反饋的V0N算法進(jìn)行了對(duì)比。因?yàn)閂0N只適用于基于RTT 的TCP擁塞控制算法,所以只在Vegas下進(jìn)行了 V0N的實(shí)驗(yàn)測(cè)量,而TCP-FNC和TCPNC均在 Vegas和Reno下作了實(shí)驗(yàn)對(duì)比。
[0132] 為了對(duì)比分析,首先在Vegas下比較了FNC和TCP/NC以及V0N的應(yīng)用層吞吐量 goodput以及平均解碼時(shí)延average decoding delay兩個(gè)性能指標(biāo)。之后在Reno下對(duì)FNC和 TCP/NC比較了相應(yīng)的指標(biāo)。這三個(gè)詳細(xì)的方案特性如下表1:
[0133] 表1方案特性
[0135] 實(shí)驗(yàn)的拓?fù)浣Y(jié)構(gòu)是一個(gè)兩跳的無(wú)線網(wǎng)絡(luò),一個(gè)發(fā)送端一個(gè)接收端以及一個(gè)路由 器,每條鏈路容量均為C。第一條鏈路是有線鏈路并且傳播實(shí)驗(yàn)為10ms。最后一條鏈路是無(wú) 線鏈路,這條鏈路的丟包率為P。這里首先研究了丟包率解碼時(shí)延的影響,此時(shí)設(shè)定帶寬為 固定值1Mbps。最后改變帶寬為10Mbps和20Mbps來(lái)研究帶寬對(duì)解碼時(shí)延的影響。根據(jù)相關(guān)文 獻(xiàn),冗余系數(shù)R的理論值為1/(1-P)。但是根據(jù)有些文獻(xiàn)的實(shí)驗(yàn)結(jié)果表明實(shí)際最優(yōu)的冗余應(yīng) 該微微高于其理論值,所以在實(shí)驗(yàn)時(shí)的時(shí)延中引入了一個(gè)冗余調(diào)整因子a來(lái)設(shè)置本次實(shí)驗(yàn) 時(shí)延中的預(yù)設(shè)冗余值為l+a(R_l)。參數(shù)設(shè)置如下表2:
[0136] 表2參數(shù)設(shè)置
[0138] 多帶寬下實(shí)驗(yàn)結(jié)果如表3所示:
[0139] 表3平均解碼時(shí)延(s)_10M/20M
[0140]
[0141] 從表3可以看出,本發(fā)明提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法(簡(jiǎn)稱FNC算法) 在解碼時(shí)延方面相對(duì)于其他解碼方法(TCPNC算法和V0N算法)具有明顯的優(yōu)勢(shì)。
[0142] 基于上面的分析可知,本申請(qǐng)?zhí)峁┑幕诜答伒木W(wǎng)絡(luò)編碼TCP解碼方法具有如下 優(yōu)勢(shì):
[0143] 1、本發(fā)明提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法結(jié)合了前向預(yù)設(shè)冗余以及基于 反饋的編碼窗口調(diào)整。不僅能夠根據(jù)基本的網(wǎng)絡(luò)環(huán)境產(chǎn)生主動(dòng)補(bǔ)償,還可以基于反饋?zhàn)龀?合理編碼窗口調(diào)整以加速解碼矩陣滿秩,完成解碼。
[0144] 2、本發(fā)明提供的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法能夠很好地應(yīng)對(duì)網(wǎng)絡(luò)狀況的動(dòng) 態(tài)變化,預(yù)設(shè)的冗余因子用來(lái)抵抗網(wǎng)絡(luò)的平均丟包,另外,接收端能夠?qū)⒕W(wǎng)絡(luò)的真實(shí)丟包信 息實(shí)時(shí)地反饋給發(fā)送方。即便網(wǎng)絡(luò)的丟包信息是波動(dòng)的,本發(fā)明也可以根據(jù)實(shí)時(shí)丟包信息 調(diào)整編碼,加速接收方解碼。
[0145] 3、在現(xiàn)有的一種基于反饋的解碼方法中,ACK將丟包信息即解碼端滿秩所需的數(shù) 據(jù)包數(shù)目N告知發(fā)送端。發(fā)送端通過(guò)此反饋信息動(dòng)態(tài)的額外補(bǔ)償N個(gè)數(shù)據(jù)包給解碼端。這類 技術(shù)的編碼窗口包含了所有沒(méi)有被ACK的數(shù)據(jù)包。因此所有的丟包均被編碼所掩蓋。所以這 類技術(shù)只適用于基于RTT的TCP擁塞控制機(jī)制。另外,不像TCP/NC的預(yù)設(shè)補(bǔ)償,這種網(wǎng)絡(luò)編碼 TCP機(jī)制對(duì)丟包的補(bǔ)償必須至少經(jīng)過(guò)一個(gè)RTT。而且一旦在一個(gè)RTT內(nèi)出現(xiàn)丟包,哪怕是只有 一個(gè)丟包,都會(huì)導(dǎo)致這一輪的補(bǔ)償對(duì)成功解碼失效。從而導(dǎo)致更大的解碼時(shí)延。而發(fā)明提供 的基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法,并非是單純的添加冗余。它能夠在補(bǔ)償真實(shí)丟包的情 況下,又不影響接收方對(duì)擁塞的判斷。不僅可以適用于基于RTT的TCP擁塞控制算法,又可以 上適用于基于丟包的擁塞控制算法。
[0146] 本發(fā)明第三個(gè)實(shí)施例還提供了一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼裝置,參見(jiàn)圖4, 包括:更新單元41、確定單元42、判斷單元43和處理單元44;
[0147] 更新單元41,用于在接收到上層傳輸控制協(xié)議TCP層發(fā)送的TCP數(shù)據(jù)包時(shí),根據(jù)當(dāng) 前鏈路丟包率對(duì)當(dāng)前需要發(fā)送的編碼包數(shù)量Sn進(jìn)行更新:
[0148] Sn = Sn+R
[0149] 其中,R為根據(jù)當(dāng)前鏈路丟包率確定的冗余系數(shù),1?=1八1-?),?為當(dāng)前鏈路丟包 率;
[0150] 確定單元42,用于根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋 信息確定當(dāng)前的編碼窗口鎖的次數(shù)Ln;
[0151] 判斷單元43,用于判斷當(dāng)前的編碼窗口鎖的次數(shù)Ln是否為0;
[0152] 處理單元44,用于在所述判斷單元43確定當(dāng)前的編碼窗口鎖的次數(shù)Ln不為0的情 況下,固定編碼窗口,并將編碼窗口內(nèi)的W個(gè)TCP數(shù)據(jù)包按照所述編碼包數(shù)量Lsw」進(jìn)行預(yù)設(shè) 編碼,以及將編碼好的b&」個(gè)數(shù)據(jù)包發(fā)送至接收端;其中,W為編碼窗口的大小。
[0153] 本實(shí)施例所述的裝置可以用于執(zhí)行上述第一個(gè)實(shí)施例所述的方法,其原理和技術(shù) 效果類似,此處不再詳述。
[0154] 本發(fā)明第四個(gè)實(shí)施例還提供了另一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼裝置,參見(jiàn)圖 5,包括:第一消元單元51、判斷單元52、丟棄單元53、第二消元單元54和發(fā)送單元55;
[0155] 第一消元單元51,用于在接收到一個(gè)編碼包C時(shí),從編碼包C中提取編碼系數(shù)向量 V,并將編碼系數(shù)向量V加入解碼矩陣,對(duì)編碼系數(shù)向量V進(jìn)行高斯-約旦消元;
[0156] 判斷單元52,用于判斷消元后的編碼系數(shù)向量V是否為全零向量;
[0157] 丟棄單元53,用于在所述判斷單元確定消元后的編碼系數(shù)向量V為全零向量時(shí),丟 棄編碼包C;
[0158] 第二消元單元54,用于在所述判斷單元確定消元后的編碼系數(shù)向量V不為全零向 量時(shí),將編碼包C的負(fù)載部分加入解碼緩沖區(qū),并對(duì)編碼包C的負(fù)載部分執(zhí)行高斯-約旦消 元;
[0159] 發(fā)送單元55,用于在第二消元單元成功解碼出數(shù)據(jù)包時(shí),將成功解碼出的數(shù)據(jù)包 發(fā)送給上層TCP層;
[0160]所述發(fā)送單元55,還用于向如第三個(gè)實(shí)施例所述的裝置發(fā)送應(yīng)答消息,所述應(yīng)答 消息中攜帶有反饋信息,所述反饋信息用于使得如第三個(gè)實(shí)施例所述的裝置確定所述編碼 窗口鎖的次數(shù)Ln。
[0161] 本實(shí)施例所述的裝置可以用于執(zhí)行上述第二個(gè)實(shí)施例所述的方法,其原理和技術(shù) 效果類似,此處不再詳述。
[0162] 以上實(shí)施例僅用于說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例 對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施 例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或替 換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
【主權(quán)項(xiàng)】
1. 一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼方法,其特征在于,包括: 當(dāng)接收到上層傳輸控制協(xié)議TCP層發(fā)送的TCP數(shù)據(jù)包時(shí),發(fā)送端根據(jù)當(dāng)前鏈路丟包率對(duì) 當(dāng)前需要發(fā)送的編碼包數(shù)量Sn進(jìn)行更新: Sn = Sn+R 其中,R為根據(jù)當(dāng)前鏈路丟包率確定的冗余系數(shù),R=l/(1-P),P為當(dāng)前鏈路丟包率; 根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋信息確定當(dāng)前的編碼 窗口鎖的次數(shù)Ln; 若當(dāng)前的編碼窗口鎖的次數(shù)Ln不為O,則固定編碼窗口,并將編碼窗口內(nèi)的W個(gè)TCP數(shù)據(jù) 包按照所述編碼包數(shù)量b&」進(jìn)行預(yù)設(shè)編碼,以及將編碼好的個(gè)數(shù)據(jù)包發(fā)送至接收端; 其中,W為編碼窗口的大小。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,若當(dāng)前的編碼窗口鎖的次數(shù)Ln為0,則滑動(dòng) 編碼窗口使之包含最近接收到的不超過(guò)W個(gè)TCP數(shù)據(jù)包,并將編碼窗口內(nèi)的TCP數(shù)據(jù)包按照 所述編碼包數(shù)量[_辦」進(jìn)行預(yù)設(shè)編碼,以及將編碼好的bSk」個(gè)數(shù)據(jù)包發(fā)送至接收端。3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述根據(jù)當(dāng)前時(shí)刻接收到的由接收端 發(fā)送的應(yīng)答消息中攜帶的反饋信息確定當(dāng)前的編碼窗口鎖的次數(shù)Ln,包括: 根據(jù)當(dāng)前時(shí)刻接收到的應(yīng)答消息中攜帶的反饋信息中所包含的接收端欲成功解碼所 缺少的數(shù)據(jù)包數(shù)量Ack. loss、上一時(shí)刻接收到的應(yīng)答消息中攜帶的反饋信息中所包含的接 收端欲成功解碼所缺少的數(shù)據(jù)包數(shù)量last, loss以及根據(jù)當(dāng)前時(shí)刻接收到的應(yīng)答消息中攜 帶的反饋信息中所包含的用于觸發(fā)當(dāng)前時(shí)刻的應(yīng)答信息產(chǎn)生的數(shù)據(jù)包的序列號(hào) Ack. trigSeq計(jì)算得到的發(fā)送端在發(fā)送擁有序列號(hào)Ack. trigSeq的數(shù)據(jù)包之后發(fā)送的冗余 包數(shù)量Rn,采用下述公式一確定當(dāng)前的編碼窗口鎖的次數(shù)Ln: Ln=max{Ln+Ack. loss-last. Ioss-RnjOl 公式一 其中,Ack. loss-last, loss表示在兩個(gè)應(yīng)答消息之間出現(xiàn)的新的丟包數(shù)。4. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,在將編碼好的個(gè)數(shù)據(jù)包發(fā)送至接收 端之后,所述方法還包括更新Ln為:5. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,在將編碼好的L&7」個(gè)數(shù)據(jù)包發(fā)送至接收 端之后,所述方法還包括更新Sn為: Sn - 〇6. 根據(jù)權(quán)利要求1所述的方法,其特征在于,如果接收到的上層TCP層發(fā)送的TCP數(shù)據(jù)包 為重傳包,則直接將該TCP數(shù)據(jù)包向接收端發(fā)送[_*&」次。7. -種基于權(quán)利要求1~6中任一種方法的網(wǎng)絡(luò)編碼TCP解碼方法,其特征在于,包括: 當(dāng)接收端接收到一個(gè)編碼包C時(shí),接收端從編碼包C中提取編碼系數(shù)向量V,并將編碼系 數(shù)向量V加入解碼矩陣,對(duì)編碼系數(shù)向量V進(jìn)行高斯-約旦消元; 若消元后的編碼系數(shù)向量V變成全零向量,則丟棄編碼包C,否則將編碼包C的負(fù)載部分 加入解碼緩沖區(qū);其中,編碼包C的負(fù)載部分為編碼包C除去頭部信息的數(shù)據(jù)信息部分; 對(duì)編碼包C的負(fù)載部分執(zhí)行高斯-約旦消元,若有數(shù)據(jù)包被順序成功解碼,將成功解碼 的數(shù)據(jù)包發(fā)送給上層TCP層; 向發(fā)送端發(fā)送應(yīng)答消息,所述應(yīng)答消息中攜帶有反饋信息,所述反饋信息用于使得發(fā) 送端確定所述編碼窗口鎖的次數(shù)Ln。8. 根據(jù)權(quán)利要求7所述的方法,其特征在于,所述應(yīng)答消息中攜帶的反饋信息中包括最 老的不可見(jiàn)包的序列號(hào)Ack. Seq和接收端當(dāng)前欲成功解碼所缺少的數(shù)據(jù)包數(shù)量Ack. loss, 以及觸發(fā)當(dāng)前時(shí)刻的應(yīng)答信息產(chǎn)生的數(shù)據(jù)包的序列號(hào)Ack. trigSeq; 其中,最老的不可見(jiàn)包的序列號(hào)Ack. Seq用于告知發(fā)送端哪些數(shù)據(jù)包不需要再參與編 碼和重傳;對(duì)于一個(gè)C = Pi+q,fA編碼包,Pi為可見(jiàn)包,Pi (l>i)為不可見(jiàn)包,Pi+i 為最老的不可見(jiàn)包,3,為編碼系數(shù)。9. 一種基于反饋的網(wǎng)絡(luò)編碼TCP解碼裝置,其特征在于,包括: 更新單元,用于在接收到上層傳輸控制協(xié)議TCP層發(fā)送的TCP數(shù)據(jù)包時(shí),根據(jù)當(dāng)前鏈路 丟包率對(duì)當(dāng)前需要發(fā)送的編碼包數(shù)量Sn進(jìn)行更新: Sn = Sn+R 其中,R為根據(jù)當(dāng)前鏈路丟包率確定的冗余系數(shù),R=l/(1-P),P為當(dāng)前鏈路丟包率; 確定單元,用于根據(jù)當(dāng)前時(shí)刻接收到的由接收端發(fā)送的應(yīng)答消息中攜帶的反饋信息確 定當(dāng)前的編碼窗口鎖的次數(shù)Ln; 判斷單元,用于判斷當(dāng)前的編碼窗口鎖的次數(shù)Ln是否為0; 處理單元,用于在所述判斷單元確定當(dāng)前的編碼窗口鎖的次數(shù)Ln不為0的情況下,固定 編碼窗口,并將編碼窗口內(nèi)的W個(gè)TCP數(shù)據(jù)包按照所述編碼包數(shù)量1/?」進(jìn)行預(yù)設(shè)編碼,以及 將編碼好的個(gè)數(shù)據(jù)包發(fā)送至接收端;其中W為編碼窗口的大小。10. -種基于權(quán)利要求9所述裝置的基于反饋的網(wǎng)絡(luò)編碼TCP解碼裝置,其特征在于,包 括: 第一消元單元,用于在接收到一個(gè)編碼包C時(shí),從編碼包C中提取編碼系數(shù)向量V,并將 編碼系數(shù)向量V加入解碼矩陣,對(duì)編碼系數(shù)向量V進(jìn)行高斯-約旦消元; 判斷單元,用于判斷消元后的編碼系數(shù)向量V是否為全零向量; 丟棄單元,用于在所述判斷單元確定消元后的編碼系數(shù)向量V為全零向量時(shí),丟棄編碼 包C; 第二消元單元,用于在所述判斷單元確定消元后的編碼系數(shù)向量V不為全零向量時(shí),將 編碼包C的負(fù)載部分加入解碼緩沖區(qū),并對(duì)編碼包C的負(fù)載部分執(zhí)行高斯-約旦消元; 發(fā)送單元,用于在第二消元單元成功解碼出數(shù)據(jù)包時(shí),將成功解碼出的數(shù)據(jù)包發(fā)送給 上層TCP層; 所述發(fā)送單元,還用于向如權(quán)利要求9所述的裝置發(fā)送應(yīng)答消息,所述應(yīng)答消息中攜帶 有反饋信息,所述反饋信息用于使得如權(quán)利要求9所述的裝置確定所述編碼窗口鎖次數(shù)Ln。
【文檔編號(hào)】H04W28/02GK106027208SQ201610282604
【公開(kāi)日】2016年10月12日
【申請(qǐng)日】2016年4月29日
【發(fā)明人】孫繼燕, 張棪, 唐鼎, 張舒黎, 陳鑫
【申請(qǐng)人】中國(guó)科學(xué)院信息工程研究所
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1