解決傳統(tǒng)TCP缺陷: 1、窗口太小,最大65535。 TCP利用了選項功能,其頭部存在預(yù)留項,用于擴(kuò)展等用途。窗口擴(kuò)大選項增加了額外的16位來表示窗口大小,窗口的由首部的16位大小和選項的16位共同組成。 不過不是用加法組成的,而是利用 移位窗口的冪 來表示的,
解決傳統(tǒng)TCP缺陷:
1、窗口太小,最大65535。
TCP利用了選項功能,其頭部存在預(yù)留項,用于擴(kuò)展等用途。窗口擴(kuò)大選項增加了額外的16位來表示窗口大小,窗口的值由首部的16位大小和選項的16位值共同組成。
不過不是用加法組成的,而是利用移位窗口值的冪來表示的,也就是說如果移位窗口值為 10,那么窗口的最大值就是65535*210,這個值就比較大了,足夠表示窗口的大小了。
2、數(shù)據(jù)包丟失,即認(rèn)定為網(wǎng)絡(luò)出現(xiàn)了擁塞
在高速網(wǎng)絡(luò)中,這種假設(shè)是不成立的。如果笼統(tǒng)地認(rèn)為分組丟失就是擁塞所引起的,從而降低一半的速率,這是對網(wǎng)絡(luò)資源的極大浪費(fèi)。擁塞的判斷需要兩個連續(xù)的分組丟失。
于是乎,就有了HSTCP和BI-TCP等一系列擁塞控制方法。
HSTCP
High-Speed TCP是由Floyd提出,基于AIMD準(zhǔn)則的一種新的擁塞控制算法,能在高速度和大時延的網(wǎng)絡(luò)中更有效地提高網(wǎng)絡(luò)的吞吐率。它通過對標(biāo)準(zhǔn)TCP擁塞避免算法的增加和減少參數(shù)進(jìn)行修改,從而實(shí)現(xiàn)了窗口的快速增長和慢速減少,但是它存在嚴(yán)重的RTT不公平性。
HSTCP提出的窗口增加和減小方法,先看擁塞控制中的兩個公式:
cwnd = cwnd+a(cwnd)/cwnd ............................ (1)
cwnd = (1-b(cwnd)) * cwnd ............................ (2)
式 (1)是擁塞避免時的窗口增長方式,式(2)是發(fā)生了丟包后的窗口下降方式,其中a,b為兩個函數(shù),cwnd為其自變量,在標(biāo)準(zhǔn)TCP中a(cwnd)=1,b(cwnd)=0.5,也就是加法增大,乘法減小。
為了達(dá)到TCP的友好性,在窗口較低的情況下,也就是說非BDP的網(wǎng)絡(luò)環(huán)境下,HSTCP采用的是和標(biāo)準(zhǔn)TCP相同的a和b,也就是一樣的方式來保證兩者之間的友好性。當(dāng)BDP大時,也就是w較大時(HSTCP設(shè)定的臨界值為38),采取新的a和b來達(dá)到高吞吐的要求:
根據(jù)不同的網(wǎng)絡(luò)環(huán)境下使用不同的TCP窗口增長和降低參數(shù),具體可以看RFC3649文檔。
BIC-TCP
HSTCP,它通過簡單的修改標(biāo)準(zhǔn)TCP的增長方式,從而達(dá)到了高吞吐。方法很簡單,但是缺點(diǎn)在于,它存在嚴(yán)重的RTT不公平性. 公平性指共享同一網(wǎng)絡(luò)瓶頸的多個流之間占有的網(wǎng)絡(luò)資源相等。
BIC-TCP由North Carolina State University的網(wǎng)絡(luò)研究實(shí)驗(yàn)室提出,該算法在提出不久后就成為了當(dāng)時Linux內(nèi)核中的TCP默認(rèn)擁塞算法,使用非常廣泛.(是linux采用cubic之前的默認(rèn)算法)
BIC-TCP的本質(zhì):
BIC- TCP的提出者們發(fā)現(xiàn)了TCP擁塞窗口調(diào)整的一個本質(zhì):那就是找到最適合當(dāng)前網(wǎng)絡(luò)的一個發(fā)送窗口,為了找到這個窗口值,TCP采取的方式是(擁塞避免階 段)每RTT加1,緩慢上升,丟包時下降一半,接著再來慢慢上升。BIC-TCP的提出者們看穿了事情的本質(zhì),其實(shí)這就是一個搜索的過程,而TCP的搜索方式類似于逐個遍歷搜索方法,可以認(rèn)為這個值是在1和一個比較大的數(shù)(large_window)之間,既然在這個區(qū)間內(nèi)需要搜索一個最佳值,那么顯然最好的方式就是二分搜索思想。
BIC- TCP就是基于這樣一個二分思想的:當(dāng)出現(xiàn)丟包的時候,說明最佳窗口值應(yīng)該比這個值小,那么BIC就把此時的cwnd設(shè)置為max_win,把乘法減小后 的值設(shè)置為min_win,然后BIC就開始在這兩者之間執(zhí)行二分思想--每次跳到max_win和min_win的中點(diǎn)。
具體實(shí)現(xiàn)還有其他問題,比如防止傳輸?shù)亩秳?,因而BIC-TCP選取了另外取了兩個參考值Smax和Smin。BIC-TCP的具體實(shí)現(xiàn)可以參考內(nèi)核代碼/net/ipv4/tcp_bictcp.c
CUBIC
BIC-TCP的缺點(diǎn):首先就是搶占性較強(qiáng),它在探測階段相當(dāng)于是重新啟動一個慢啟動算法,而TCP在處于穩(wěn)定后窗口就是一直是線性增長的,不會再次執(zhí)行慢啟動的過程。其次,BIC-TCP的窗口控制階段增加了算法上的實(shí)現(xiàn)和性能分析復(fù)雜度。
CUBIC在設(shè)計上簡化了BIC-TCP的窗口調(diào)整算法,CUBIC使用一個立方函數(shù)取代BIC-TCP的增長曲線。來看下具體細(xì)節(jié):當(dāng)某次擁塞事件發(fā)生時,Wmax設(shè)置為此時發(fā)生擁塞時的窗口值,然后把窗口進(jìn)行乘法減小,乘法減小因子設(shè)為β, 當(dāng)從快速恢復(fù)階段退出然后進(jìn)入到擁塞避免階段,此時CUBIC的窗口增長開始按照“凹”式增長曲線進(jìn)行增長,該過程一直持續(xù)直到窗口再次增長到Wmax, 緊接著,該函數(shù)轉(zhuǎn)入“凸”式增長階段。該方式的增長可以使得窗口一直維持在Wmax附近,從而可以達(dá)到網(wǎng)絡(luò)帶寬的高利用率和協(xié)議本身的穩(wěn)定性。
鑒于CUBIC比BIC-TCP更出色的表現(xiàn),在Linux2.6.18版本后,CUBIC取代了BIC-TCP,內(nèi)核代碼請參考/net/ipv4/tcp_Cubic.c。
TCP擁塞的優(yōu)化算法還有N多多,比如
Fast TCP:從TCP vegas的思想發(fā)展而來,利用網(wǎng)絡(luò)延時進(jìn)行擁塞判斷。
ECN:顯式擁塞通知,該算法的思想是想借助路由器。路由器在發(fā)現(xiàn)有擁塞現(xiàn)象時在連接的TCP或者IP頭里面打上擁塞的標(biāo)記,讓終端自己去根據(jù)標(biāo)記進(jìn)行處理。
UDT:UDT是一個開源的基于UDP實(shí)現(xiàn)的可靠傳輸協(xié)議,但是在UDT的擁塞算法與UDP或TCP沒有關(guān)系,UDT采用的是一種帶寬估計的算法。發(fā)送端的擁塞算法就是把擁塞窗口利用一個函數(shù)無限逼近于帶寬值,這種思想對于傳輸?shù)姆€(wěn)定性非常好,因?yàn)槭且粋€無限逼近,所以永遠(yuǎn)不會超過帶寬的值,而不是像TCP一樣在平衡狀態(tài)后繼續(xù)一直往上增大窗口,從而在平衡狀態(tài)能夠維持比較久。
完成一個TCP的可用版本很容易,要實(shí)現(xiàn)一個高性能版本需要考慮的因素就多了去了。
不同環(huán)境:局域網(wǎng)、異構(gòu)網(wǎng)、衛(wèi)星網(wǎng)等等,每種網(wǎng)絡(luò)的要求千差萬別。
不同應(yīng)用:有一直只發(fā)送小包(發(fā)送的包長度小于MSS)的應(yīng)用,也有不停的發(fā)送大包的應(yīng)用,還有兩邊同時發(fā)送和接收數(shù)據(jù)的應(yīng)用。
傳輸效率,公平性,平穩(wěn)性等等
參考;http://www.cnblogs.com/fll/archive/2011/11/15/2250437.html
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com