本發(fā)明涉及通訊技術領域,特別是涉及一種基于TCP的數(shù)據(jù)傳輸方法及裝置。
背景技術:
在無線網(wǎng)絡中,基于TCP(Transmission Control Protocol,傳輸控制協(xié)議)的數(shù)據(jù)傳輸一般存在較高丟包率、亂序率和延遲抖動,導致TCP發(fā)送端常常收到來自接收端的多次重復ACK而進行數(shù)據(jù)包的快速重傳,或者由于重傳定時器超時進行數(shù)據(jù)包的超時重傳。不僅如此,由于數(shù)據(jù)包沒有完全到達對端,發(fā)送端還會認為此時網(wǎng)絡狀態(tài)擁塞,因而劇烈降低擁塞窗口,而以較小的報文發(fā)送速率進行數(shù)據(jù)重傳。
然而,大多數(shù)情況下,數(shù)據(jù)包只是由于網(wǎng)絡傳輸穩(wěn)定性的原因延遲到達接收端,并非真正發(fā)生了網(wǎng)絡擁塞,發(fā)送端不必要地降低擁塞窗口會不必要地降低數(shù)據(jù)傳輸速度和帶寬利用率。
針對TCP擁塞窗口常常不必要地減小,從而降低了數(shù)據(jù)傳輸速度和帶寬利用率的問題,現(xiàn)有技術中并無有效的解決方案。
技術實現(xiàn)要素:
本發(fā)明要解決的技術問題是提供一種基于TCP的數(shù)據(jù)傳輸方法及裝置,用以解決現(xiàn)有技術中TCP擁塞窗口不必要地減小,大大降低數(shù)據(jù)傳輸速度和帶寬利用率的問題。
一方面,本發(fā)明提供一種基于TCP的數(shù)據(jù)傳輸方法,包括:發(fā)送端設備 在向接收端設備進行數(shù)據(jù)重傳的過程中,統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù);所述發(fā)送端設備獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù);數(shù)據(jù)重傳結束后,在所述接收總字節(jié)數(shù)大于或等于所述發(fā)送總字節(jié)數(shù)的情況下,發(fā)送端設備確認網(wǎng)絡未擁塞,使用數(shù)據(jù)重傳之前的報文發(fā)送參數(shù)發(fā)送報文。
可選的,所述發(fā)送端設備在向接收端設備進行數(shù)據(jù)重傳的過程中,統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù)包括:所述發(fā)送端設備在向接收端設備進行數(shù)據(jù)重傳的過程中,將所有重傳報文的字節(jié)數(shù)進行累加。
可選的,所述發(fā)送端設備獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù)包括:所述發(fā)送端設備接收所述接收端設備的接收確認消息,所述接收確認消息中攜帶所述接收端收到的重復報文的起始序列號和結束序列號;所述發(fā)送端設備根據(jù)所述結束序列號與所述起始序列號之差,確定所述接收確認消息對應的報文的字節(jié)數(shù);所述發(fā)送端設備將各所述接收確認消息對應的報文的字節(jié)數(shù)相累加,以獲取所述接收總字節(jié)數(shù)。
可選的,所述報文發(fā)送參數(shù)包括擁塞窗口和慢啟動門限。
可選的,所述數(shù)據(jù)重傳的過程包括:從一次快速重傳開始到所述快速重傳結束;或者從一次超時重傳開始到所述超時重傳結束。
另一方面,本發(fā)明還提供一種基于TCP的數(shù)據(jù)傳輸裝置,包括:統(tǒng)計單元,用于在向接收端設備進行數(shù)據(jù)重傳的過程中,統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù);獲取單元,用于獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù);確認和發(fā)送單元,用于數(shù)據(jù)重傳結束后,在所述接收總字節(jié)數(shù)大于或等于所述發(fā)送總字節(jié)數(shù)的情況下,確認網(wǎng)絡未擁塞,使用數(shù)據(jù)重傳之前的報文發(fā)送參數(shù)發(fā)送報文。
可選的,所述統(tǒng)計單元,具體用于在向所述接收端設備進行數(shù)據(jù)重傳的過程中,將所有重傳報文的字節(jié)數(shù)進行累加。
可選的,所述獲取單元包括:接收模塊,用于接收所述接收端設備發(fā)送的接收確認消息,所述接收確認消息中攜帶所述接收端收到的重復報文的起始序 列號和結束序列號;確定模塊,用于根據(jù)所述結束序列號與所述起始序列號之差,確定所述接收確認消息對應的報文的字節(jié)數(shù);累加模塊,用于將所述確定模塊確定的各所述接收確認消息對應的報文的字節(jié)數(shù)相累加,以獲取所述接收總字節(jié)數(shù)。
可選的,所述報文發(fā)送參數(shù)包括擁塞窗口和慢啟動門限。
可選的,所述數(shù)據(jù)重傳的過程包括:從一次快速重傳開始到所述快速重傳結束;或者從一次超時重傳開始到所述超時重傳結束。
本發(fā)明實施例提供的基于TCP的數(shù)據(jù)傳輸方法和裝置,發(fā)送端設備在向接收端設備進行數(shù)據(jù)重傳的過程中,能夠統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù),并獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù),數(shù)據(jù)重傳結束后,在所述接收總字節(jié)數(shù)大于或等于所述發(fā)送總字節(jié)數(shù)的情況下,說明所有重發(fā)的報文接收端都已經(jīng)收到,網(wǎng)絡并未擁塞,所以使用數(shù)據(jù)重傳之前的報文發(fā)送參數(shù)發(fā)送報文。這樣,在TCP數(shù)據(jù)傳輸過程中,即使發(fā)生了數(shù)據(jù)重傳,發(fā)送端設備也會通過比較發(fā)送總字節(jié)數(shù)與接收總字節(jié)數(shù)進一步確定是否真的發(fā)生了網(wǎng)絡擁塞并使用,從而避免了報文發(fā)送參數(shù)不必要地減小,有效提高了數(shù)據(jù)傳輸速度和帶寬利用率。
附圖說明
圖1是本發(fā)明實施例提供的基于TCP的數(shù)據(jù)傳輸方法的一種流程圖;
圖2是本發(fā)明實施例提供的基于TCP的數(shù)據(jù)傳輸方法的另一種流程圖;
圖3是本發(fā)明實施例提供的基于TCP的數(shù)據(jù)傳輸方法的又一種流程圖;
圖4是本發(fā)明實施例提供的基于TCP的數(shù)據(jù)傳輸裝置的一種結構示意圖。
具體實施方式
以下結合附圖對本發(fā)明進行詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不限定本發(fā)明。
如圖1所示,本發(fā)明實施例提供一種基于TCP的數(shù)據(jù)傳輸方法,包括:
S11,發(fā)送端設備在向接收端設備進行數(shù)據(jù)重傳的過程中,統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù);
S12,所述發(fā)送端設備獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù);
S13,數(shù)據(jù)重傳結束后,在所述接收總字節(jié)數(shù)大于或等于所述發(fā)送總字節(jié)數(shù)的情況下,發(fā)送端設備確認網(wǎng)絡未擁塞,使用數(shù)據(jù)重傳之前的報文發(fā)送參數(shù)發(fā)送報文。
本發(fā)明實施例提供的基于TCP的數(shù)據(jù)傳輸方法,發(fā)送端設備在向接收端設備進行數(shù)據(jù)重傳的過程中,能夠統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù),并獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù),數(shù)據(jù)重傳結束后,在所述接收總字節(jié)數(shù)大于或等于所述發(fā)送總字節(jié)數(shù)的情況下,說明所有重發(fā)的報文接收端都已經(jīng)收到,這種收包概率說明網(wǎng)絡并未擁塞,所以使用數(shù)據(jù)重傳之前的報文發(fā)送參數(shù)發(fā)送報文。這樣,在TCP數(shù)據(jù)傳輸過程中,即使發(fā)生了數(shù)據(jù)重傳,發(fā)送端設備也會通過比較發(fā)送總字節(jié)數(shù)與接收總字節(jié)數(shù)進一步確定是否真的發(fā)生了網(wǎng)絡擁塞,從而避免了報文發(fā)送參數(shù)不必要地減小,有效提高了數(shù)據(jù)傳輸速度和帶寬利用率。
可選的,報文發(fā)送參數(shù)為發(fā)送端設備進行報文發(fā)送時的一些參數(shù)設置,可以包括擁塞窗口和慢啟動門限等。其中,擁塞窗口為在一個RTT((Round-Trip Time,往返時延)內可以最多發(fā)送的數(shù)據(jù)包數(shù),是發(fā)送端設備根據(jù)發(fā)送端根據(jù)網(wǎng)絡的擁塞程度預設的。而慢啟動門限則表示發(fā)送端設備報文發(fā)送報文速率增長的一個拐點。具體來說,最初的TCP在連接建立成功后會向網(wǎng)絡中發(fā)送大量的數(shù)據(jù)包,這樣很容易導致網(wǎng)絡中路由器緩存空間耗盡,從而發(fā)生擁塞。因此新建立的連接不能夠一開始就大量發(fā)送數(shù)據(jù)包,而只能根據(jù)網(wǎng)絡情況逐步增加每次發(fā)送的數(shù)據(jù)量,以避免擁塞現(xiàn)象的發(fā)生。發(fā)送端設備發(fā)送報文的速率增長的拐點即為慢啟動門限。
一般的,網(wǎng)絡狀況良好的情況下,發(fā)送端TCP會以較高的報文發(fā)送參數(shù),如擁塞窗口和慢啟動門限等,進行報文發(fā)送。但當協(xié)議棧進入快速重傳或超時重傳時,發(fā)送端設備會認為發(fā)生了網(wǎng)絡擁塞而以較小的報文發(fā)送參數(shù)進行數(shù)據(jù)重傳。但很多情況下,并非真正發(fā)生了網(wǎng)絡擁塞,因此降低報文發(fā)送參數(shù)很可能是沒必要的。為了進一步鑒別是否真正發(fā)生了網(wǎng)絡擁塞,發(fā)送端設備可以先記錄下數(shù)據(jù)重傳之前的報文發(fā)送參數(shù),對數(shù)據(jù)重傳過程中發(fā)送和接收的數(shù)據(jù)流量進行比較。
可選的,步驟S11中,發(fā)送端設備在向接收端設備進行數(shù)據(jù)重傳的過程中,統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù)可包括:發(fā)送端設備在向接收端設備進行數(shù)據(jù)重傳的過程中,將所有重傳報文的字節(jié)數(shù)進行累加。例如,在本發(fā)明的一個實施例中,發(fā)送端設備需要向接收端設備重傳數(shù)據(jù)包3、數(shù)據(jù)包4、數(shù)據(jù)包5,假如數(shù)據(jù)包3的大小為1024字節(jié),數(shù)據(jù)包4大小為4096字節(jié),數(shù)據(jù)包5大小為516字節(jié),則本次數(shù)據(jù)重傳過程中,重傳報文的發(fā)送總字節(jié)數(shù)為1024+4096+516=5636字節(jié)。
以上,發(fā)送端設備統(tǒng)計了在一次數(shù)據(jù)重傳過程中,發(fā)送的重傳報文的總字節(jié)數(shù)。而對于接收端收到的重復報文的總字節(jié)數(shù),發(fā)送端設備可以通過接收端設備反饋的接收報文消息來獲取。具體的,在步驟S12中,發(fā)送端設備獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù)可包括:
所述發(fā)送端設備接收所述接收端設備的接收確認消息,所述接收確認消息中攜帶所述接收端收到的重復報文的起始序列號和結束序列號;
所述發(fā)送端設備根據(jù)所述結束序列號與所述起始序列號之差,確定所述接收確認消息對應的報文的字節(jié)數(shù);
所述發(fā)送端設備將各所述接收確認消息對應的報文的字節(jié)數(shù)相累加,以獲取所述接收總字節(jié)數(shù)。
舉例說明,在本發(fā)明的一個實施例中,TCP接收端在收到報文后,會向發(fā)送端設備反饋接收確認消息,例如ACK報文。發(fā)送端設備對每個到來的ACK 報文檢測其中是否攜帶D-SACK(Duplicate Selective Ackowledgement,重復選擇確認)選項。其中,D-SACK是RFC2883提出的一種對TCP的SACK選項的擴展標準,允許在TCP的第一個SACK塊攜帶接收端收到的重復報文的起始序列號和結束序列號。如果檢測到ACK報文中攜帶D-SACK選項,則提取D-SACK選項中攜帶的接收端收到的重復報文的起始序列號和結束序列號,二者相減得到接收端收到的重復報文的字節(jié)數(shù),并將每次ACK報文反饋的重復報文字節(jié)數(shù)累加到D-SACK確認的字節(jié)數(shù)變量。這個過程持續(xù)到本次數(shù)據(jù)重傳結束,從而得到接收端設備收到的重復報文的接收總字節(jié)數(shù)。
需要說明的是,所述數(shù)據(jù)重傳的過程可以為從一次快速重傳開始到所述快速重傳結束,也就是發(fā)送端設備從連續(xù)接收到預設次數(shù)(例如3次)重復ACK而啟動快送重傳起,到本次快速重傳結束退出recovery狀態(tài)止;或者從一次超時重傳開始到所述超時重傳結束,也就是從發(fā)送端設備的重傳定時器超時進入超時重傳狀態(tài)起,到本次超時重傳結束退出recovery狀態(tài)止。
在步驟S13中,在一次數(shù)據(jù)重傳結束后,可以將接收總字節(jié)數(shù)與發(fā)送總字節(jié)數(shù)進行比較,如果接收總字節(jié)數(shù)大于或等于發(fā)送總字節(jié)數(shù),說明本次的重傳的報文接收端全部收到了至少2次,網(wǎng)絡情況良好,并未發(fā)生擁塞,沒有必要按照網(wǎng)絡擁塞的應對措施調低報文發(fā)送參數(shù),因此可以恢復使用數(shù)據(jù)重傳之前記錄的報文發(fā)送參數(shù)繼續(xù)發(fā)送報文,有效提高了網(wǎng)絡的數(shù)據(jù)傳輸速度和帶寬利用率。
下面通過具體實施例對本發(fā)明提供的基于TCP的數(shù)據(jù)傳輸方法進行詳細說明。
圖2所示為TCP發(fā)送端設備發(fā)送報文的處理流程,圖3所示為TCP發(fā)送端設備接收報文的處理流程。
如圖2所示,TCP發(fā)送端設備進行報文發(fā)送時,主要包括如下步驟:
201、若發(fā)送端收到3次重復ACK,啟動快送重傳或者由于重傳定時器超時而進入超時重傳狀態(tài);
202、清零重傳字節(jié)數(shù)累計變量和D-SACK確認字節(jié)數(shù)累計變量;
203、記錄下當前的擁塞窗口和慢啟動門限,同時將該記錄值設置為合法;
204、減小擁塞窗口和慢啟動門限,從發(fā)送隊列選擇報文發(fā)送;
205、對每一個發(fā)送的報文,檢查是否為重傳報文;如果是,執(zhí)行步驟206,如果否執(zhí)行步驟207;
206、累計重傳報文的字節(jié)數(shù);
207、執(zhí)行TCP協(xié)議原有流程。
如圖3所示,TCP發(fā)送端設備進行報文接收時,主要包括如下步驟:
301、發(fā)送端設備收到接收端設備反饋的ACK報文;
302、檢查是否帶有D-SACK信息。若有,執(zhí)行步驟303;否則,進入步驟305。
303、檢查記錄的擁塞窗口和慢啟動門限是否有效,若有效,執(zhí)行步驟304,否則執(zhí)行步驟305;
304、累加D-SACK確認的字節(jié)數(shù),執(zhí)行步驟305;
305、判斷此刻發(fā)送端是否已經(jīng)退出了快速重傳或超時重傳后的recovery狀態(tài)。若是,執(zhí)行步驟306,若否,執(zhí)行步驟309;
306、比較D-SACK累加的字節(jié)數(shù)和重傳報文累計的字節(jié)數(shù),若D-SACK累加的字節(jié)數(shù)大于或等于重傳報文累計的字節(jié)數(shù)(網(wǎng)絡中存在多個代理服務器時可能會出現(xiàn)大于的情況),說明網(wǎng)絡不擁塞,執(zhí)行步驟307,否則執(zhí)行步驟309;
307、將擁塞窗口和慢啟動門限恢復成之前記錄的值,修正這次不正確的降窗;
308、將重傳字節(jié)數(shù)累計變量和D-SACK確認字節(jié)數(shù)累計變量清零,將記錄擁塞窗口和慢啟動門限合法標志設置為不合法,為下一次D-SACK修正擁塞窗口流程準備。
309、繼續(xù)原有TCP輸入處理流程。
相應的,如圖4所示,本發(fā)明的實施例還提供一種基于TCP的數(shù)據(jù)傳輸裝置,包括:
統(tǒng)計單元41,用于在向接收端設備進行數(shù)據(jù)重傳的過程中,統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù);
獲取單元42,用于獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù);
確認和發(fā)送單元43,用于數(shù)據(jù)重傳結束后,在所述接收總字節(jié)數(shù)大于或等于所述發(fā)送總字節(jié)數(shù)的情況下,確認網(wǎng)絡未擁塞,繼續(xù)使用之前的報文發(fā)送參數(shù)發(fā)送報文。
本發(fā)明實施例提供的基于TCP的數(shù)據(jù)傳輸裝置,在向接收端設備進行數(shù)據(jù)重傳的過程中,統(tǒng)計單元41能夠統(tǒng)計重傳報文的發(fā)送總字節(jié)數(shù),獲取單元42能夠獲取所述接收端設備接收到的重復報文的接收總字節(jié)數(shù),確認和發(fā)送單元43能夠在數(shù)據(jù)重傳結束后,所述接收總字節(jié)數(shù)大于或等于所述發(fā)送總字節(jié)數(shù)的情況下,確認網(wǎng)絡未擁塞,并使用數(shù)據(jù)重傳之前的報文發(fā)送參數(shù)發(fā)送報文。這樣,在TCP數(shù)據(jù)傳輸過程中,即使因為數(shù)據(jù)重傳過程中使用了較低的報文發(fā)送參數(shù)進行數(shù)據(jù)重傳,發(fā)送端設備也會通過比較發(fā)送總字節(jié)數(shù)與接收總字節(jié)數(shù)進一步確定是否真的發(fā)生了網(wǎng)絡擁塞,是否需要恢復使用數(shù)據(jù)重傳之前的報文發(fā)送參數(shù)進行報文發(fā)送,因而避免了報文發(fā)送參數(shù)不必要地減小,有效提高了數(shù)據(jù)傳輸速度和帶寬利用率。
可選的,統(tǒng)計單元41,具體可用于在向所述接收端設備進行數(shù)據(jù)重傳的過程中,將所有重傳報文的字節(jié)數(shù)進行累加。
可選的,獲取單元42具體可包括:
接收模塊,用于接收所述接收端設備發(fā)送的接收確認消息,所述接收確認消息中攜帶所述接收端收到的重復報文的起始序列號和結束序列號;
確定模塊,用于根據(jù)所述結束序列號與所述起始序列號之差,確定所述接收確認消息對應的報文的字節(jié)數(shù);
累加模塊,用于將所述確定模塊確定的各所述接收確認消息對應的報文的字節(jié)數(shù)相累加,以獲取所述接收總字節(jié)數(shù)。
可選的,所述報文發(fā)送參數(shù)包括擁塞窗口和慢啟動門限。
可選的,所述數(shù)據(jù)重傳的過程包括:從一次快速重傳開始到所述快速重傳結束;或者從一次超時重傳開始到所述超時重傳結束。
盡管為示例目的,已經(jīng)公開了本發(fā)明的優(yōu)選實施例,本領域的技術人員將意識到各種改進、增加和取代也是可能的,因此,本發(fā)明的范圍應當不限于上述實施例。