專利名稱:一種對抗鏈路亂序的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通訊領(lǐng)域,尤其涉及一種對抗鏈路亂序的方法。
技術(shù)背景傳輸控制協(xié)議(Transmission Control Protocol, TCP )和流量控制傳輸協(xié) 議(Stream Control Transmission Protocol, SCTP)是當(dāng)前最廣泛應(yīng)用的可靠 傳輸協(xié)議,不但保證了報文被可靠有序地傳輸,同時還具有良好的網(wǎng)絡(luò)擁塞 控制和擁塞恢復(fù)機(jī)制。但是,如果網(wǎng)絡(luò)中存在報文亂序(例如網(wǎng)絡(luò)中存在多 路徑的情形),可能會導(dǎo)致TCP和SCTP啟動快速重傳(Fast Retransmit)。 選擇確認(rèn)(SACK, Selective Acknowledgement)算法被普遍應(yīng)用于可靠傳輸 協(xié)議中,SCTP協(xié)議規(guī)定其作為SCTP的確認(rèn)方式(rfc2960) , TCP協(xié)議規(guī) 定其作為TCP的可選確認(rèn)方式(rfc2883 )。如圖l所示,是現(xiàn)有技術(shù)中亂序?qū)е碌目焖僦貍鲌笪臅r序圖。如果發(fā)送 端幾乎在同一時刻連續(xù)發(fā)送了 5個報文,這5個報文也幾乎在同一時刻到達(dá) 了接收端。但由于鏈路亂序,報文l最后一個到達(dá);接收端收到了報文2、 3、 4、 5后,因?yàn)閳笪膌尚未到達(dá),會立即回應(yīng)帶缺失塊(GapAckBlocks) 的SACK;按照快速重傳的算法規(guī)定,發(fā)送端連續(xù)收到了 4個對報文1的缺 失指示,啟動快速重傳,重發(fā)了報文l。這樣接收端便會收到2次報文1, 而實(shí)際上第一個報文很快就到達(dá)了接收端,重發(fā)報文其實(shí)是沒有必要的,也 就是說報文l被不必要的重傳了。這是快速重傳算法本身的不足,即無法區(qū) 分亂序和真正的丟包。另一方面,雖然接收端收到重復(fù)報文后,會在確認(rèn)報 文SACK中設(shè)置duplicate字段,但目前并無資料說明該字段的使用場景, 即發(fā)送端并不知道如何處理SACK中的duplicate字段。TCP和SCTP啟動快速重傳(Fast Retransmit)實(shí)際上是不必要的,因 為報文并未真正丟失,時延也沒有問題,報文亂序可能只是網(wǎng)絡(luò)中存在著多條通路,而非真正的鏈路質(zhì)量問題。這種情形下啟動快速重傳不但增加了不 必要的網(wǎng)絡(luò)負(fù)荷,同時也會因?yàn)檎`判造成的擁塞窗口縮小而影響了發(fā)送速率。發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種對抗鏈路亂序的方法,解決在報文 亂序的情況下網(wǎng)絡(luò)重傳的問題。技術(shù)方案如下一種對抗鏈路亂序的方法,步驟包括(1) 在快速重傳算法中設(shè)定"快速重傳啟動門限,,;(2) 當(dāng)發(fā)生快速重傳或者超時重傳時,發(fā)送端對所述"快速重傳啟動 門限"的值進(jìn)行修改;(3) 當(dāng)某個報文的丟失指示累計(jì)值超過所述"快速重傳啟動門限"的 值時,對該報文進(jìn)行快速重傳。進(jìn)一步,步驟(1)中,當(dāng)基于可靠傳輸協(xié)議建鏈后,所述"快速重傳 啟動門限"的默i人值至少為4。進(jìn)一步,步驟(2)中,當(dāng)發(fā)生快速重傳時,對重傳報文的傳輸序號TSN 進(jìn)行記錄,將收到的所述SACK中duplicate字段的TSN與本地記錄的TSN 進(jìn)行比較,相等時,則增加所述"快速重傳啟動門限"的值;當(dāng)發(fā)生超時重 傳時,降低所述"快速重傳啟動門限"的值。進(jìn)一步,步驟(2)中,如果所述收到的SACK的duplicate字段中所有 的TSN均是由快速重傳引起的,則增加所述"快速重傳啟動門限,,的值。進(jìn)一步,步驟(2)中,記錄本連接最近一次重傳的原因,如果所述最 近一次重傳是快速重傳,則對所述"快速重傳啟動門限"加l。進(jìn)一步,步驟(2)中,對于超時重傳則降低所述"快速重傳啟動門限,, 的值,將所述"快速重傳啟動門限"恢復(fù)成所述默認(rèn)值;或者將所述"快速 重傳啟動門限,,變?yōu)楫?dāng)前值的一半,并且不小于所述默認(rèn)值。進(jìn)一步,步驟(l)中,所述可靠傳輸協(xié)議為傳輸控制協(xié)議TCP或者流 量控制傳輸協(xié)議SCTP。進(jìn)一步,步驟(2)中,當(dāng)在一定時間內(nèi)未發(fā)生所述快速重傳或者未收 到帶有所述duplicate字段的SACK,則降低所述"快速重傳啟動門限"的值。本發(fā)明基于可靠傳輸協(xié)議(包括SCTP和TCP等)利用SACK中的 duplicate字段對抗鏈路亂序,解決了在報文亂序的情況下網(wǎng)絡(luò)重傳的問題, 同時提高傳輸速率。
圖l是現(xiàn)有技術(shù)中亂序?qū)е碌目焖僦貍鲌笪臅r序圖;圖2是本發(fā)明中增大快速重傳啟動門限后的報文亂序時序圖;圖3是本發(fā)明中快速重傳啟動門限改變前后超時重傳的時序圖。
具體實(shí)施方式
快速重傳(Fast Retransmit)算法規(guī)定,如果報文被4次通告缺失,則 啟動快速重傳對該l艮文進(jìn)行重傳,本發(fā)明將這個次^:稱為"快速重傳啟動門 限",同時將其作為可變參量,并可以動態(tài)調(diào)整。1、 當(dāng)基于可靠傳輸協(xié)議(TCP或SCTP)建鏈后,將"快速重傳啟動 門限"默認(rèn)值設(shè)置為4。2、 當(dāng)發(fā)生快速重傳后,對重傳報文的傳輸序號(TSN, Transmission Sequence Number)進(jìn)行記錄。如果收到的SACK中帶有duplicate字段,則 將duplicate字段的TSN與本地記錄的TSN進(jìn)行比較。如果SACK的duplicate 字段中所有的TSN均是由快速重傳引起的,則對"快速重傳啟動門限"值 加1。3、 當(dāng)發(fā)生超時重傳時,降低"快速重傳啟動門限"的值。"快速重傳啟動門限"調(diào)整尺度只與攜帶有duplicate字段的SACK數(shù) 目有關(guān),而與duplicate字段中的TSN數(shù)目無關(guān)。因?yàn)槭盏綆в衐uplicate字 段的SACK時,對應(yīng)的數(shù)據(jù)報文通常都已經(jīng)從發(fā)送緩存中釋放,所以記錄每個快速重傳報文的TSN實(shí)現(xiàn)上比較復(fù)雜,可以用一種筒單的方法近似即 記錄本連接最近一次重傳的原因,如果收到了帶duplicate字段的SACK,且 最近一次重傳是快速重傳,則對"快速重傳啟動門限"力口l。對于超時重傳則降低"快速重傳啟動門限"的值,可以將"快速重傳啟 動門限"恢復(fù)成默認(rèn)值,也可以將其變?yōu)楫?dāng)前值的一半,但不能小于默認(rèn)值。 也可以通過其它的方式降低"快速重傳啟動門限",例如,如果長時間未發(fā) 生快速重傳,或者長時間未收到帶有duplicate字段的SACK的情況下,可 以考慮降低"快速重傳啟動門限,,。圖2是本發(fā)明中增大快速重傳啟動門限后的報文亂序時序圖,下面結(jié)合 實(shí)施例和附圖來說明本發(fā)明的工作原理。延承圖1的時序,發(fā)送端在收到了帶有duplicate字段的SACK后,將 其"快速重傳啟動門限"值加l,門限值變?yōu)?。再次連續(xù)發(fā)送5個才良文, 同樣出現(xiàn)了亂序,報文1后于報文2、 3、 4、 5到達(dá)。當(dāng)報文2、 3、 4、 5到達(dá)時,接收端會因?yàn)槲词盏綀笪?而立即回應(yīng)帶 有缺失塊的SACK;發(fā)送端收到SACK后,記錄報文1的丟失次數(shù);報文5 的確認(rèn)到達(dá)后,報文1丟失指示的累計(jì)值增加為4,但由于未達(dá)到"快速重 傳啟動門限",不啟動快速重傳;收到報文l的確認(rèn)后,發(fā)送端清除了報文 1的丟失指示值。至此,所有發(fā)送報文得到了確認(rèn),無需再啟動重傳??梢钥闯?,雖然發(fā) 送場景和網(wǎng)絡(luò)狀況未改變,但由于調(diào)整了 "快速重傳啟動門限",避免了不 必要的重傳。當(dāng)然如果發(fā)送端流量增大, 一次發(fā)送了更多的報文,仍有可能 誤啟動快速重傳;但啟動快速重傳會導(dǎo)致SACK中攜帶duplicate字段(如 圖l所示),采用本發(fā)明的算法后,將觸發(fā)"快速重傳啟動門限"的值進(jìn)一 步的提升,最終報文達(dá)到傳輸亂序卻不需要重傳的效果。圖3是本發(fā)明中快速重傳啟動門限改變前后超時重傳的時序圖。"快速重傳啟動門限"并非越大越好,提高"快速重傳啟動門限,,會增 大超時重傳發(fā)生的可能。如果報文真的丟失,當(dāng)"快速重傳啟動門限,,的值 為4時,會在收到報文5的確認(rèn)后立即啟動快速重傳,如圖3右圖;但如果啟動門限為5,因?yàn)槿笔е甘緵]有達(dá)到門限值而未啟動快速重傳,如果此后 再沒有新的數(shù)據(jù)發(fā)送,則會導(dǎo)致超時重傳(timeout retransmission),如圖3 左圖。所以如果發(fā)生超時重傳,則說明鏈路質(zhì)量確實(shí)出現(xiàn)了問題,應(yīng)該及時 降低快速重傳啟動門限,降低再次發(fā)生超時重傳的可能。綜上所述,本發(fā)明通過甄別亂序和丟包,動態(tài)地調(diào)節(jié)"快速重傳啟動門 限,,,可以有效地避免亂序造成的快速重傳,同時也可以在報文丟失后,有 效恢復(fù),具有更好的適應(yīng)性和流量控制效果。
權(quán)利要求
1、一種對抗鏈路亂序的方法,其特征在于,包括以下步驟(1)在快速重傳算法中設(shè)定“快速重傳啟動門限”;(2)當(dāng)發(fā)生快速重傳或者超時重傳時,發(fā)送端對所述“快速重傳啟動門限”的值進(jìn)行修改;(3)當(dāng)某個報文的丟失指示累計(jì)值超過所述“快速重傳啟動門限”的值時,對該報文進(jìn)行快速重傳。
2、 如權(quán)利要求1所述的對抗鏈路亂序的方法,其特征在于,步驟(l) 中,當(dāng)基于可靠傳輸協(xié)議建鏈后,所述"快速重傳啟動門限"的默認(rèn)值至少 為4。
3、 如權(quán)利要求1所述的對抗鏈路亂序的方法,其特征在于,步驟(2) 中,當(dāng)發(fā)生快速重傳時,對重傳報文的傳輸序號TSN進(jìn)行記錄,將收到的 確認(rèn)報文SACK中duplicate字段的TSN與本地記錄的TSN進(jìn)行比較,相等 時,則增加所述"快速重傳啟動門限"的值;當(dāng)發(fā)生超時重傳時,降低所述"快速重傳啟動門限"的值。
4、 如權(quán)利要求3所述的對抗鏈路亂序的方法,其特征在于,步驟(2) 中,如果所述收到的SACK的duplicate字段中所有的TSN均是由快速重傳 引起的,則增加所述"快速重傳啟動門限"的值。
5、 如權(quán)利要求1所述的對抗鏈路亂序的方法,其特征在于,步驟(2) 中,記錄本連接最近一次重傳的原因,如果所述最近一次重傳是快速重傳, 則對所述"快速重傳啟動門限"加l。
6、 如權(quán)利要求1所述的對抗鏈路亂序的方法,其特征在于,步驟(2) 中,對于超時重傳,則降低所述"快速重傳啟動門限,,的值,將所述"快速 重傳啟動門限"恢復(fù)成所述默認(rèn)值;或者將所述"快速重傳啟動門限"變?yōu)?當(dāng)前值的一半,并且不小于所述默認(rèn)值。
7、 如權(quán)利要求1所述的對抗鏈路亂序的方法,其特征在于,步驟(l)中,所述可靠傳輸協(xié)議為傳輸控制協(xié)議TCP或者流量控制傳輸協(xié)議SCTP。
8、如權(quán)利要求1所述的對抗鏈路亂序的方法,其特征在于,步驟(2) 中,當(dāng)在一定時間內(nèi)未發(fā)生所述快速重傳或者未收到帶有所述duplicate字 段的SACK,則降低所述"快速重傳啟動門限"的值。
全文摘要
本發(fā)明公開了一種對抗鏈路亂序的方法,應(yīng)用于數(shù)據(jù)通訊領(lǐng)域,包括以下步驟在快速重傳算法中設(shè)定“快速重傳啟動門限”;當(dāng)發(fā)生快速重傳或者超時重傳時,發(fā)送端對所述“快速重傳啟動門限”的值進(jìn)行修改;當(dāng)某個報文的丟失指示累計(jì)值超過所述“快速重傳啟動門限”的值時,對該報文進(jìn)行快速重傳。本發(fā)明技術(shù)方案解決了在報文亂序的情況下網(wǎng)絡(luò)重傳的問題,同時提高了傳輸速率。
文檔編號H04L29/06GK101227478SQ200810007170
公開日2008年7月23日 申請日期2008年2月2日 優(yōu)先權(quán)日2008年2月2日
發(fā)明者閆新成 申請人:中興通訊股份有限公司