一種提高數(shù)據(jù)中心tcp響應(yīng)速度的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種提高數(shù)據(jù)中心TCP響應(yīng)速度的方法及系統(tǒng),屬于計算機之間通訊優(yōu)化領(lǐng)域。本發(fā)明方法包括如下步驟:搜索SRTTold;判斷SRTTold是否存在,如果是,根據(jù)SRTTold計算建立連接時RTO,如果否,將RTO設(shè)為一定值;發(fā)送建立連接時的握手信號SYN,收到應(yīng)答信號SYN?ACK;設(shè)置發(fā)送數(shù)據(jù)包時的重傳定時器的值RTOdata;發(fā)送第一個數(shù)據(jù)包;判斷是否還有數(shù)據(jù)要發(fā)送,如果是,發(fā)送數(shù)據(jù)并動態(tài)更新SRTTold記錄,直至所有數(shù)據(jù)發(fā)送完成。本發(fā)明通過優(yōu)化RTO初始值的計算和設(shè)置,使得數(shù)據(jù)中心網(wǎng)絡(luò)中的TCP流能夠?qū)W(wǎng)絡(luò)丟包等情形做出快速響應(yīng),大大提高TCP響應(yīng)速度。
【專利說明】
一種提高數(shù)據(jù)中心TCP響應(yīng)速度的方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及計算機之間通訊優(yōu)化領(lǐng)域,尤其涉及一種提高數(shù)據(jù)中心TCP響應(yīng)速度 的方法及系統(tǒng)。
【背景技術(shù)】
[0002] TCP是目前使用最為廣泛的傳輸協(xié)議,它提供端到端的可靠傳輸服務(wù)。TCP采用流 量控制機制以避免"擁塞崩潰",Jacobson V針對TCP的流量控制機制導(dǎo)致的"擁塞崩潰"問 題并提出了一系列改進措施。簡單的說就是,網(wǎng)絡(luò)空閑時,TCP增加其數(shù)據(jù)發(fā)送速率,而當(dāng)網(wǎng) 絡(luò)變得擁塞時降低其數(shù)據(jù)發(fā)送速率。TCP用包丟失作為網(wǎng)絡(luò)擁塞的指示器并以此調(diào)整其數(shù) 據(jù)發(fā)送速率。由于缺少顯示擁塞通知ECN,TCP采用重復(fù)確認和重傳機制兩種方式推斷包丟 失和網(wǎng)絡(luò)擁塞。重傳計時器是TCP重傳機制的核心。TCP通過確認從對端接收的數(shù)據(jù)以保證 可靠傳輸,而數(shù)據(jù)和確認都有可能丟失。TCP通過設(shè)定重傳計時器來解決這個問題。重傳計 時器在TCP連接發(fā)送端發(fā)送數(shù)據(jù)時設(shè)定,如果定時器已超時而對端的確認還未到達,TCP將 重傳數(shù)據(jù),重傳定時器的值稱為RT0。為了適應(yīng)不斷變化的網(wǎng)絡(luò)環(huán)境,RT0是動態(tài)計算的。RT0 的計算取決于TCP為該連接報文段測量的往返時間RTT和該報文段已被重傳的次數(shù)。TCP每 測量一次RTT即更新一次RT0(重傳的包其RTT不用來計算RT0)<JETF(互聯(lián)網(wǎng)工程任務(wù)組)最 新建議標(biāo)準建議將RT0初始值從3秒減少到1秒。
[0003] 通過重傳計時器推斷包丟失雖然可以保證TCP的可靠傳輸,但也帶來了 TCP性能的 嚴重退化。當(dāng)包丟失而沒有觸發(fā)dupack時TCP發(fā)送者除了等待RT0超時重發(fā)數(shù)據(jù)包之外什么 都不能做,因此,RT0值的選取尤為重要。偏大的RT0值會造成過多的等待時間,而偏小的RT0 值則會導(dǎo)致不必要的重傳。表1給出了常用操作系統(tǒng)典型的RTT和RTOmin值。
[0004] 表 1 典型的 RTT 和 RTOmin
[0005]
[0006] 然而,隨著TCP的廣泛應(yīng)用,TCP重傳機制帶來的性能退化在一些應(yīng)用TCP的特定場 景中表現(xiàn)的特別明顯,其中的典型例子就是數(shù)據(jù)中心網(wǎng)絡(luò)環(huán)境。數(shù)據(jù)中心支持大量的服務(wù) 和應(yīng)用。現(xiàn)代數(shù)據(jù)中心網(wǎng)絡(luò)與廣義網(wǎng)具有很大的差別,具有高帶寬、低時延等特點。大部分 數(shù)據(jù)中心網(wǎng)絡(luò)采用TCP協(xié)議進行節(jié)點間的通信,但TCP重傳機制帶來的性能退化嚴重降低了 數(shù)據(jù)中心網(wǎng)絡(luò)的性能。數(shù)據(jù)中心的TCP連接RTT-般小于250微秒(不計排隊時間),而在目前 數(shù)據(jù)中心網(wǎng)絡(luò)中的大部分TCP實現(xiàn)中,RT0的初始值設(shè)為1秒,RTOmin被設(shè)置為200毫秒。數(shù)據(jù) 中心網(wǎng)絡(luò)中的很多服務(wù)和應(yīng)用是短數(shù)據(jù)流,考慮如下場景:一個客戶端通過lGbit/s的鏈路 向服務(wù)器發(fā)送1KB的數(shù)據(jù)包(也可能是SYN和SYN-ACK包)時,相關(guān)文獻指出,在某一瓶頸鏈路 較為擁堵的情況下,該傳輸有1 %的可能會發(fā)生TCP超時重傳。若SYN包丟失,客戶端至少需 要再等待1秒才能重傳 SYN包,僅僅連接建立階段將花費1秒以上的時間,而整個通信正常情 況下的傳輸時間僅僅幾十毫秒甚至幾毫秒;若傳輸?shù)倪^程中數(shù)據(jù)包丟失,該客戶端至少需 要再等待200毫秒才能再次發(fā)送數(shù)據(jù)請求包,相對于微秒級的RTT,過多的等待時間嚴重降 低了數(shù)據(jù)中心網(wǎng)絡(luò)應(yīng)用的通信效率。
[0007] 在廣域網(wǎng)中,通過減少RT0的初始值以減少重傳機制帶來的性能退化有諸多限制 條件。首先,在兩個通信實體第一次數(shù)據(jù)交換之前,TCP發(fā)送者沒有任何信息可以用來估算 RTT,目前的TCP只能保守的設(shè)置一個較大的RT0初始值來避免不必要的重傳;其次,廣域網(wǎng) 中TCP連接的RTT值波動范圍非常大,RT0初始值過小會引起TCP連接建立階段不必要的重 傳。最后,廣域網(wǎng)中的通信任務(wù)持續(xù)時間可達幾秒甚至數(shù)分鐘,其RT0初始值偏大所帶來的 空閑等待時間影響并不大,但是在以短流居多且RTT為微妙級的數(shù)據(jù)中心網(wǎng)絡(luò)中這些等待 時間帶來的影響是巨大的。由于以上限制,在廣域網(wǎng)環(huán)境下對RT0初始值以及RTOmin進行改 進的相關(guān)技術(shù)幾乎一片空白。
[0008] 在數(shù)據(jù)中心網(wǎng)絡(luò)中,由于數(shù)據(jù)中心網(wǎng)絡(luò)RTT波動范圍相對較小,上述第二條限制可 以取消,這使得減小RT0初始值及RTOmin變得可能。在關(guān)于數(shù)據(jù)中心網(wǎng)絡(luò)RT0的相關(guān)技術(shù)研 究中,Vasudevan和Phanishaye等人實現(xiàn)了高精度時鐘并用來解決數(shù)據(jù)中心的TCP incast 問題。
[0009] 以上的現(xiàn)有技術(shù)研究工作均沒有針對性的提出通過改進RT0初始值及RTOmin的設(shè) 置進而提高數(shù)據(jù)中心網(wǎng)絡(luò)環(huán)境下的TCP響應(yīng)速度的方法。
【發(fā)明內(nèi)容】
[0010] 為解決現(xiàn)有技術(shù)中的問題,本發(fā)明提供一種提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,還 提供了 一種實現(xiàn)上述方法的系統(tǒng)。
[0011] 本發(fā)明的方法包括如下步驟:
[0012] S1:開始,搜索通訊雙方上次通訊的SRTToid值,其中,SRTT為平滑后的RTT值;
[0013] S2:判斷SRTToid值是否存在,如果是,根據(jù)SRTToid值計算建立連接時重傳定時器的 值RT0,如果否,將重傳定時器的值RT0設(shè)定為一定值;
[0014] S3:發(fā)送建立連接時的握手信號SYN,收到應(yīng)答信號SYN-ACK;
[0015] S4:設(shè)置發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0data;
[0016] S5:發(fā)送第一個數(shù)據(jù)包;
[0017] S6:判斷是否還有數(shù)據(jù)要發(fā)送,如果是,發(fā)送數(shù)據(jù)并動態(tài)更新SRTTcad記錄,直至所 有數(shù)據(jù)發(fā)送完成,結(jié)束。
[0018] 本發(fā)明做如下改進,所述步驟S4包括如下步驟:判斷握手信號SYN是否重傳,如果 是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0 data設(shè)為3秒,如果否,根據(jù)RTTsyn的值計算RT0data, 其中,RTT syn為握手信號SYN沒有重傳情況下的RTT值。
[0019] 或者,本發(fā)明做如下改進:所述步驟S4包括如下步驟:
[0020] S41:判斷是否存在歷史連接記錄,如果否,執(zhí)行步驟S43,如果是,執(zhí)行步驟S42; [0021] S42:根據(jù)實際建立連接的時間計算發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0data;然后 執(zhí)行步驟S5;
[0022] S43:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值 RT0data設(shè)為3秒,如果否,根據(jù)RTTsyJ^值計算RT0data,其中,RTT syn為握手信號SYN沒有重傳情 況下的RTT值,然后執(zhí)行步驟S5。
[0023]本發(fā)明作進一步改進,所述步驟S42中,如果握手信號SYN重傳,實際建立連接的時 間RTTsyA收到應(yīng)答信號SYN-ACK的時間Tsyn_ack與發(fā)送握手信號的時間Tf irst_syn的差值,然 后根據(jù)RTTsyn值計算發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0 data。
[0024] 本發(fā)明還可以做如下改進,在步驟S6執(zhí)行之前,還包括記錄DIFsyn步驟B,所述 DIFsyn為最近一次通訊雙方通訊時,若SYN未發(fā)生重傳時,RTTsyn與第一個數(shù)據(jù)包往返時延 RTTdata_first之間的差值。
[0025] 本發(fā)明作進一步改進,所述記錄DIFSyn步驟B包括如下:
[0026] B1:記錄收到第一個有效數(shù)據(jù)包的RTT值;
[0027] B2:判斷SYN是否重傳,如果是,執(zhí)行步驟S6,如果否,根據(jù)步驟B1中記錄的RTT值計 算DIFsyn值,并更新SRTToid值,然后執(zhí)行步驟S6,其中,DIFsyn = RTT-RTTsyn。
[0028]本發(fā)明作進一步改進,在步驟S1中,除了搜索通訊雙方上次通訊的SRTToid值之外, 還搜索DIFsyn值。
[0029]本發(fā)明作進一步改進,所述步驟S4包括如下步驟:
[0030] S41:判斷是否存在歷史連接記錄,如果否,執(zhí)行步驟S43,如果是,執(zhí)行步驟S42;
[0031] S42:判斷SYN是否重傳,如果是,根據(jù)實際建立連接的時間計算發(fā)送數(shù)據(jù)包時的重 傳定時器的值RT0data,然后執(zhí)行步驟S5,如果否,利用修正后的建立連接時間RTIV+syn計算 發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0data,其中,RTTopt+syf RTTsyn+DIFsyn,然后執(zhí)行步驟S5; [0032] S43:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值 RT0data設(shè)為3秒,如果否,根據(jù)RTTsyJ^值計算RT0data,其中,RTT syn為握手信號SYN沒有重傳情 況下的RTT值,然后執(zhí)行步驟S5。
[0033]本發(fā)明作進一步改進,在步驟S42中,實際建立連接的時間RTTsynS收到應(yīng)答信號 SYN-ACK的時間Tsyn_ack與發(fā)送握手信號的時間Tfirst_ syn的差值,然后根據(jù)RTTsyn值計算發(fā)送 數(shù)據(jù)包時的重傳定時器的值RT0data。
[0034]本發(fā)明還提供了一種實現(xiàn)上述提高數(shù)據(jù)中心TCP響應(yīng)速度的方法的系統(tǒng),包括:搜 索模塊:用于搜索通訊雙方上次通訊的SRTToid值,其中,SRTT為平滑后的RTT值;
[0035]第一判斷模塊:用于判斷SRTToid值是否存在,如果是,根據(jù)SRTToid值計算建立連接 時重傳定時器的值RT0,如果否,將重傳定時器的值RT0設(shè)定為一定值;
[0036]建立連接模塊:用于發(fā)送建立連接時的握手信號SYN,收到應(yīng)答信號SYN-ACK;
[0037]設(shè)置模塊:用于設(shè)置發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0data;
[0038] 發(fā)送模塊:用于發(fā)送第一個數(shù)據(jù)包;
[0039] 第二判斷模塊:用于判斷是否還有數(shù)據(jù)要發(fā)送,如果是,發(fā)送數(shù)據(jù)并動態(tài)更新 SRTTcad記錄,直至所有數(shù)據(jù)發(fā)送完成。
[0040] 與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:本發(fā)明利用數(shù)據(jù)中心網(wǎng)絡(luò)環(huán)境流量及拓 撲相對穩(wěn)定的特性,利用節(jié)點間最近通信的SRTT記錄在保證安全性的前提下,通過優(yōu)化RT0 初始值的計算和設(shè)置使得數(shù)據(jù)中心網(wǎng)絡(luò)中的TCP流能夠?qū)W(wǎng)絡(luò)丟包等情形做出快速響應(yīng), 大大提高數(shù)據(jù)中心網(wǎng)絡(luò)環(huán)境下的TCP響應(yīng)速度,尤其對于短數(shù)據(jù)流本發(fā)明取得的有益效果 更為突出;利用修正后的RTIV_syn建立連接時間計算得出的RTOdata既不會太大又能減小因 第一個數(shù)據(jù)包偽到重傳導(dǎo)致第二個數(shù)據(jù)包RTO太大的問題;解決了當(dāng)SYN重傳時第一個數(shù)據(jù) 包重傳等待時間過長的問題,大大縮短了數(shù)據(jù)包傳輸響應(yīng)時間。
【附圖說明】
[0041 ]圖1為本發(fā)明實施例一方法流程圖;
[0042]圖2為本發(fā)明實施例二方法流程圖;
[0043]圖3為本發(fā)明實施例三方法流程圖;
[0044] 圖4為TCP/IP協(xié)議棧模塊間數(shù)據(jù)流圖。
【具體實施方式】
[0045] 下面結(jié)合附圖和實施例對本發(fā)明做進一步詳細說明。
[0046] 如圖1所示,為了適應(yīng)通信時延不斷減小的現(xiàn)代網(wǎng)絡(luò),RFC 6298(IETF(互聯(lián)網(wǎng)工程 任務(wù)組)訂立的關(guān)于TCP網(wǎng)絡(luò)協(xié)議標(biāo)準)提出,在TCP連接建立時,將RT0的初始值由的3秒降 低至1秒。如果在三次握手階段沒有發(fā)生重傳則在數(shù)據(jù)包開始傳輸時RT0等于1秒,否則,將 RT0的值重新置為較為保守的3秒。但是,1秒的初始值相對于數(shù)據(jù)中心網(wǎng)絡(luò)僅幾百微秒的時 延還是太大。如果三次握手階段發(fā)生SYN超時重傳,整個傳輸過程將會超過1秒,這是不能接 受的。在數(shù)據(jù)中心網(wǎng)絡(luò)中,網(wǎng)絡(luò)拓撲和路由相對穩(wěn)定,節(jié)點間通信時延變化較小,因此利用 現(xiàn)有技術(shù)在數(shù)據(jù)中心網(wǎng)絡(luò)環(huán)境下所實現(xiàn)的高精度時鐘,我們就具備了在數(shù)據(jù)中心網(wǎng)絡(luò)中減 小RT0初始值的條件,就可以解決SYN包超時重傳等待時間過長的問題。
[0047]作為本發(fā)明的第一個實施例,兩個主機第一次通訊時,包括如下步驟:
[0048] S1:開始,搜索通訊雙方上次通訊的SRTToid值,其中,SRTT為平滑后的RTT值;
[0049] S2:判斷SRTToid值是否存在,因雙方是第一次通訊,因此SRTToid值不存在,那么將 重傳定時器的值RT0設(shè)定為1秒;
[0050] S3:發(fā)送建立連接時的握手信號SYN,收到應(yīng)答信號SYN-ACK;
[0051] S4:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值 RT0data設(shè)為3秒,如果否,根據(jù)RTTsyn的值計算RT0data,本例的計算公式為:RT0 data = RTTsyn+ max(G,4*(RTTsyn/2)),其中,RTTsyn代表SYN包沒有重傳情況下的RTT,G代表時鐘粒度,這里 為1微秒;
[0052] S5:發(fā)送第一個數(shù)據(jù)包;
[0053] S6:判斷是否還有數(shù)據(jù)要發(fā)送,如果是,發(fā)送數(shù)據(jù)并動態(tài)更新SRTTcad記錄,直至所 有數(shù)據(jù)發(fā)送完成,結(jié)束。
[0054]當(dāng)兩個主機第二次及以上進行通訊時,具體步驟如下:
[0055] S1:開始,搜索通訊雙方上次通訊的SRTTcad值;
[0056] S2:判斷SRTToid值是否存在,因雙方是第二次或更多次通訊,因此SRTTold值存在, 那么就根據(jù)SRTTold值計算建立連接時重傳定時器的值RT0,本例的計算公式為:RT0 = SRTT〇id+max(G,4*(SRTT〇id/2)),RT0min=G;
[0057] S3:發(fā)送建立連接時的握手信號SYN,收到應(yīng)答信號SYN-ACK;
[0058] S4:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值 RT0data設(shè)為3秒,如果否,根據(jù)RTTsyn的值計算RT0data,本例的計算公式為:RT0 data = RTTsyn+ max(G,4*(RTTsyn/2)),其中,RTTsyn代表SYN包沒有重傳情況下的RTT,G代表時鐘粒度,這里 為1微秒;
[0059] S5:發(fā)送第一個數(shù)據(jù)包;
[0060] S6:判斷是否還有數(shù)據(jù)要發(fā)送,如果是,發(fā)送數(shù)據(jù)并動態(tài)更新SRTTcad記錄,直至所 有數(shù)據(jù)發(fā)送完成,結(jié)束。
[0061 ]本實施例重點解決建立連接時,SYN包超時重傳等待時間過長的問題,以下舉例具 體說明。
[0062] 假設(shè)主機A向主機B發(fā)送大小為2KB的數(shù)據(jù)(比如,一個網(wǎng)頁),包大小為1KB,鏈路帶 寬為lGbit/s,鏈路時延為30微秒。理想情況下,該傳輸會在200微秒內(nèi)結(jié)束。但是,如果連接 建立階段發(fā)生SYN包或者SYN-ACK包丟失,按照RFC 6298的建議,則整個傳輸過程需要耗費 Is以上。因此,為了減少SYN超時重傳等待的時間,本發(fā)明做出如下技術(shù)改進:
[0063] 主機A會在步驟S6中記錄過去一段時間內(nèi)與其通信的主機之間通信時的SRTT(也 就是平滑后的RTT值)。假如主機A記錄了上一次與B通信時的SRTToid值,在這次連接建立時, 也就是步驟S2中,SRTToid值存在,本發(fā)明將所記錄的SRTToid值作為本次通信的RTT的一個樣 本。RFC 6298中得到第一個數(shù)據(jù)包傳輸?shù)腞TT樣本R之后計算RT0的方法如下:
[0064] SRTT = R
[0065] RTTVAR = R/2
[0066] RTO = SRTT+max(G,K*RTTVAR)
[0067] 其中:K = 4,G代表時鐘粒度,Linux 3.13內(nèi)核中的值為200毫秒。
[0068] 參照上述做法,我們將SRTToid作為一個RTT樣本值來計算TCP連接建立時的RT0初 始值。
[0069] RTO = SRTToid+max (G,4* (SRTToid/2))
[0070] RT0min=G
[0071] 由于部署了高精度時鐘,G為1微秒而不是200毫秒,因此,RTOmin的值從200毫秒降 至1微秒。值得注意的是,這里并沒有初始化本次傳輸?shù)腟RTT以及RTTVAR的值,只是用 SRTToid計算RT0的初始值。因為SRTToid只是對本次通信RTT的一個估計,并不能完全代表這 次通信的某一 RTT樣本值。這樣做的好處是既合理地縮小了 RT0的初始值,又不影響本次通 信SRTT及RTTVAR計算的準確性,并且,隨著通訊次數(shù)的增多,SRTToid的值也更加精準。
[0072]如圖2所示,作為本發(fā)明的第二個實施例,主要是為了優(yōu)化SYN重傳時第一個數(shù)據(jù) 包的RT0設(shè)置,大大縮短了數(shù)據(jù)包的重傳等待時間。
[0073] RFC6298中,當(dāng)SYN發(fā)生重傳時,第一個數(shù)據(jù)包重傳時的RT0值此時會被重新設(shè)置為 3秒。這樣做的依據(jù)在于,連接建立階段的丟包可以被視為網(wǎng)絡(luò)擁塞的標(biāo)志,因此當(dāng)連接建 立的握手階段發(fā)生SYN包重傳時應(yīng)當(dāng)把第一個數(shù)據(jù)包發(fā)送之前的RT0值設(shè)置德更加保守。但 是,由于數(shù)據(jù)中心網(wǎng)絡(luò)的高帶寬和低時延特性,其丟包更可能是由于瞬時的流量激增而造 成的,一般不會持續(xù)太長時間,顯然3秒的等待時間還是太長了。
[0074]因此,為了解決當(dāng)SYN包重傳時第一個數(shù)據(jù)包重傳等待時間過長的問題,本發(fā)明對 實施例一中的步驟S4做了如下改進,所述步驟S4包括如下步驟:
[0075] S41:判斷是否存在歷史連接記錄,如果否,執(zhí)行步驟S43,如果是,執(zhí)行步驟S42; [0076] S42:根據(jù)實際建立連接的時間計算發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0data;然后 執(zhí)行步驟S5;
[0077] S43:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值 RT0data設(shè)為3秒,如果否,根據(jù)RTTsyJ^值計算RT0data,其中,RTT syn為握手信號SYN沒有重傳情 況下的RTT值,然后執(zhí)行步驟S5。
[0078] 本實施例還沿用第一個實施例的例子進一步說明:
[0079] 如果主機A和主機B為第一次通訊,在步驟S3執(zhí)行后,先執(zhí)行判斷步驟S41,判定不 會有歷史連接記錄,那么就還是按照第一個實施例的順序執(zhí)行,也就是執(zhí)行本實施例的步 驟S43:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0 data設(shè)為 3秒,如果否,根據(jù)RTTsyJ^值計算RT0data,其中,RTT syn為握手信號SYN沒有重傳情況下的RTT 值,然后執(zhí)行步驟S5。
[0080] 當(dāng)主機A和主機B為第二次以上通訊時,在步驟S3執(zhí)行完后,執(zhí)行判斷步驟S41,判 斷是否存在歷史連接記錄,本次存在歷史連接記錄,那么接下來執(zhí)行步驟S42;
[0081] S42:根據(jù)實際建立連接的時間計算發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0data;然后 執(zhí)行步驟S5。
[0082]在所述步驟S42中,如果握手信號SYN重傳,實際建立連接的時間RTTsyn為收到應(yīng)答 信號SYN-ACK的時間Tsyn_ac;k與發(fā)送握手信號的時間Tf irst_syn的差值,然后根據(jù)RTTsyn值計算 發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0 data。
[0083]因此,本例的計算公式如下:
[0084] RTTsyn=Tsyn_ack-Tfirst_ syn,其中,Tsyn_ack 代表連接建立請求方收到 SYN-ACK 的時間, Tfirst_syn代表連接建立請求方發(fā)送第一個SYN包的時間。也就是說,當(dāng)SYN沒有發(fā)生重傳時, 這里計算出的訂了^與實際的SYN包的RTT相同;當(dāng)SYN發(fā)生重傳時,這里計算的RTT syn則大于 實際的SYN包的RTT值。
[0085]然后第一個數(shù)據(jù)包的 RT0 按如下方式計算:RT0data = RTTsyn+max(G,4*(RTTsyn/2)), [0086] 其中,RTTsyn代表SYN包沒有重傳情況下的RTT,G代表時鐘粒度,這里為1微秒。
[0087]利用修改后的技術(shù)方案得到的RTTsyd^SYN發(fā)生重傳時第一個數(shù)據(jù)包的RT0進行計 算,當(dāng)SYN發(fā)生重傳時利用此時偏大的RTTsyn計算得出的RT0已經(jīng)相對保守,但是相對于3秒 的設(shè)置顯然還是大大縮短了重傳等待時間。
[0088]如圖3所示,作為本發(fā)明的第三個實施例,主要是為了解決SYN包RTT偏小導(dǎo)致的偽 到重傳問題。
[0089]依據(jù)RFC 6298的建議,當(dāng)TCP連接建立階段沒有發(fā)生重傳時,第一個數(shù)據(jù)包的RT0 按如下方式計算:
[0090] RTOdata = RTTsyn+max ( G , 4* ( RTTsyn/2 ))
[0091] 其中,RTTsyn代表SYN包沒有重傳情況下的RTT,G代表時鐘粒度,這里為1微秒。此 外,當(dāng)SYN發(fā)生重傳時,RT0的值此時會被重新設(shè)置為3秒。
[0092]由于SYN包比正常的數(shù)據(jù)包要小,因此RTTsyn要比正常的數(shù)據(jù)包RTT要小,甚至 RTTsynf到正常數(shù)據(jù)包RTT的一半。顯然,采用這種方式估算出的第一個數(shù)據(jù)包的RT0偏小。 若主機A發(fā)送的第一個數(shù)據(jù)包由于RT0估值過小而發(fā)生超時重傳(偽到重傳),則此時RT0計 算中使用的退避指數(shù)由1變?yōu)?,若此時第二個數(shù)據(jù)包也經(jīng)歷超時,由于此時此次傳輸還沒 有獲得有效的RTT樣本,退避指數(shù)不會重置,則第二個數(shù)據(jù)包的RT0 = 2*initialRT0 = 2s,顯 然,這樣造成的等待時間是巨大的。
[0093]為了減小這種情況發(fā)生的概率,本發(fā)明做出如下技術(shù)改進:
[0094] 在步驟S6執(zhí)行之前,還包括記錄DIFsyn步驟B,所述DIFsyn為最近一次通訊雙方通訊 時,若SYN未發(fā)生重傳時,RTTsyn與第一個數(shù)據(jù)包往返時延RTTdata_first之間的差值。
[0095] 本例所述記錄DIFsyn步驟B包括如下:
[0096] B1:記錄收到第一個有效數(shù)據(jù)包的RTT值;
[0097] B2:判斷SYN是否重傳,如果是,執(zhí)行步驟S6,如果否,根據(jù)步驟B1中記錄的RTT值計 算DIFsyn值,并更新SRTToid值,然后執(zhí)行步驟S6,其中,DIFsyn = RTT-RTTsyn。
[0098] 本例還沿用實施例一的例子說明:主機A除了記錄過去一段時間內(nèi)與其通信的主 機之間通信時的SRTT之外,還記錄下最近一次雙方通信時若SYN未發(fā)生重傳1^_與第一個 數(shù)據(jù)包的往返時延RTT data_first之間的差值DIFsyn,DIFsyn=RTT-RTT syn。
[0099] 在本次通信時,在步驟S1中,除了搜索通訊雙方上次通訊的SRTToid值之外,還搜索 DIFsyn值;此外,在步驟S3執(zhí)行完畢,還先執(zhí)行判斷步驟S41:
[0100] S41:判斷是否存在歷史連接記錄,如果否,執(zhí)行步驟S43,如果是,執(zhí)行步驟S42; [0101] S42:判斷SYN是否重傳,如果是,根據(jù)實際建立連接的時間計算發(fā)送數(shù)據(jù)包時的重 傳定時器的值RT0data,然后執(zhí)行步驟S5,如果否,利用修正后的建立連接時間RTIV+syn計算 發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0 data,其中,RTTopt+syf RTTsyn+DIFsyn,然后執(zhí)行步驟S5;
[0102] S43:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值 RT0data設(shè)為3秒,如果否,根據(jù)RTTsyJ^值計算RT0data,其中,RTT syn為握手信號SYN沒有重傳情 況下的RTT值,然后執(zhí)行步驟S5。
[0103] 如果主機A和主機B為第一次通訊,那么就不會有歷史連接記錄,那么接下來就還 是按照實施例一的順序執(zhí)行,也就是執(zhí)行S43,然后,執(zhí)行完步驟S5,在步驟S6執(zhí)行前,執(zhí)行 記錄DIFsyn步驟B,計算DIF syn值,并更新SRTToid值。
[0104] 當(dāng)主機A和主機B為第二次以上通訊時,在步驟S1中,搜索通訊雙方上次通訊的 SRTToid值和01?^"值,在步驟S3執(zhí)行完后,執(zhí)行判斷步驟S41:判斷是否存在歷史連接記錄, 本次存在歷史連接記錄,那么接下來執(zhí)行步驟S42;
[0105] S42:判斷SYN是否重傳,如果是,根據(jù)實際建立連接的時間計算發(fā)送數(shù)據(jù)包時的重 傳定時器的值RT0data,然后執(zhí)行步驟S5,如果否,利用修正后的建立連接時間RTIV+syn計算 發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0 data,其中,RTTopt+syf RTTsyn+DIFsyn,然后執(zhí)行步驟S5。
[0106] 所述步驟S42中,如果握手信號SYN重傳,實際建立連接的時間RTTsyn為收到應(yīng)答信 號SYN-ACK的時間T syn_ack與發(fā)送握手信號的時間Tf irst_syn的差值,然后根據(jù)RTTsyr^計算發(fā) 送數(shù)據(jù)包時的重傳定時器的值RT0 data。計算公式為:RTTsyn = Tsyn_ack-Tfirst_syn,RT0d ata = RTTSyn+max (G,4* (RTTSyn/2)) 〇
[0107] 其中,Tsyn_ack代表連接建立請求方收到SYN-ACK的時間,Tfirst_ synR表連接建立請 求方發(fā)送第一個SYN包的時間。也就是說,當(dāng)SYN沒有發(fā)生重傳時,這里計算出的RTTsyn與實 際的SYN包的RTT相同;當(dāng)SYN發(fā)生重傳時,這里計算的RTT syn則大于實際的SYN包的RTT值。利 用修改后的技術(shù)方案得到的RTTsydiSYN發(fā)生重傳時第一個數(shù)據(jù)包的RT0進行計算,當(dāng)SYN發(fā) 生重傳時利用此時偏大的RTTsyn計算得出的RTO已經(jīng)相對保守,但是相對于3秒的設(shè)置顯然 還是大大縮短了重傳等待時間。
[0108] 在所述步驟S42中,如果握手信號SYN沒有重傳,那么對RTTsyn進行如下修正:
[0109] RTT op t_syn = RTT syn+D I Fsyn
[01 10] RTOdata = RTT op t_syn+max ( G , 4* ( RTTopt_syn/2 ))
[0111] 利用修正后的RTTQpt_syn計算計算得出的RT0data既不會太大又能減小因第一個數(shù)據(jù) 包偽到重傳導(dǎo)致第二個數(shù)據(jù)包RT0太大的問題。
[0112] 本發(fā)明所采用的技術(shù)方案在實施過程中只要求節(jié)點在本地存儲歷史傳輸記錄,且 在沒有改變現(xiàn)行網(wǎng)絡(luò)中TCP協(xié)議的傳輸行為的前提下,對TCP初始參數(shù)的設(shè)置進行了優(yōu)化, 因此具有很強的可實施性。節(jié)點保存歷史傳輸信息所使用的基本數(shù)據(jù)結(jié)構(gòu)如表2所示。
[0113] '[0114]表2歷史傳輸信息數(shù)據(jù)結(jié)構(gòu)
' '
[0115]在對TCP/IP協(xié)議棧的具體修改實現(xiàn)中,協(xié)議棧相關(guān)的主要模塊間的數(shù)據(jù)流如圖4 中的箭頭所示,其中,各模塊的主要功能如下:
[0116]歷史信息存儲模塊:主要負責(zé)利用表2中的數(shù)據(jù)結(jié)構(gòu)對節(jié)點間歷史傳輸信息的存 儲;
[0117] 查詢接口:主要負責(zé)在連接建立時對歷史信息進行查詢并返回結(jié)果;
[0118] 更新接口 :主要負責(zé)在數(shù)據(jù)傳輸過程中動態(tài)更新歷史傳輸信息;
[0119] 算法處理:主要負責(zé)對TCP/IP協(xié)議棧的初始化部分進行修改。
[0120] 本發(fā)明利用數(shù)據(jù)中心網(wǎng)絡(luò)環(huán)境流量及拓撲相對穩(wěn)定的特性,利用節(jié)點間最近通信 的SRTT記錄在保證安全性的前提下,通過優(yōu)化RT0初始值的計算和設(shè)置使得數(shù)據(jù)中心網(wǎng)絡(luò) 中的TCP流能夠?qū)W(wǎng)絡(luò)丟包等情形做出快速響應(yīng),大大提高數(shù)據(jù)中心網(wǎng)絡(luò)環(huán)境下的TCP響應(yīng) 速度,尤其對于短數(shù)據(jù)流本發(fā)明取得的有益效果更為突出。
[0121] 此外,本發(fā)明還提供了一種實現(xiàn)上述方法的系統(tǒng),包括搜索模塊:用于搜索通訊雙 方上次通訊的SRTToid值,其中,SRTT為平滑后的RTT值;
[0122] 第一判斷模塊:用于判斷SRTToid值是否存在,如果是,根據(jù)SRTToid值計算建立連接 時重傳定時器的值RT0,如果否,將重傳定時器的值RT0設(shè)定為一定值;
[0123] 建立連接模塊:用于發(fā)送建立連接時的握手信號SYN,收到應(yīng)答信號SYN-ACK;
[0124] 設(shè)置模塊:用于設(shè)置發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0data;
[0125] 發(fā)送模塊:用于發(fā)送第一個數(shù)據(jù)包;
[0126] 第二判斷模塊:用于判斷是否還有數(shù)據(jù)要發(fā)送,如果是,發(fā)送數(shù)據(jù)并動態(tài)更新 SRTTcad記錄,直至所有數(shù)據(jù)發(fā)送完成。
[0127] 為了解決在數(shù)據(jù)包傳輸時,RT0data既不會太大又能減小因第一個數(shù)據(jù)包偽到重傳 導(dǎo)致第二個數(shù)據(jù)包RT0太大的問題,本發(fā)明還包括記錄DIF syn模塊:設(shè)置在發(fā)送模塊和第二 判斷模塊之間,用于記錄〇1?^"值,所述DIFsyn為最近一次通訊雙方通訊時,若SYN未發(fā)生重 傳時,RTTsyn與第一個數(shù)據(jù)包往返時延RTTdata_first之間的差值。當(dāng)通訊雙方建立連接后,發(fā) 送第一個數(shù)據(jù)包之前,如果握手信號SYN沒有重傳,則利用DIFsyn值修正RTTsyn值。
[0128]以上所述之【具體實施方式】為本發(fā)明的較佳實施方式,并非以此限定本發(fā)明的具體 實施范圍,本發(fā)明的范圍包括并不限于本【具體實施方式】,凡依照本發(fā)明所作的等效變化均 在本發(fā)明的保護范圍內(nèi)。
【主權(quán)項】
1. 一種提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于包括如下步驟: Sl:開始,搜索通訊雙方上次通訊的SRTTc1Id值,其中,SRTT為平滑后的RTT值; S2:判斷SRTToid值是否存在,如果是,根據(jù)SRTToid值計算建立連接時重傳定時器的值 RTO,如果否,將重傳定時器的值RTO設(shè)定為一定值; S3:發(fā)送建立連接時的握手信號SYN,收到應(yīng)答信號SYN-ACK; S4:設(shè)置發(fā)送數(shù)據(jù)包時的重傳定時器的值RTOdata; S5:發(fā)送第一個數(shù)據(jù)包; S6:判斷是否還有數(shù)據(jù)要發(fā)送,如果是,發(fā)送數(shù)據(jù)并動態(tài)更新SRTTcild記錄,直至所有數(shù) 據(jù)發(fā)送完成,結(jié)束。2. 根據(jù)權(quán)利要求1所述的提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于:所述步驟S4 包括如下步驟:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值 RTOdata設(shè)為3秒,如果否,根據(jù)RTTsyJ^值計算RTOdata,其中,RTT syn為握手信號SYN沒有重傳情 況下的RTT值。3. 根據(jù)權(quán)利要求1所述的提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于:所述步驟S4 包括如下步驟: S41:判斷是否存在歷史連接記錄,如果否,執(zhí)行步驟S43,如果是,執(zhí)行步驟S42; S42:根據(jù)實際建立連接的時間計算發(fā)送數(shù)據(jù)包時的重傳定時器的值RTOdata;S后執(zhí)行 步驟S5; S43:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值RTOdata設(shè) 為3秒,如果否,根據(jù)RTTsyJ^值計算RTOdata,其中,RTTsyn為握手信號SYN沒有重傳情況下的 RTT值,然后執(zhí)行步驟S5。4. 根據(jù)權(quán)利要求3所述的提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于:所述步驟S42 中,如果握手信號SYN重傳,實際建立連接的時間RTT syn為收到應(yīng)答信號SYN-ACK的時間 了^+^與發(fā)送握手信號的時間Tfirst_ syn的差值,然后根據(jù)RTTsyn值計算發(fā)送數(shù)據(jù)包時的重傳 定時器的值RTOdata。5. 根據(jù)權(quán)利要求1所述的提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于:在步驟S6執(zhí) 行之前,還包括記錄DIFsyn步驟B,所述DIF syn為最近一次通訊雙方通訊時,若SYN未發(fā)生重傳 時,RTTsyn與第一個數(shù)據(jù)包往返時延RTT data_first之間的差值。6. 根據(jù)權(quán)利要求5所述的提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于:所述記錄 DIFsyn步驟B包括如下: Bl:記錄收到第一個有效數(shù)據(jù)包的RTT值; B2:判斷握手信號SYN是否重傳,如果是,執(zhí)行步驟S6,如果否,根據(jù)步驟Bl中記錄的RTT 值計算DIFsyn值,并更新SRTToid值,然后執(zhí)行步驟S6,其中,DIFsyn = RTT-RTTsyn。7. 根據(jù)權(quán)利要求6所述的提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于:在步驟SI中, 除了搜索通訊雙方上次通訊的SRTToid值之外,還搜索DIF syn值。8. 根據(jù)權(quán)利要求7所述的提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于:所述步驟S4 包括如下步驟: S41:判斷是否存在歷史連接記錄,如果否,執(zhí)行步驟S43,如果是,執(zhí)行步驟S42; S42:判斷SYN是否重傳,如果是,根據(jù)實際建立連接的時間計算發(fā)送數(shù)據(jù)包時的重傳定 時器的值RTOdata,然后執(zhí)行步驟S5,如果否,利用修正后的建立連接時間RTTc^ syn計算發(fā)送 數(shù)據(jù)包時的重傳定時器的值RTOdata,其中,RTTc^syn = RTTsyn+DIFsyn,然后執(zhí)行步驟S5; S43:判斷握手信號SYN是否重傳,如果是,將發(fā)送數(shù)據(jù)包時的重傳定時器的值RTOdata設(shè) 為3秒,如果否,根據(jù)RTTsyJ^值計算RTOdata,其中,RTTsyn為握手信號SYN沒有重傳情況下的 RTT值,然后執(zhí)行步驟S5。9. 根據(jù)權(quán)利要求8所述的提高數(shù)據(jù)中心TCP響應(yīng)速度的方法,其特征在于:在步驟S42 中,實際建立連接的時間RTTsyA收到應(yīng)答信號SYN-ACK的時間T syn_ack與發(fā)送握手信號的時 間Tfirst_syn的差值,然后根據(jù)RTT syn值計算發(fā)送數(shù)據(jù)包時的重傳定時器的值RT0data。10. -種實現(xiàn)權(quán)利要求1-9任一項所述提高數(shù)據(jù)中心TCP響應(yīng)速度的方法的系統(tǒng),其特 征在于包括: 搜索模塊:用于搜索通訊雙方上次通訊的SRTToid值,其中,SRTT為平滑后的RTT值; 第一判斷模塊:用于判斷SRTTciId值是否存在,如果是,根據(jù)SRTToid值計算建立連接時重 傳定時器的值RTO,如果否,將重傳定時器的值RTO設(shè)定為一定值; 建立連接模塊:用于發(fā)送建立連接時的握手信號SYN,收到應(yīng)答信號SYN-ACK; 設(shè)置模塊:用于設(shè)置發(fā)送數(shù)據(jù)包時的重傳定時器的值RTOdata; 發(fā)送模塊:用于發(fā)送第一個數(shù)據(jù)包; 第二判斷模塊:用于判斷是否還有數(shù)據(jù)要發(fā)送,如果是,發(fā)送數(shù)據(jù)并動態(tài)更新SRTTcildE 錄,直至所有數(shù)據(jù)發(fā)送完成。
【文檔編號】H04L12/801GK105933242SQ201610225780
【公開日】2016年9月7日
【申請日】2016年4月12日
【發(fā)明人】李大剛, 王家祥, 李樹, 李樹一
【申請人】北京大學(xué)深圳研究生院