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