小議TCP的擁塞控制技術(shù)探討
時(shí)間:2022-07-01 07:03:00
導(dǎo)語(yǔ):小議TCP的擁塞控制技術(shù)探討一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要:tcp協(xié)議在控制數(shù)據(jù)流擁塞機(jī)制方面有一些不足,本文通過(guò)探討網(wǎng)絡(luò)擁塞出現(xiàn)的原因及TCP擁塞控制的基本策略,論述了TCP擁塞控制的改進(jìn)方案,并提出了針對(duì)這種缺陷的改進(jìn)方向。
關(guān)鍵詞:TCP擁塞控制重傳重傳超時(shí)
中圖分類號(hào):文獻(xiàn)標(biāo)識(shí)碼:文章編號(hào):
TCP是Internet上通用的傳輸層協(xié)議之一,是目前應(yīng)用最廣泛的傳輸控制協(xié)議,其核心是擁塞控制機(jī)制。INTERNET采用交換機(jī)作為不同網(wǎng)絡(luò)之間傳送信息的中介,以次來(lái)達(dá)到整個(gè)網(wǎng)絡(luò)資源的共享。這樣的方式便于在網(wǎng)絡(luò)中查找某個(gè)特定的主機(jī),但隨著主機(jī)數(shù)量的增多和數(shù)據(jù)傳輸量的增大,就容易產(chǎn)生資源競(jìng)爭(zhēng),如果不及時(shí)處理,這樣的競(jìng)爭(zhēng)就會(huì)導(dǎo)致網(wǎng)絡(luò)擁塞。TCP協(xié)議的一個(gè)組成部分就是為了解決這樣的擁塞問(wèn)題,并提供了一個(gè)算法來(lái)最大限度地利用網(wǎng)絡(luò)帶寬。傳統(tǒng)的TCP中的擁塞控制機(jī)制主要是基于VanJacobson提出的“慢啟動(dòng)”算法,“擁塞避免”算法和一個(gè)用于估計(jì)周轉(zhuǎn)RTT(roundtriptime)的算法。
“慢啟動(dòng)”算法的核心思想就是:通過(guò)觀察到新分組進(jìn)入網(wǎng)絡(luò)的速率應(yīng)該與另一端返回確認(rèn)的速率相同而進(jìn)行工作。慢啟動(dòng)為發(fā)送方的TCP增加了另一個(gè)窗口:擁塞窗口(congestionwindow),記為cwnd。當(dāng)與另一個(gè)網(wǎng)絡(luò)的主機(jī)建立TCP連接時(shí),擁塞窗口被初始化為1個(gè)報(bào)文段(即另一端通告的報(bào)文段大?。?。每收到一個(gè)ACK,擁塞窗口就增加一個(gè)報(bào)文段(cwnd以字節(jié)為單位,但是慢啟動(dòng)以報(bào)文段大小為單位進(jìn)行增加)。發(fā)送方取擁塞窗口與通告窗口中的最小值作為發(fā)送上限。擁塞窗口是發(fā)送方使用的流量控制,而通告窗口則是接收方使用的流量控制。發(fā)送方開(kāi)始時(shí)發(fā)送一個(gè)報(bào)文段,然后等待ACK。當(dāng)收到該ACK時(shí),擁塞窗口從1增加為2,即可以發(fā)送兩個(gè)報(bào)文段。當(dāng)收到這兩個(gè)報(bào)文段的ACK時(shí),擁塞窗口就增加為4,這是一種指數(shù)增加的關(guān)系。在某些點(diǎn)上可能達(dá)到了互聯(lián)網(wǎng)的容量,于是中間路由器開(kāi)始丟棄分組。
“擁塞避免”算法是一種處理丟失分組的方法。該算法假定由于分組受到損壞引起的丟失是非常少的(遠(yuǎn)小于1%),因此分組丟失就意味著在源主機(jī)和目的主機(jī)之間的某處網(wǎng)絡(luò)上發(fā)生了擁塞。有兩種分組丟失的指示:發(fā)生超時(shí)和接收到重復(fù)的確認(rèn)。但是當(dāng)擁塞發(fā)生時(shí),我們希望降低分組進(jìn)入網(wǎng)絡(luò)的傳輸速率,于是可以調(diào)用慢啟動(dòng)來(lái)作到這一點(diǎn)。在實(shí)際中這兩個(gè)算法通常在一起實(shí)現(xiàn)。
慢啟動(dòng)(slowstart)算法通過(guò)逐漸增加cwnd的大小來(lái)探測(cè)可用的網(wǎng)絡(luò)容量,防止連接開(kāi)始時(shí)采用不合適的發(fā)送量導(dǎo)致網(wǎng)絡(luò)擁塞。然而有時(shí)該算法也會(huì)浪費(fèi)可用的網(wǎng)絡(luò)容量,因?yàn)槁龁?dòng)算法總是從cwnd=l開(kāi)始,每收到一個(gè)ACK,cwnd增加l,對(duì)RTT時(shí)間長(zhǎng)的網(wǎng)絡(luò),為使cwnd達(dá)到一個(gè)合適的值,需要花很長(zhǎng)的時(shí)間,特別是網(wǎng)絡(luò)實(shí)際容量很大時(shí),會(huì)造成浪費(fèi)。為此可采用大的初始窗口,大的初始窗口避免了延遲ACK機(jī)制下單個(gè)報(bào)文段初始窗口的等待超時(shí)問(wèn)題,縮短了小TCP流的傳輸時(shí)間和大延遲鏈路上的慢啟動(dòng)時(shí)間。
在慢啟動(dòng)階段,在每個(gè)RTT時(shí)間內(nèi),cwnd增加一倍,這樣當(dāng)cwnd增加到一定的值時(shí),就可能導(dǎo)致以網(wǎng)絡(luò)能夠處理的最大容量的2倍來(lái)發(fā)送數(shù)據(jù),從而淹沒(méi)網(wǎng)絡(luò)。Hoe建議使用packet-pair算法和測(cè)量RTT來(lái)為ssthresh估計(jì)合適值,以此來(lái)適時(shí)地結(jié)束慢啟動(dòng)階段。但是由于受各方面干擾,估算合理的ssthresh值并不容易,因此這個(gè)方法的效果是有限的。而Smooth-start較為平滑地從慢啟動(dòng)過(guò)渡到擁塞避免階段,減少了報(bào)文段丟失和突發(fā)通訊量,提高了TCP擁塞控制的性能。
為了避免不必要的重傳超時(shí),有人提出了一種受限傳輸機(jī)制:如果接收方的廣播窗口允許的話,發(fā)送方接收到一個(gè)或者兩個(gè)重復(fù)的ACK(acknowledgment)后,繼續(xù)傳輸新的數(shù)據(jù)報(bào)文段。受限的傳輸機(jī)制允許具有較小窗口的TCP連接進(jìn)行錯(cuò)誤恢復(fù),而且避免了不必要的重傳。
如果TCP的發(fā)送方在重傳數(shù)據(jù)報(bào)文段一個(gè)RTT后發(fā)現(xiàn)接收方接收到了重傳數(shù)據(jù)報(bào)文段的兩個(gè)拷貝,則可以推斷重傳是不必要的。這時(shí),TCP的發(fā)送方可以撤銷對(duì)擁塞窗口的減少。發(fā)送方可以通過(guò)將慢啟動(dòng)門限增加到原始值,調(diào)用慢啟動(dòng)規(guī)程使擁塞窗口恢復(fù)原先值。除了恢復(fù)擁塞窗口,TCP發(fā)送方還可以調(diào)整重復(fù)確認(rèn)門限或者重傳超時(shí)參數(shù)來(lái)避免由于多次不必要的重傳而浪費(fèi)帶寬。
對(duì)公平性的改進(jìn):在擁塞避免階段,如果沒(méi)有發(fā)生丟包事件,則TCP發(fā)送方的cwnd在每個(gè)RTT時(shí)間內(nèi)大約可以增加一個(gè)報(bào)文段大小,但這樣會(huì)造成具有不同RTT時(shí)間或窗口尺寸的多個(gè)連接在瓶頸處對(duì)帶寬競(jìng)爭(zhēng)的不公平性,RTT時(shí)間或窗口小的連接,相應(yīng)的cwnd增長(zhǎng)速度也相對(duì)緩慢,所以只能得到很小一部分帶寬。
對(duì)此,可以考慮從一下幾個(gè)方面去加以改進(jìn):
1、如果使用了路由器,可以使用公平隊(duì)列和TCP友好緩存管理來(lái)進(jìn)行控制以增加公平性。
2、如沒(méi)有使用路由器,就要求TCP發(fā)送端的擁塞控制進(jìn)行改變,在擁塞避免階段是共享同一資源的TCP連接以相同速度發(fā)送數(shù)據(jù)。
3、可以考慮引入發(fā)送優(yōu)先級(jí)的概念,拒絕大范圍的同時(shí)發(fā)送同一共享資源,而是按照優(yōu)先級(jí)有先后次序的逐個(gè)發(fā)送,優(yōu)先級(jí)的使用可以仿造進(jìn)程優(yōu)先級(jí)的管理方式,動(dòng)態(tài)變化,實(shí)時(shí)調(diào)整以加強(qiáng)有效利用率。