tcp協(xié)議中的流量控制和擁塞控制研究畢業(yè)論文(含外文翻譯)_第1頁
已閱讀1頁,還剩40頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  畢業(yè)設(shè)計(jì) (論文)</p><p>  TCP協(xié)議中的流量控制和擁塞控制研究</p><p><b>  年 月 日</b></p><p> 院 別數(shù)學(xué)與統(tǒng)計(jì)學(xué)院</p><p> 專業(yè)名稱信息與計(jì)算科學(xué)</p><p> 班級(jí)學(xué)號(hào)</p><

2、p> 學(xué)生姓名</p><p> 指導(dǎo)教師</p><p>  TCP協(xié)議中的流量控制和擁塞控制研究</p><p><b>  摘 要</b></p><p>  計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)是當(dāng)今發(fā)展最迅速的計(jì)算機(jī)技術(shù)之一,而保證網(wǎng)絡(luò)穩(wěn)定可靠運(yùn)行的關(guān)鍵是計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議。TCP協(xié)議作為網(wǎng)絡(luò)協(xié)議中的核心協(xié)議之一,其重要性更

3、是不言而喻,因而對(duì)于該協(xié)議的研究與完善是促進(jìn)網(wǎng)絡(luò)發(fā)展的重要手段之一。</p><p>  隨著互聯(lián)網(wǎng)規(guī)模和互聯(lián)網(wǎng)應(yīng)用的快速增長,網(wǎng)絡(luò)擁塞和數(shù)據(jù)沖突問題已引起人們密切的關(guān)注。擁塞控制與流量控制技術(shù)針對(duì)網(wǎng)絡(luò)中的擁塞和數(shù)據(jù)沖突而成為網(wǎng)絡(luò)領(lǐng)域的核心技術(shù)。其中流量控制的對(duì)象是接收端,目的是使發(fā)送端的發(fā)送速率不超過接收端的接收能力;擁塞控制的對(duì)象是網(wǎng)絡(luò)環(huán)境,目的是使負(fù)載不超過網(wǎng)絡(luò)的傳送能力。</p><p

4、>  TCP的流量控制主要依賴于滑動(dòng)窗口,通過流量約束,減少接收端出的數(shù)據(jù)流失,提高發(fā)送效率,充分利用接收端資源。</p><p>  TCP的擁塞控制主要原理依賴于一個(gè)擁塞窗口(cwnd)來控制,窗口值的大小就代表能夠發(fā)送出去的但還沒有收到ACK的最大數(shù)據(jù)報(bào)文段,顯然窗口越大那么數(shù)據(jù)發(fā)送的速度也就越快,但是也就越可能使得網(wǎng)絡(luò)出現(xiàn)擁塞,如果窗口值為1,那么就簡化為一個(gè)停等協(xié)議,每發(fā)送一個(gè)數(shù)據(jù),都要等到對(duì)方的

5、確認(rèn)才能發(fā)送第二個(gè)數(shù)據(jù)包,顯然數(shù)據(jù)傳輸效率低下。TCP擁塞控制算法就是要在這兩者之間權(quán)衡,選取最的cwnd值,從而使得網(wǎng)絡(luò)吞吐量最大化且不產(chǎn)生擁塞。</p><p>  本文首先對(duì)TCP協(xié)議的發(fā)展做了簡要的概述,然后分析了TCP協(xié)議的報(bào)文段格式和結(jié)構(gòu),TCP的數(shù)據(jù)傳輸過程,接著討論了TCP的流量控制機(jī)制,最后針對(duì)TCP的重點(diǎn)部分擁塞控制進(jìn)行了分析,討論了幾個(gè)TCP擁塞控制算法。</p><p&

6、gt;  關(guān)鍵詞:TCP協(xié)議,流量控制,擁塞控制</p><p>  The Flow Contral and Congestion Control in TCP Protocol</p><p>  Author: Etvgbd </p><p>  Tutor: Rtvghhh</p><p><b>  Abstract<

7、;/b></p><p>  Computer network technology is one of the most rapidly developing of computer technology today,and the computer network protocols is the key to ensure the network is stable and reliable oper

8、ation. TCP protocol, as one of the core protocols of the network protocol,is vary important, so to research and improve the protocol is one of the important means to promote the development of the network. </p>&l

9、t;p>  With the rapid growth of Internet scale and the Internet application, network congestion and data conflict problem has aroused the concern of the people closely. Congestion control and flow control technology, a

10、ccording to the theory of network congestion and data conflict has become the core technology in the field of network. The flow control object is the receiver, the purpose is to make the sending rate does not exceed the

11、capacity at the receiving end. Congestion control object is the netwo</p><p>  TCP flow control is mainly depended on the sliding window, by flow constraints, and reduce the loss of data at the receiving end

12、, to improve the transmission efficiency, make full use of the receiver.</p><p>  The main principle of TCP congestion control relies on a congestion window (cwnd) to control the window size value represents

13、 the ability to send out but not yet received the maximum data packet ACK Duan, clear window, so the greater the speed of data sent the faster, but also more likely to make the network congestion occurs, if the window is

14、 1, then reduced to a stop such agreement, each sending a data, must wait for confirmation of the other party can send a second packet, the data clearly tr</p><p>  Firstly, the development of the TCP protoc

15、ol a brief overview, and then analyzed the structure of TCP protocol, TCP data transfer process, followed by a discussion of the TCP flow control mechanism, the key part of the final for the TCP congestion control are an

16、alyzed, discussed Several TCP congestion control algorithm.</p><p>  Key Words :TCP protocol, Flow control,Congestion control</p><p><b>  目 錄</b></p><p><b>  1

17、 緒論1</b></p><p>  1.1 TCP的發(fā)展過程與設(shè)計(jì)目標(biāo)1</p><p>  1.1.1 TCP的發(fā)展過程1</p><p>  1.1.2 TCP的設(shè)計(jì)目標(biāo)1</p><p>  1.2 論文結(jié)構(gòu)2</p><p>  2 TCP協(xié)議3</p><

18、;p>  2.1 TCP的報(bào)文段4</p><p>  2.1.1 TCP的報(bào)文格式4</p><p>  2.1.2 TCP報(bào)文封裝5</p><p>  2.2 TCP的數(shù)據(jù)傳輸6</p><p>  2.2.1 TCP連接的建立6</p><p>  2.2.2 TCP連接的釋放7&

19、lt;/p><p>  3 TCP協(xié)議中的流量控制8</p><p>  3.1 滑動(dòng)窗口8</p><p>  3.2 可變窗口流量控制實(shí)例分析8</p><p>  4 TCP的擁塞控制10</p><p>  4.1 擁塞產(chǎn)生的原因10</p><p>  4.2 重發(fā)定

20、時(shí)器管理11</p><p>  4.2.1 RTT的估算12</p><p>  4.2.2 RTO的計(jì)算12</p><p>  4.3 TCP 擁塞控制所采用的機(jī)制13</p><p>  5 TCP擁塞控制算法17</p><p>  5.1 TCP 的早期實(shí)現(xiàn)17</p>

21、<p>  5.2 TCP Tahoe17</p><p>  5.3 TCP Reno算法17</p><p>  5.4 TCP New-Reno18</p><p>  5.5 TCP SACK19</p><p>  5.6 TCP Vegas20</p><p><b>

22、;  結(jié) 論22</b></p><p><b>  致 謝23</b></p><p><b>  參考文獻(xiàn)24</b></p><p><b>  附 錄25</b></p><p><b>  1 緒論</b>

23、</p><p>  計(jì)算機(jī)網(wǎng)絡(luò)是計(jì)算機(jī)和通信密切結(jié)合的產(chǎn)物,近些年來得到了迅速的發(fā)展,已逐漸成為信息社會(huì)的基石。網(wǎng)絡(luò)協(xié)議是計(jì)算機(jī)中不可缺少的的一個(gè)重要組成部分,它是計(jì)算機(jī)和計(jì)算機(jī)之間以及計(jì)算機(jī)和其他設(shè)備之間進(jìn)行數(shù)據(jù)通信的必要條件。TCP協(xié)議作為重要的網(wǎng)絡(luò)協(xié)議也是有了很大的發(fā)展。</p><p>  1.1 TCP的發(fā)展過程與設(shè)計(jì)目標(biāo)</p><p>  認(rèn)識(shí)來源

24、于實(shí)踐,而認(rèn)識(shí)的最終目標(biāo)也正是服務(wù)于實(shí)踐。只有了解TCP的發(fā)展歷史以及相應(yīng)的設(shè)計(jì)目標(biāo),我們才能對(duì)TCP擁有較為全面的認(rèn)識(shí),從而更好地研究TCP技術(shù),滿足越來越高的應(yīng)用需求。</p><p>  1.1.1 TCP的發(fā)展過程</p><p>  互聯(lián)網(wǎng)最初源于美國國防部的ARPANET計(jì)劃。上世紀(jì)60年代中期正是冷戰(zhàn)的高峰,美國國防部希望有一個(gè)命令和控制網(wǎng)絡(luò),以確保在核戰(zhàn)爭的條件下幸免于難

25、,而傳統(tǒng)基于電路交換的電話網(wǎng)絡(luò)則過于脆弱。國防部指定其下屬的高級(jí)研究計(jì)劃局解決這個(gè)問題,從而誕生ARPANET,其最大特點(diǎn)是采用無連接的端到端報(bào)文交換服務(wù)。到了80年代中期,演變?yōu)榛ヂ?lián)網(wǎng)。TCP協(xié)議最初只是作為NSFNET的程序規(guī)范,即RFC 793,這也是最早的較為完整且齊全的TCP規(guī)范。這個(gè)規(guī)范簡單描述了如何進(jìn)行主機(jī)到主機(jī)的可靠傳輸,并描述了傳輸控制協(xié)議執(zhí)行的功能,相應(yīng)的實(shí)現(xiàn)程序及程序接口。TCP協(xié)議在設(shè)計(jì)之初就被賦予了很高的使命,

26、需要成為報(bào)文交換計(jì)算機(jī)網(wǎng)絡(luò)和這些網(wǎng)絡(luò)互聯(lián)系統(tǒng)中的高可靠性傳輸協(xié)議。需要明確的是,網(wǎng)絡(luò)中的可靠傳輸包括兩方面:首先是數(shù)據(jù)的正確,由于以前的傳輸介質(zhì)質(zhì)量很差,所以在傳輸層及以下各層協(xié)議中都實(shí)現(xiàn)了校驗(yàn)和計(jì)算;其次是數(shù)據(jù)的完整保序,這個(gè)特性需要TCP執(zhí)行復(fù)雜的操作來實(shí)現(xiàn),通常我們強(qiáng)調(diào)TCP的可靠傳輸時(shí)主要指后者。</p><p>  1.1.2 TCP的設(shè)計(jì)目標(biāo)</p><p>  在TCP設(shè)計(jì)

27、之初,網(wǎng)絡(luò)技術(shù)剛剛起步,相應(yīng)的硬件設(shè)施只能達(dá)到很低的水平,應(yīng)用需求也十分簡單,諸多因素導(dǎo)致TCP協(xié)議的設(shè)計(jì)目標(biāo)從開始就已經(jīng)先天不足。在設(shè)計(jì)TCP協(xié)議時(shí),由于人們對(duì)網(wǎng)絡(luò),尤其是對(duì)大型互聯(lián)網(wǎng)絡(luò)缺乏本質(zhì)的認(rèn)識(shí),從而遺漏了許多TCP協(xié)議應(yīng)該具備的重要特征。例如,我們現(xiàn)在熟知的擁塞控制,在最初協(xié)議設(shè)計(jì)中就沒能得到體現(xiàn)。 TCP最初的設(shè)計(jì)目標(biāo)只是在進(jìn)程間提供可靠、安全的邏輯鏈路,并在此基礎(chǔ)之上提供可靠的傳輸服務(wù)。需要強(qiáng)調(diào)的是,TCP對(duì)網(wǎng)絡(luò)并不做任何

28、假設(shè),它的主要功能就是提供可靠的邏輯鏈路。為了能夠在不可靠的網(wǎng)絡(luò)上進(jìn)行可靠的通信,協(xié)議必須提供如下功能:能夠進(jìn)行基本的數(shù)據(jù)傳輸、保證數(shù)據(jù)的可靠性、進(jìn)行適當(dāng)?shù)牧髁靠刂?、維護(hù)通信狀態(tài)的集合、使用并行多路技術(shù)以及保證通信的優(yōu)先級(jí) 和安全性。</p><p><b>  1.2 論文結(jié)構(gòu)</b></p><p>  本文主要圍繞下列問題展開研究:</p>&l

29、t;p>  1.TCP的結(jié)構(gòu)和數(shù)據(jù)傳輸過程</p><p>  2.TCP的流量控制機(jī)制</p><p>  3.TCP的擁塞控制與擁塞控制算法</p><p><b>  2 TCP協(xié)議</b></p><p>  TCP 協(xié)議是目前互聯(lián)網(wǎng)上應(yīng)用最廣泛的傳輸層協(xié)議。它主要提供端到端可靠的字節(jié)流傳送服務(wù)。<

30、/p><p>  TCP 是一個(gè)面向連接的協(xié)議,即在端系統(tǒng)進(jìn)行數(shù)據(jù)傳輸之前要建立連接,連接屬于全雙工方式(即數(shù)據(jù)可以在兩個(gè)方向上同時(shí)進(jìn)行傳輸)。TCP 在不可靠的IP 網(wǎng)絡(luò)層上提供可靠的數(shù)據(jù)傳輸服務(wù),即所有被傳輸?shù)臄?shù)據(jù)最終都應(yīng)到達(dá)接收端。在TCP 中,接收端對(duì)其所接收的每一個(gè)分組都進(jìn)行確認(rèn),在一定時(shí)間范圍內(nèi)沒有得到確認(rèn)的分組會(huì)被發(fā)送方重新進(jìn)行發(fā)送。接收端如果收到一個(gè)重復(fù)的分組,將會(huì)丟棄該分組,如果收到亂序的分組,則對(duì)

31、這個(gè)分組進(jìn)行重新排序。每個(gè)分組都會(huì)有自己對(duì)應(yīng)的序列號(hào),發(fā)送方可以通過分組確認(rèn)報(bào)文獲得接收端所希望接收的下一個(gè)分組的序列號(hào)。當(dāng)通信雙方均有數(shù)據(jù)要發(fā)送時(shí),TCP 可以將確認(rèn)信息放在數(shù)據(jù)分組中發(fā)送以減少控制信息帶來的額外流量。TCP協(xié)議對(duì)數(shù)據(jù)單元的傳輸及重傳策略,對(duì)于網(wǎng)絡(luò)的擁塞狀況有著深刻的影響。</p><p>  概括來說,TCP 協(xié)議為應(yīng)用層提供了以下服務(wù):</p><p>  1.流交付

32、服務(wù):TCP 協(xié)議允許發(fā)送進(jìn)程以字節(jié)流的形式來傳遞數(shù)據(jù),而接收進(jìn)程也把數(shù)據(jù)作為字節(jié)流來接收。這樣,TCP 協(xié)議使得兩個(gè)進(jìn)程好像在一個(gè)假想的“管道”中傳送兩個(gè)進(jìn)程的數(shù)據(jù)。</p><p>  2.全雙工服務(wù):即數(shù)據(jù)可在同一時(shí)間雙向流動(dòng)。每一個(gè)TCP 端系統(tǒng)都有發(fā)送緩存和接收緩存,而兩個(gè)方向都可以發(fā)送報(bào)文段。</p><p>  3.面向連接服務(wù):TCP 通過一條虛擬連接來傳送數(shù)據(jù)。當(dāng)TCP

33、報(bào)文被封裝成IP 分組后,每一個(gè)分組可以走不同的路徑來到達(dá)目的端,因此收到的IP 分組可能會(huì)亂序,可能會(huì)丟失,或者受到損傷,并可能經(jīng)過重傳。但是TCP 創(chuàng)建了面向流的環(huán)境,它負(fù)責(zé)按順序?qū)⑼暾臄?shù)據(jù)交付給應(yīng)用程序。</p><p>  4.流量控制:流量控制定義了發(fā)送端在收到從接收端發(fā)來的確認(rèn)之前可以發(fā)送的數(shù)據(jù)量。TCP 協(xié)議在緩存上定義了一個(gè)窗口,緩存是用來暫時(shí)存放從應(yīng)用程序傳遞來并準(zhǔn)備發(fā)送的數(shù)據(jù),TCP 發(fā)送端

34、就根據(jù)這個(gè)窗口的大小來發(fā)送數(shù)據(jù)。這就是所謂的滑動(dòng)窗口機(jī)制。</p><p>  5.差錯(cuò)控制:TCP 是可靠的傳輸層協(xié)議,這就表示,當(dāng)應(yīng)用程序把數(shù)據(jù)流交付給IP 層后,TCP協(xié)議應(yīng)當(dāng)把數(shù)據(jù)流按順序,沒有差錯(cuò),沒有損傷地交付給另一個(gè)應(yīng)用程序。為了實(shí)現(xiàn)差錯(cuò)控制,TCP 協(xié)議采用了以下幾種機(jī)制:檢測受到損傷的、丟失的、失序的和重復(fù)的數(shù)據(jù)包;在檢測到差錯(cuò)后,能夠糾正差錯(cuò)。</p><p>  6.

35、擁塞控制:互聯(lián)網(wǎng)由許多網(wǎng)絡(luò)和連接設(shè)備組成。發(fā)送端發(fā)送的分組要經(jīng)過多個(gè)路由器后才能到達(dá)最后的接收端。路由器為了保證鏈路的利用率,一般都會(huì)提供緩存來暫時(shí)存儲(chǔ)突發(fā)到達(dá)的分組,但是當(dāng)路由器接收過多的分組時(shí),就可能導(dǎo)致路由器緩沖區(qū)溢出,即該路由器節(jié)點(diǎn)發(fā)生擁塞,部分分組就會(huì)被丟棄。當(dāng)發(fā)送端重傳這些分組時(shí),會(huì)造成更加嚴(yán)重的擁塞,以致于使網(wǎng)絡(luò)癱瘓。因此我們必須在端系統(tǒng)采用一些擁塞控制機(jī)制來保證網(wǎng)絡(luò)不會(huì)發(fā)生擁塞,同時(shí)又能充分利用網(wǎng)絡(luò)的鏈路資源。TCP協(xié)議

36、采用了慢啟動(dòng),擁塞避免等算法來對(duì)網(wǎng)絡(luò)擁塞進(jìn)行控制,從而在一定程度上保證網(wǎng)絡(luò)的穩(wěn)定運(yùn)行。</p><p>  2.1 TCP的報(bào)文段</p><p>  2.1.1 TCP的報(bào)文格式</p><p>  TCP 軟件在兩臺(tái)計(jì)算機(jī)之間傳輸?shù)臄?shù)據(jù)單元稱為報(bào)文段(segment)。通過報(bào)文段的交互來建立連接、傳輸數(shù)據(jù)、發(fā)出確認(rèn)、通告窗口大小及關(guān)閉連接。圖2.1表示出了T

37、CP 報(bào)文段的格式,每個(gè)報(bào)文段分為兩個(gè)部分:首部和數(shù)據(jù)。報(bào)文段既可以用來建立連接,也可以運(yùn)載數(shù)據(jù)和應(yīng)答。</p><p>  圖2.1 TCP報(bào)文段格式</p><p>  TCP報(bào)文段首部固定部分各字段的意義如下:</p><p>  源端口和目的端口:各占2個(gè)字節(jié),是傳輸層與高層的接口。</p><p>  序列號(hào):占4字節(jié),是本報(bào)文段

38、所發(fā)送的數(shù)據(jù)部分第一個(gè)字節(jié)的序號(hào)。在TCP輸送的數(shù)據(jù)流中,每一個(gè)字節(jié)都有一個(gè)順序號(hào)。例如,在一個(gè)報(bào)文段中,序號(hào)為300,而報(bào)文中的數(shù)據(jù)為100字節(jié),那么,在下一個(gè)報(bào)文段中,其順序號(hào)就是400。由此可見,TCP是面向數(shù)據(jù)流的。</p><p>  確認(rèn)序列號(hào):占4字節(jié),是期望收到對(duì)方下次發(fā)送數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。</p><p>  首部長度:占4bit,它指出以32bit 為單位的TCP

39、 報(bào)文段首部的長度。在首部字段后面是6bit的保留字段,是為將來的應(yīng)用而保留的,目前置為0。</p><p>  緊急比特URG:當(dāng)URG = 1時(shí),表明此報(bào)文段應(yīng)該盡快發(fā)送,而不要按照原來的排隊(duì)順序發(fā)送。它通常與緊急指針(位于第5個(gè)32bit 字段中的后一半)配合使用,緊急指針指出在本報(bào)文段中的緊急數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)。緊急指針使接收方可以知道緊急數(shù)據(jù)共有多長。需要注意的是,即使窗口大小為0時(shí)也可發(fā)送緊急數(shù)

40、據(jù)。</p><p>  確認(rèn)比特ACK:只有當(dāng)ACK = 1時(shí)確認(rèn)序號(hào)字段才有意義。當(dāng)ACK = 0時(shí),確認(rèn)序號(hào)無意義。</p><p>  急迫比特PSH:當(dāng)PSH = 1時(shí),表明請(qǐng)求遠(yuǎn)地TCP將本報(bào)文段立即傳送給其應(yīng)用層,而不要等整個(gè)緩沖區(qū)都填滿之后再向上交付。</p><p>  復(fù)位比特RST:當(dāng)RST = 1時(shí),表明出現(xiàn)嚴(yán)重差錯(cuò),必須釋放連接,然后再重新

41、建立連接。</p><p>  同步比特SYN:在連接建立時(shí)使用。當(dāng)SYN = 1而ACK = 0時(shí),表明這是一個(gè)連接請(qǐng)求報(bào)文段。對(duì)方若同意建立連接,則應(yīng)在發(fā)回的報(bào)文段中使SYN = 1和ACK = 1。因此SYN置為1,就表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文,而ACK 比特的值用來區(qū)分是哪一種報(bào)文。</p><p>  終止比特FIN:用來釋放一個(gè)連接。當(dāng)FIN = 1時(shí),表明欲發(fā)送的字節(jié)

42、串已經(jīng)發(fā)完,并請(qǐng)求釋放傳輸層連接。</p><p>  窗口:占2字節(jié)。窗口字段提供端到端的流量控制,它表示在確認(rèn)了字節(jié)之后還可以發(fā)送多少個(gè)字節(jié)。此字段值為0是合法的,表示它已經(jīng)收到了包括確認(rèn)號(hào)減1(即己發(fā)送的所有報(bào)文段)在內(nèi)的所有報(bào)文段,但當(dāng)前接收方急需暫停。之后通過發(fā)送一個(gè)帶有相同確認(rèn)號(hào)和滑動(dòng)窗口字段非零值的報(bào)文段來恢復(fù)原來的傳輸。</p><p>  校驗(yàn)和:占2字節(jié)。校驗(yàn)和字段覆蓋

43、的范圍包括首部、數(shù)據(jù)和概念上的偽TCP首部之和。</p><p>  選項(xiàng)和填充:占2字節(jié)。為可選部分,用于TCP具體選項(xiàng)。填充的作用是確保首部大小是一個(gè)32位的整倍數(shù)。</p><p>  2.1.2 TCP報(bào)文封裝</p><p>  如圖2.2所示,TCP報(bào)文段封裝在IP數(shù)據(jù)報(bào)中,然后再封裝成數(shù)據(jù)鏈路層中的幀,并通過物理層傳輸?shù)綌?shù)據(jù)的接收端,在接受端數(shù)據(jù)鏈路

44、層剝?nèi)氖撞?,然后送到接收端的網(wǎng)絡(luò)層,剝?nèi)P首部再發(fā)送到傳輸層,所剩下的就是發(fā)送段的TCP報(bào)文段。</p><p>  圖2.2 報(bào)文段的封裝</p><p>  2.2 TCP的數(shù)據(jù)傳輸</p><p>  2.2.1 TCP連接的建立</p><p>  TCP以全雙工的方式傳輸數(shù)據(jù)。當(dāng)兩個(gè)機(jī)器重的兩個(gè)TCP建立連接候,他們都能夠

45、同時(shí)向?qū)Ψ桨l(fā)送報(bào)文段。這就表示,在任何數(shù)據(jù)傳輸之前,每一方都必須對(duì)通信進(jìn)行初始化,并得到對(duì)方的認(rèn)可,即TCP的連接。TCP的連接建立稱為“三次握手"。1.客戶發(fā)送第一個(gè)報(bào)文段,SYN報(bào)文段,在這個(gè)報(bào)文段中只有SYN標(biāo)志置1。這個(gè)報(bào)文段的作用是使序號(hào)同步??蛻舳诉x擇一個(gè)隨機(jī)數(shù)SEQ作為第一序號(hào),并把這個(gè)序號(hào)發(fā)給服務(wù)器。2.服務(wù)器發(fā)送第二個(gè)報(bào)文段,即SYN+ACK報(bào)文段,其中有兩個(gè)標(biāo)志置為l。這個(gè)報(bào)文段有兩個(gè)目的,一個(gè)是使用SYN

46、同步初始序號(hào),另一個(gè)是服務(wù)器使用ACK標(biāo)志確認(rèn)已經(jīng)從客戶端收到的SYN報(bào)文段,同時(shí)給出期望從客戶端收到的下一個(gè)序號(hào)。3.客戶端發(fā)送第三個(gè)報(bào)文段。這僅僅是一個(gè)ACK報(bào)文段。它使用ACK標(biāo)志和確認(rèn)號(hào)字段來確認(rèn)收到了第二個(gè)報(bào)文。</p><p><b>  實(shí)例分析: </b></p><p>  圖2.3 TCP連接的建立</p><p>  下面

47、我們以主機(jī)A和主機(jī)B兩個(gè)應(yīng)用程序?yàn)槔齺矸治?。如圖2.3所示。這個(gè)過程從服務(wù)器開始。主機(jī)A告訴它的TCP,它已經(jīng)準(zhǔn)備好接受連接,這叫做被動(dòng)打開。主機(jī)B發(fā)送請(qǐng)求叫做主動(dòng)打開。A的TCP向B的TCP發(fā)出連接請(qǐng)求報(bào)文段,其首部中的同比特SYN應(yīng)置1,同時(shí)選擇一個(gè)序號(hào)X,我們選取X = 800,表明在后面?zhèn)鬏敂?shù)據(jù)的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)是X+1,即為801。B的TCP收到連接請(qǐng)求報(bào)文段后,如同意則發(fā)回確認(rèn)。在確認(rèn)報(bào)文段中將SYN和ACK都置1,確認(rèn)

48、號(hào)為X+1,即為801,同時(shí)為自己選擇一個(gè)序號(hào)Y,令Y = 1500。A的TCP收到B的確認(rèn)后,要向B給出確認(rèn),其ACK置1,確認(rèn)號(hào)為Y+1,即為1501,自己的序號(hào)為X+1,為801。</p><p>  2.2.2 TCP連接的釋放</p><p>  參加交換數(shù)據(jù)的雙方的任何一方都可以關(guān)閉連接。當(dāng)一方向的連接被終止時(shí),另一方還可以繼續(xù)向?qū)Ψ桨l(fā)送數(shù)據(jù)。建立一個(gè)連接需要三次握手,終止連

49、接要經(jīng)過四次握手。</p><p>  圖2.4 TCP連接的釋放</p><p><b>  實(shí)例分析:</b></p><p>  如圖2.4所示,主機(jī)A的應(yīng)用進(jìn)程先向其TCP發(fā)送連接釋放請(qǐng)求,并且不再發(fā)送數(shù)據(jù)。TCP通知對(duì)方要釋放從A到B這個(gè)方向的連接,將發(fā)往主機(jī)B的TCP報(bào)文段首部的FIN置1,其序號(hào)X等于前面已傳送過的數(shù)據(jù)的最后一個(gè)字

50、節(jié)的序號(hào)加1,為X = 1001。主機(jī)B的TCP收到釋放鏈接通知后發(fā)出確認(rèn),其序號(hào)為Y = 1700,確認(rèn)號(hào)為X+1,即1002,同時(shí)通知高層應(yīng)用進(jìn)程,應(yīng)用進(jìn)程通知TCP釋放連接。B發(fā)出的連接釋放報(bào)文段必需將FIN和ACK置1,并使其序號(hào)仍為Y,重復(fù)上次發(fā)送的ACK = X+1。A對(duì)此確認(rèn),將ACK置1,ACK=Y+1 = 1701,自己的序號(hào)是X+1為1002。</p><p>  3 TCP協(xié)議中的流量控制

51、</p><p>  如果發(fā)送端發(fā)送的數(shù)據(jù)過多或者數(shù)據(jù)發(fā)送速率過快,致使接收端來不及處理,則會(huì)造成數(shù)據(jù)在接收端的丟棄。為了避免這種現(xiàn)象的發(fā)生,通常的處理辦法是采用流量控制,即控制發(fā)送端發(fā)送的數(shù)據(jù)量及數(shù)據(jù)發(fā)送速率。時(shí)期不超過接收端的承受能力,這個(gè)能力主要指接收端的緩存和數(shù)據(jù)處理速度。</p><p>  流量控制是與點(diǎn)到點(diǎn)的通信量有關(guān)的,是針對(duì)端系統(tǒng)中資源受限而設(shè)置的。主要解決快速發(fā)送方與慢

52、速接收方的問題。流量控制的目的是在有限的接收端承受能力的情況下,通過流量約束,減少接收端出的數(shù)據(jù)丟失,提高數(shù)據(jù)發(fā)送效率,充分利用接收端資源。</p><p><b>  3.1 滑動(dòng)窗口</b></p><p>  TCP的特點(diǎn)之一是提供體積可變的滑動(dòng)窗口機(jī)制,支持端到端的流量控制。TCP的窗口以字節(jié)為單位進(jìn)行調(diào)整,以適應(yīng)接收方的處理能力。處理過程如下:首先,在TC

53、P連接階段,雙方協(xié)商窗口尺寸,同時(shí)接收方預(yù)留數(shù)據(jù)緩沖區(qū);其次,發(fā)送方根據(jù)協(xié)商的結(jié)果,發(fā)送符合窗口尺寸的數(shù)據(jù)字節(jié)流,并等待對(duì)方的確認(rèn);最后,發(fā)送方根據(jù)確認(rèn)信息,改變窗口的尺寸。</p><p><b>  圖3.1 滑動(dòng)窗口</b></p><p>  圖3.1表示發(fā)送窗口為400字節(jié),發(fā)送端已發(fā)送300字節(jié)的數(shù)據(jù),但是只收到對(duì)前100字節(jié)的確認(rèn),同時(shí)窗口的大小不變,現(xiàn)

54、在發(fā)送端還可以發(fā)送200字節(jié)。</p><p>  3.2 可變窗口流量控制實(shí)例分析</p><p>  設(shè)主機(jī)A向主機(jī)B發(fā)送數(shù)據(jù),如圖3.2所示,雙方規(guī)定窗口值是400。再設(shè)每一個(gè)報(bào)文段是100字節(jié)長,序號(hào)的初始值為1。主機(jī)B進(jìn)行3次流量控制,第一次將窗口減少為300字節(jié),第二次減為200字節(jié),最后一次減為08字節(jié),即不允許發(fā)送數(shù)據(jù)。</p><p>  圖3.

55、2 可變窗口流量控制</p><p>  4 TCP的擁塞控制</p><p>  擁塞是一種持續(xù)過載的網(wǎng)絡(luò)狀態(tài),此時(shí)用戶對(duì)網(wǎng)絡(luò)資源(緩存空間、鏈路帶寬容量和中間節(jié)點(diǎn)的處理能力等)的需求超過了其固有的容量。網(wǎng)絡(luò)的性能(功率、往返時(shí)間RTT、吞吐量)與負(fù)荷的關(guān)系可以用圖4.1來說明。可以看出當(dāng)負(fù)荷較小時(shí),網(wǎng)絡(luò)吞吐量和資源功率(資源功率=吞吐量/響應(yīng)時(shí)間)隨負(fù)荷的增長的以指數(shù)增長,RTT隨負(fù)

56、荷的增長略有上升,當(dāng)負(fù)荷到達(dá)膝點(diǎn)時(shí),功率到達(dá)最大值,在此之后吞吐量的增長遠(yuǎn)遠(yuǎn)慢于負(fù)荷的增長,RTT迅速上升,功率快速下降,若繼續(xù)增長負(fù)荷,則存在丟包的可能。負(fù)荷到達(dá)崖點(diǎn)時(shí),吞吐量達(dá)到最大值,功率到達(dá)最小值。RTT以指數(shù)增長,系統(tǒng)處于擁塞狀態(tài)。膝點(diǎn)指資源功率到達(dá)最大值的負(fù)荷量。崖點(diǎn)指資源功率下降到最小值且開始丟包時(shí)的負(fù)荷量。因此膝點(diǎn)是最為理想的工作點(diǎn),擁塞控制就是采用某種策略或機(jī)制,保持網(wǎng)絡(luò)工作在正常的狀態(tài)下,也就是使網(wǎng)絡(luò)經(jīng)常工作在崖點(diǎn)左

57、側(cè)的區(qū)域內(nèi)。若一種控制機(jī)制使得網(wǎng)絡(luò)工作在膝點(diǎn)附近,該方法稱為擁塞避免;若一種控制機(jī)制使網(wǎng)絡(luò)工作在崖點(diǎn)或崖點(diǎn)以后的網(wǎng)絡(luò)回復(fù)至膝點(diǎn)前后,該方法稱為擁塞恢復(fù)。</p><p>  圖4.1 網(wǎng)絡(luò)性能與負(fù)荷之間的關(guān)系</p><p>  4.1 擁塞產(chǎn)生的原因</p><p>  隨著通信和計(jì)算機(jī)技術(shù)的成熟和發(fā)展,互聯(lián)網(wǎng)規(guī)模的增長,網(wǎng)絡(luò)用戶和網(wǎng)絡(luò)應(yīng)用都在快速地增長,人們對(duì)

58、包括話音、文字、數(shù)據(jù)、圖像等多種媒體通信的需求不斷增大。在計(jì)算機(jī)網(wǎng)絡(luò)中有許多網(wǎng)絡(luò)資源,如鏈路的容量、交換節(jié)點(diǎn)中的緩沖區(qū)和處理機(jī)等,如果在某段時(shí)間,用戶(端系統(tǒng))加于網(wǎng)絡(luò)的負(fù)載大于網(wǎng)絡(luò)資源容量和處理能力,就會(huì)產(chǎn)生擁塞,網(wǎng)絡(luò)的性能就要變壞。若網(wǎng)絡(luò)中的許多資源同時(shí)產(chǎn)生擁塞,網(wǎng)絡(luò)的性能就要明顯變差,整個(gè)網(wǎng)絡(luò)的吞吐量將隨輸入負(fù)載的增大而下降,表現(xiàn)為數(shù)據(jù)包時(shí)延增加、丟棄概率增大、上層應(yīng)用系統(tǒng)性能下降等。</p><p>  

59、總的來說,資源緊缺和資源的不合理利用時(shí)產(chǎn)生擁塞控制的直接原因,具體表現(xiàn)在:</p><p>  1.存儲(chǔ)空間不足:幾個(gè)輸入數(shù)據(jù)流共同需要同一個(gè)輸出端口,在這個(gè)端口就會(huì)建立排隊(duì)。如果沒有足夠的存儲(chǔ)空間存儲(chǔ),數(shù)據(jù)包就會(huì)被丟棄。對(duì)突發(fā)數(shù)據(jù)流更是如此。增加存儲(chǔ)空間在某種程度上可以緩解這一矛盾,但如果路由器有無限存儲(chǔ)量時(shí),擁塞只會(huì)交得更壞,而不是更好,因?yàn)樵诰W(wǎng)絡(luò)里數(shù)據(jù)包經(jīng)過長時(shí)間排隊(duì)完成轉(zhuǎn)發(fā)時(shí),它們?cè)缂撼瑫r(shí),源端認(rèn)為它們已

60、經(jīng)被丟棄,而這些數(shù)據(jù)包還會(huì)繼續(xù)向下一個(gè)路由器轉(zhuǎn)發(fā),從而浪費(fèi)網(wǎng)絡(luò)資源,加重網(wǎng)絡(luò)擁塞。</p><p>  2.帶寬容量不足:低速鏈路對(duì)高速數(shù)據(jù)流的輸入也會(huì)產(chǎn)生擁塞。根據(jù)香農(nóng)信息理論,任何信道帶寬最大值即信道容量 (N為信道白噪聲的平均功率,S為信源的平均功率,B為信道帶寬)。所有信源發(fā)送的速率R必須小于或等于信道容量C。如果R>C,則在理論上無差錯(cuò)傳輸就是不可能的,所以在網(wǎng)絡(luò)低速鏈路處就會(huì)形成帶寬瓶頸,當(dāng)其滿

61、足不了通過它的所有源端帶寬要求時(shí),網(wǎng)絡(luò)就會(huì)發(fā)生擁塞。</p><p>  3.處理器處理能力弱、速度慢也能引起擁塞:避免擁塞的發(fā)生,對(duì)以上原因需綜臺(tái)考慮。擁塞雖然是由于網(wǎng)絡(luò)資源的稀缺引起的,但單純?cè)黾淤Y源并不能避免擁塞的發(fā)生。定程度時(shí),只會(huì)加重?fù)砣?,而不是減輕擁塞,是因?yàn)楫?dāng)報(bào)文段經(jīng)過長時(shí)間排隊(duì)完成轉(zhuǎn)發(fā)時(shí),它們很可能早己超時(shí)。從而引起源端超時(shí)重發(fā),而這些報(bào)文段還會(huì)繼續(xù)傳輸?shù)较乱宦酚善?,從而浪費(fèi)網(wǎng)絡(luò)資源,加重網(wǎng)絡(luò)擁塞

62、。事實(shí)上,緩存空間不足導(dǎo)致的丟包更多的是擁塞的“癥狀”而非原因。另外,增加鏈路帶寬及提高處理能力也不能解決擁塞問題。</p><p>  單純地增加網(wǎng)絡(luò)資源之所以不能解決擁塞問題,是因?yàn)閾砣旧硎且粋€(gè)動(dòng)態(tài)問題,它不可能只靠靜態(tài)的方案來解決,而需要網(wǎng)絡(luò)協(xié)議在網(wǎng)絡(luò)出現(xiàn)擁塞時(shí)保護(hù)網(wǎng)絡(luò)的正常運(yùn)行,即需要對(duì)網(wǎng)絡(luò)的可能擁塞進(jìn)行控制。</p><p>  擁塞一旦發(fā)生往往會(huì)形成一個(gè)不斷加重的過程,如不加

63、控制,就會(huì)影響網(wǎng)絡(luò)的性能,嚴(yán)重的情況甚至?xí)拐麄€(gè)網(wǎng)絡(luò)發(fā)生癱瘓。所以,擁塞控制是網(wǎng)絡(luò)中必不可少的機(jī)制。</p><p>  4.2 重發(fā)定時(shí)器管理</p><p>  重發(fā)定時(shí)器管理是TCP擁塞控制中的一個(gè)關(guān)鍵技術(shù)。</p><p>  TCP每發(fā)送一個(gè)報(bào)文段,就設(shè)置一次計(jì)數(shù)器。只要計(jì)時(shí)器設(shè)置重傳時(shí)間到而還沒有收到確認(rèn),就要重傳這一報(bào)文段。重傳時(shí)間間隔的取值(RTO

64、)直接影響到發(fā)送端對(duì)網(wǎng)絡(luò)的反應(yīng)情況。取值太小,會(huì)造成不必要的重傳,從而浪費(fèi)網(wǎng)絡(luò)資源:取值太大,對(duì)報(bào)文段丟失的反應(yīng)就會(huì)很遲緩。RTO的值與RTT(Round Trip Time)有很大的關(guān)系。所以,正確估算RTT的值并合理地選擇RTO的值對(duì)TCP的性能有重要影響。</p><p>  4.2.1 RTT的估算</p><p>  整個(gè)端到端路徑的往返時(shí)間RTT(Round Trip Tim

65、e)指從源端發(fā)出一個(gè)報(bào)文段到收到相應(yīng)的確認(rèn)之間的時(shí)間間隔。RTT 包括正向和反向路徑中各跳的鏈路時(shí)延(傳輸時(shí)延和物理傳播時(shí)延)和中間結(jié)點(diǎn)的處理時(shí)延(排隊(duì)、路由查找、轉(zhuǎn)發(fā))。RTT 隨著各個(gè)中間結(jié)點(diǎn)的排隊(duì)情況不同,表現(xiàn)出一定的隨機(jī)性。如果中間結(jié)點(diǎn)使用較長的隊(duì)列,RTT 的變化會(huì)很大。一種計(jì)算RTT 的方法就是對(duì)觀察到的一些報(bào)文段的往返時(shí)間簡單地取平均,但是,通常我們希望對(duì)更近期的采樣值給予更大的權(quán)值,因?yàn)樗鼈兏赡芊从硨淼男袨椋虼?,?/p>

66、用的_種技術(shù)為指數(shù)平均法。其平滑RTT 的值的計(jì)算如下:</p><p>  其中SRTT(K)是前K個(gè)報(bào)文段的平滑往返時(shí)間估值:α是指數(shù)平均的權(quán)值(0<α<1),α 越小,給予更迸的觀察值的權(quán)值就越大,通常α的取值為7/8,此時(shí),將幾乎所有的權(quán)重都給了最近10個(gè)左右的觀察值。</p><p>  4.2.2 RTO的計(jì)算</p><p>  對(duì)RTO

67、的計(jì)算主要有三種方法;RTT方差估計(jì)(Jacobson算法)、指數(shù)RTO退避和Karn算法。</p><p>  1.RTT方差估計(jì): 最初的TCP規(guī)約試圖通過對(duì)RTT估值乘以一個(gè)常數(shù)因子B(通常取B=2)的方法確定RTO的值,但在穩(wěn)定環(huán)境中RTT的方差很低,用上述方法得到的RTO就不必要的取得太高;而在不穩(wěn)定的環(huán)境中,p取值為2可能并不足以防止不必要的重傳。RTT方差估計(jì)是通過平滑RTT方差的倍數(shù)與平滑往返時(shí)間

68、之和來確定定時(shí)器的取值,它可以更有效的計(jì)算RTO的值。完整的算法表達(dá)如下:</p><p><b>  采樣平滑偏差:</b></p><p><b>  平滑偏差:</b></p><p><b>  重發(fā)定時(shí)器:</b></p><p>  一般情況h的取值為1/4,?的取

69、值為4。</p><p>  經(jīng)驗(yàn)證明,此算法可以顯著提高TCP的性能。</p><p>  2.指數(shù)RTO 退避:如果TCP的發(fā)送端在一個(gè)報(bào)文段上發(fā)生超時(shí),它就必須重傳這個(gè)報(bào)文段??紤]到超時(shí)可能是由于網(wǎng)絡(luò)擁塞引起的,為了給網(wǎng)絡(luò)足夠的時(shí)間從擁塞中恢復(fù),一個(gè)更明智的策略是TCP源端在同一報(bào)文段重傳時(shí)增加其RTO,這被稱為退避過程(backoff process)。實(shí)現(xiàn)RTO退避的一種簡單的方

70、法是對(duì)一個(gè)報(bào)文段的每次重傳都將RTO乘以一個(gè)常數(shù)值,即: 。這就使得RTO隨每次重傳而指數(shù)增長。q通常取2,此時(shí)稱之為二進(jìn)制指數(shù)退避(binary exponential backoff)。</p><p>  3.Karn 算法:假定一個(gè)報(bào)文段發(fā)生超時(shí)而必須重傳,如果隨后收到了—個(gè)確認(rèn),那么就有兩種可能:</p><p>  1)報(bào)文段第一次傳輸?shù)腁CK。這種情況下,RTT 僅比期望的更

71、長一些,但卻是網(wǎng)絡(luò)狀況的精確反映。</p><p>  2)是第二次傳輸?shù)腁CK。</p><p>  TCP源端并沒有辦法區(qū)分這兩種情況。如果發(fā)生的是第二種情況而TCP實(shí)體只是簡單地將RTT算成是從第一次傳輸?shù)绞盏紸CK這段時(shí)間,那么這個(gè)時(shí)間就比實(shí)際的RTT要長得多。將這個(gè)錯(cuò)誤的RTT輸入到Jacobson算法中會(huì)產(chǎn)生太高的SRTT和RTO。另外,這個(gè)效果會(huì)向前傳播許多次迭代,因?yàn)橐淮蔚?/p>

72、代產(chǎn)生的SRTT值是下一次迭代的輸入值。</p><p>  一種更糟的方法是將RTT算成從第二次傳輸?shù)绞盏紸CK這段時(shí)間。如果這個(gè)ACK實(shí)際上是對(duì)第一次傳輸?shù)腁CK,那么我們測得的RTT值就比實(shí)際值小許多。從而導(dǎo)致SRTT和RTO值太小。這可能產(chǎn)生正反饋效應(yīng),引起更多的重傳和更多的錯(cuò)誤測量。</p><p>  Karn算法采用以下規(guī)則解決了這個(gè)問題:</p><p&

73、gt;  1)要使用對(duì)重傳報(bào)文段測得的RTT更新SRTT和SDEV。</p><p>  2)在重傳時(shí)使用等式計(jì)算退避RTO。</p><p>  3)后續(xù)各報(bào)文段使用退避RTO值,直到收到了一個(gè)對(duì)未被重傳報(bào)文段的確認(rèn)為止。當(dāng)一個(gè)對(duì)未被重傳報(bào)文段的確認(rèn)收到以后,Jacobson算法又被激活,用來計(jì)算將來的RTO值。</p><p>  4.3 TCP 擁塞控制所采

74、用的機(jī)制</p><p>  為了更好的進(jìn)行擁塞控制,TCP主要采用以下四種機(jī)制:慢啟動(dòng)、擁塞避免、快速重傳和快速恢復(fù)。</p><p><b>  1.慢啟動(dòng):</b></p><p>  當(dāng)連接剛建立或超時(shí)時(shí),進(jìn)入慢啟動(dòng)階段。當(dāng)新建TCP連接時(shí),擁塞窗口被初始化為一個(gè)數(shù)據(jù)包大小。源端按cwnd大小發(fā)送數(shù)據(jù),每收到一個(gè)ACK確認(rèn),就增加一個(gè)數(shù)

75、據(jù)包發(fā)送量,這樣慢啟動(dòng)階段cwnd隨RTT呈指數(shù)級(jí)增長。</p><p>  慢啟動(dòng)采用逐漸增大cwnd的方法,可以防止TCP在啟動(dòng)一個(gè)連接時(shí)向網(wǎng)絡(luò)發(fā)送過多的數(shù)據(jù)包而造成不必要的數(shù)據(jù)丟失和網(wǎng)絡(luò)擁塞,并且它還能夠避免采用單純的AIMD算法造成的吞吐量增加過慢的問題。</p><p>  為了防止cwnd的無限制增長引起網(wǎng)絡(luò)擁塞,引入一個(gè)狀態(tài)變量:慢啟動(dòng)門限值ssthresh。</p&g

76、t;<p>  當(dāng)cwnd<ssthresh時(shí),使用上述的慢啟動(dòng)算法,cwnd隨RTT呈指數(shù)增長。</p><p>  當(dāng)cwnd>ssthresh時(shí),使用擁塞避免算法,減緩cwnd的增長速度。</p><p>  當(dāng)cwnd=ssthresh時(shí),既可使用慢啟動(dòng)算法也可使用擁塞避免算法。</p><p><b>  2.擁塞避免:

77、</b></p><p>  當(dāng)發(fā)現(xiàn)超時(shí)或收到3個(gè)相同ACK確認(rèn)幀時(shí),網(wǎng)絡(luò)發(fā)生了擁塞(主要因?yàn)橛蓚鬏斠鸬臄?shù)據(jù)包損壞和丟失的概率很小(<l%))。此時(shí)就進(jìn)入擁塞避免階段。慢啟動(dòng)門限值(ssthresh)被設(shè)置為當(dāng)前擁塞窗口大小的一半;如果超時(shí),擁塞窗口被置1。如果此時(shí)cwnd<=ssthresh,TCP就重新進(jìn)入慢啟動(dòng)過程;如果cwnd>ssthresh,TCP就執(zhí)行擁塞避免算法,此

78、時(shí),cwnd在每次收到一個(gè)ACK時(shí)只增加1/cwnd個(gè)數(shù)據(jù)包,這樣,在一個(gè)RTT內(nèi),cwnd將增加1,所以在擁塞避免階段,cwnd不是呈指數(shù)增長,而是線性增長。</p><p>  3.快速重傳和快恢復(fù)階段:</p><p>  在擁塞避免階段,當(dāng)數(shù)據(jù)包超時(shí)時(shí),cwnd被置為1,重新進(jìn)入慢啟動(dòng)階段,這會(huì)導(dǎo)致過大地減小發(fā)送窗口尺寸,降低TCP連接的吞吐量。因此,引入了快速重傳和快速恢復(fù)機(jī)制。

79、</p><p>  在快速重傳階段,當(dāng)源端收到3個(gè)或3個(gè)以上重復(fù)的ACK時(shí),就判定隨后的數(shù)據(jù)包丟失,應(yīng)該立刻重傳,進(jìn)入快速恢復(fù)階段。</p><p>  在快速恢復(fù)階段,設(shè)置為ssthresh=cwnd/2;重傳丟失的報(bào)文段;設(shè)置cwnd=ssthersh+n(n為已經(jīng)收到的重復(fù)報(bào)文段的個(gè)數(shù));收到非重復(fù)ACK時(shí),置cwnd=ssthresh,轉(zhuǎn)入擁塞避免階段;如果發(fā)生超時(shí)重傳,則置ss

80、thresh為當(dāng)前cwnd的一半,cwnd=1,重新進(jìn)入慢啟動(dòng)階段。這種方法避免了數(shù)據(jù)包超時(shí)后就重新進(jìn)入慢啟動(dòng)階段,提高了TCP連接的吞吐量。</p><p><b>  實(shí)例分析:</b></p><p>  下面通過幾個(gè)實(shí)例分析一下TCP擁塞控制的幾個(gè)階段。</p><p>  1.慢啟動(dòng)和擁塞避免的實(shí)例</p><p&

81、gt;  先假設(shè)窗口的單位為報(bào)文段,當(dāng)TCP連接進(jìn)行初始化時(shí),將擁塞窗口置為1,即cwnd=1。慢開始門限的初始值設(shè)置為8,即ssthresh=8。發(fā)送端的發(fā)送窗口win不能超過擁塞窗口cwnd和通告窗口awin中的最小值。假定通告窗口awin足夠大,因此發(fā)送窗口win的數(shù)值等于擁塞窗口cwnd的數(shù)值。在執(zhí)行慢啟動(dòng)算法時(shí),擁塞窗口cwnd=1。以后發(fā)送端每收到一個(gè)對(duì)新報(bào)文段的確認(rèn)ACK,就將cwnd+1,開始下一次傳輸。當(dāng)cwnd增長到

82、慢開始門限值ssthresh時(shí),即cwnd=8時(shí),改為擁塞避免算法。假定擁塞窗口的數(shù)值增長到了12時(shí),網(wǎng)絡(luò)出現(xiàn)超時(shí),則更新ssthresh=6,擁塞控制窗口cwnd=1,執(zhí)行慢啟動(dòng)算法。當(dāng)cwnd=6時(shí)改為擁塞避免算法。</p><p>  圖4.2慢啟動(dòng)和擁塞控制的實(shí)例</p><p>  上圖4.2中發(fā)送了3次收到3個(gè)ACK后控制窗口cwnd達(dá)到了慢開始門限值ssthresh=8,進(jìn)入

83、了擁塞避免階段,又傳輸了4次,當(dāng)cwnd=12時(shí),網(wǎng)絡(luò)發(fā)生擁塞,執(zhí)行擁塞避免算法。使cwnd=1,ssthresh=6再開始慢啟動(dòng)階段,當(dāng)cwnd=6時(shí)進(jìn)入擁塞避免階段。</p><p>  2.快重傳和快恢復(fù)的實(shí)例</p><p>  假定發(fā)送端發(fā)送了A1—A4,4個(gè)報(bào)文段,當(dāng)接收端收到A1,A2,A3后就發(fā)出確認(rèn)ACK2,ACK3,ACK4。由于網(wǎng)絡(luò)擁塞使A4丟失了,接收端收到下個(gè)A5

84、發(fā)現(xiàn)序號(hào)不對(duì),但仍收下放在緩存中,同時(shí)發(fā)出確認(rèn)ACK4。發(fā)送端接著發(fā)送A5,A6,接收端收到后還要分別發(fā)送重復(fù)的ACK4。這樣發(fā)送端收到了4個(gè)ACK4,其中3個(gè)是重復(fù)的,發(fā)送端就斷定有分組丟失了立即重傳A4,同時(shí)進(jìn)入快恢復(fù)階段。設(shè)置ssthresh=ssthresh/2,cwnd=ssthresh+3,如果還可以發(fā)送就繼續(xù)發(fā)送A7,若收到新的報(bào)文段的ACK8,則將設(shè)置cwnd=ssthresh。</p><p>

85、  圖4.3 快重傳和快恢復(fù)的實(shí)例</p><p>  上圖4.3在cwnd=12時(shí)收到了3個(gè)重復(fù)的ACK,發(fā)送方斷定有分組丟失開始重傳,進(jìn)入快速恢復(fù)階段,使ssthresh=cwnd/2=6,cwnd=ssthresh+3=9。再經(jīng)過一次傳輸收到新報(bào)文段的確認(rèn)ACK,將cwnd設(shè)置為cwnd=ssthresh,進(jìn)入擁塞避免階段。</p><p>  5 TCP擁塞控制算法</p

86、><p>  TCP協(xié)議經(jīng)過多年的發(fā)展,有了多種具體的實(shí)現(xiàn)。TCP從第一個(gè)實(shí)現(xiàn)到現(xiàn)在,不斷得到改進(jìn)?,F(xiàn)有的TCP擁塞控制算法主要有Tahoe、Reno、New--Reno、SACK和Vegas。其中,Tahoe、Reno、New-Reno和SACK是基于AIMD(Additive Increase Multiplicative Decrease)機(jī)制來改變擁塞窗口cwnd的大小,而Vegas是通過觀察以前TCP連接中

87、RTT值的改變情況來控制cwnd的大小。</p><p>  5.1 TCP 的早期實(shí)現(xiàn)</p><p>  早期TCP使用簡單的停止等待協(xié)議,每發(fā)送一個(gè)報(bào)文,都要等待確認(rèn)后,才能順序發(fā)送下一報(bào)文,因此效率很低,且在等待確認(rèn)后,網(wǎng)絡(luò)資源也不能得到充分的利用。另外,還必須等重傳計(jì)時(shí)器超時(shí),才能重新發(fā)送丟失的報(bào)文,對(duì)網(wǎng)絡(luò)擁塞未采取有效的措施。</p><p>  5.

88、2 TCP Tahoe</p><p>  1988年,Jacobsen改進(jìn)了原來的TCP機(jī)制,提出了Tahoe算法。在早期實(shí)現(xiàn)的基礎(chǔ)上,Tahoe加入了慢啟動(dòng)、擁塞避免和快速重傳機(jī)制。對(duì)重發(fā)定時(shí)器的取值也進(jìn)行了改進(jìn)。并具有RTT估計(jì)和差錯(cuò)恢復(fù)的功能。Tahoe的基本思想是探測網(wǎng)絡(luò)的可用帶寬,在擁塞時(shí)急劇降低數(shù)據(jù)發(fā)送速率 (即:在丟失報(bào)文段重傳之后,將cwnd的值降為1,將ssthresh置為cwnd/2后,重

89、新進(jìn)入慢啟動(dòng)階段)。</p><p>  Tahoe算法存在著不足之處:在收到3個(gè)重復(fù)ACK或在超時(shí)的情況下,Tahoe置cwnd為1,然后進(jìn)入慢啟動(dòng)階段。這一方面會(huì)引起網(wǎng)絡(luò)的激烈振蕩,另一方面大大降低了網(wǎng)絡(luò)的利用率。</p><p>  5.3 TCP Reno算法</p><p>  針對(duì)Tahoe算法的不足之處,1990年Jacobson在Tahoe的基礎(chǔ)上

90、提出了改進(jìn)算法Reno。改進(jìn)主要有兩個(gè)方面:一是對(duì)于收到連續(xù)3個(gè)重復(fù)ACK,算法不經(jīng)過慢啟動(dòng),而直接進(jìn)入擁塞避免階段;二是增加了快速重傳/快速恢復(fù)機(jī)制。具體實(shí)現(xiàn)過程為:</p><p>  1.收到三個(gè)重復(fù)的ACK,進(jìn)入快速重傳/快速恢復(fù),此時(shí)ssthresh設(shè)置為當(dāng)前擁塞窗口的一半。</p><p>  2.重傳丟失的數(shù)據(jù)包,并置cwnd=cwnd+n (n為收到的重復(fù)ACK數(shù))。<

91、;/p><p>  3.發(fā)送新的數(shù)據(jù)包。</p><p>  4.當(dāng)收到非重復(fù)的ACK時(shí),cwnd=ssthresh。</p><p>  5.進(jìn)入擁塞避免階段。</p><p>  從上面的過程可以看出,Reno在收到3個(gè)重復(fù)ACK后,就轉(zhuǎn)入快速重傳/快速恢復(fù)階段;而遇到超時(shí)時(shí),Reno和Tahoe一樣進(jìn)入慢啟動(dòng)階段。</p>&

92、lt;p>  但是如果在一個(gè)發(fā)送窗口內(nèi)有多個(gè)包丟失時(shí),該算法不能有效恢復(fù)出來。</p><p>  5.4 TCP New-Reno</p><p>  1996年在Reno的基礎(chǔ)上提出了New-Reno算法。對(duì)Reno的快速恢復(fù)機(jī)制進(jìn)行了改進(jìn),以避免一個(gè)窗口內(nèi)發(fā)生多個(gè)報(bào)文段丟失的情況下傳輸性能的下降。在Reno中,發(fā)送端只要收到對(duì)重傳報(bào)文段的確認(rèn)就結(jié)束快速恢復(fù)過程;New-Ren

93、o則是在收到對(duì)該窗口所有報(bào)文段確認(rèn)之后才退出快速恢復(fù)過程,從而避免出現(xiàn)多個(gè)丟失造成的cwnd連續(xù)減小。因此,New--Reno比Reno能更好的保證網(wǎng)絡(luò)的穩(wěn)定性。</p><p>  New-Reno與Reno的不同僅在于步驟1(下面所述)中變量“recover”的引入,以及步驟5中收到部分或新的確認(rèn)ACK后的處理方式。New-Reno中定義了一個(gè)“快速恢復(fù)過程”,其快速重傳和快速恢復(fù)機(jī)制可以概括為如下五步:&l

94、t;/p><p>  1.當(dāng)TCP發(fā)送端收到第三個(gè)重復(fù)的ACK并且發(fā)送端還沒有處于快速恢復(fù)階段時(shí),用下式設(shè)置ssthresh的值。然后用變量“recover”記錄此時(shí)傳送的最大序列號(hào)。</p><p>  2. TCP發(fā)送端重傳丟失的報(bào)文段并設(shè)置cwnd的值為:cwnd=ssthresh+3×MSS。這將人為的按已經(jīng)離開網(wǎng)絡(luò)的報(bào)文段數(shù)目和接收端已經(jīng)緩沖的數(shù)據(jù)量來擴(kuò)充擁塞窗口。<

95、/p><p>  3.對(duì)每次接收到的額外的重復(fù)ACK,將cwnd增大MSS字節(jié)。這將人為的擴(kuò)充擁塞窗口以反映其它已經(jīng)離開網(wǎng)絡(luò)的報(bào)文段。</p><p>  4.如果cwnd和接收端的通告窗口的值允許的話,TCP發(fā)送端發(fā)送下一個(gè)報(bào)文段。</p><p>  5.當(dāng)下一個(gè)確認(rèn)新報(bào)文段的ACK到達(dá)時(shí)(此ACK可能是由步驟2中的重傳引發(fā)的確認(rèn),或者是稍后的一次重傳引起的):&l

96、t;/p><p>  如果這個(gè)ACK確認(rèn)了直到并包含序列號(hào)為“recover”的報(bào)文段,那么這個(gè)ACK確認(rèn)了TCP發(fā)送端在丟失報(bào)文段的第一次傳送和第三個(gè)重復(fù)ACK接收之間發(fā)送的所有報(bào)文段。TCP發(fā)送方可以設(shè)置cwnd的值為:</p><p>  此處ssthresh是步驟1中的值(步驟l中的發(fā)送窗口是TCP進(jìn)入快速恢復(fù)階段時(shí)的值:而步驟5中的發(fā)送窗口是TCP退出快速恢復(fù)階段時(shí)的值)。</

97、p><p>  如果這個(gè)ACK不是對(duì)所有并包含到序列號(hào)為“recover”報(bào)文段的確認(rèn),那么這個(gè)ACK就是一個(gè)部分確認(rèn)。在這種情況下,TCP發(fā)送端并不退出快速恢復(fù)過程,而是立即重傳部分確認(rèn)ACK中指示的第一個(gè)沒有確認(rèn)的報(bào)文段。這和Reno處理部分確認(rèn)的方式不同,Reno在收到一個(gè)部分確認(rèn)ACK后立即退出快速恢復(fù)過程。如果還有任何其他重復(fù)ACK隨后到達(dá),New-Reno發(fā)送端重復(fù)執(zhí)行上面的步驟3和4。于是,當(dāng)一個(gè)發(fā)送窗

98、口中有多個(gè)報(bào)文段丟失時(shí),New-Reno不需等到超時(shí)重發(fā)定時(shí)器超時(shí)就能從多個(gè)報(bào)文段的丟失中恢復(fù)。TCP發(fā)送端在每個(gè)往返時(shí)間內(nèi)重發(fā)一個(gè)丟失的報(bào)文段,直至重發(fā)了所有丟失的報(bào)文段為止。New-Reno一直處于快速恢復(fù)階段直到發(fā)送端在進(jìn)入快速恢復(fù)之前發(fā)出的所有報(bào)文段都被確認(rèn)為止。</p><p>  5.5 TCP SACK</p><p>  1996年還提出了Reno的另一改進(jìn)SACK算法。

99、它利用SACK報(bào)文段中的選項(xiàng)對(duì)接收?qǐng)?bào)文進(jìn)行確認(rèn)。根據(jù)SACK選項(xiàng)的確認(rèn)信息,發(fā)送端可以確知哪些報(bào)文段已被接收,從而只重傳那些實(shí)際丟失的報(bào)文段,這就有利于發(fā)送端從單個(gè)窗口內(nèi)丟失多個(gè)報(bào)文段的環(huán)境中快速的恢復(fù)。</p><p>  SACK用到兩種TCP選項(xiàng):授權(quán)選項(xiàng)和SACK選項(xiàng)。</p><p>  授權(quán)選項(xiàng)只在連接建立時(shí)使用。此選項(xiàng)包含在SYN報(bào)文中被發(fā)送,表示此連接可以用SACK 選項(xiàng)。

100、它占兩個(gè)字節(jié),其格式為:</p><p>  典型的SACK算法是對(duì)Reno算法的一種簡單改進(jìn),它們?cè)跀U(kuò)大和減小擁塞窗口上使用的都是相同的機(jī)制。在TCP中增加SACK并不改變擁塞控制的基本機(jī)制,SACK不但實(shí)現(xiàn)了Tahoe和Reno在報(bào)文段失序時(shí)的健壯性,而且必要時(shí)仍然使用重發(fā)定時(shí)器的超時(shí)重發(fā)機(jī)制來進(jìn)行恢復(fù)。</p><p>  SACK和Reno的主要差別在于,當(dāng)多個(gè)報(bào)文段從一個(gè)數(shù)據(jù)發(fā)送

101、窗口丟失時(shí)采取的對(duì)策。SACK和Reno一樣,一般當(dāng)TCP發(fā)送端收到3個(gè)重復(fù)的ACK時(shí)就進(jìn)入快速恢復(fù)階段,發(fā)送端重發(fā)在傳輸過程重丟失了的報(bào)文段,并把擁塞窗口減小一半。在SACK的快速恢復(fù)算法中,SACK保持了一個(gè)變量pipe用來表示當(dāng)前在傳輸路徑上的報(bào)文段的估計(jì)數(shù)量。在這一點(diǎn)上SACK與Reno的實(shí)現(xiàn)機(jī)制不同。當(dāng)pipe小于擁塞窗口大小時(shí),發(fā)送端只發(fā)送新的或已重發(fā)過的數(shù)據(jù)。當(dāng)發(fā)送端發(fā)送一個(gè)新報(bào)文段或重發(fā)一個(gè)老報(bào)文段時(shí),pipe值增l;而

102、當(dāng)發(fā)送端接收了一個(gè)帶SACK選項(xiàng)的重復(fù)AEK時(shí),表明新數(shù)據(jù)己被接收者接收,pipe值減1。用pipe變量可將何時(shí)發(fā)送報(bào)文段和發(fā)送哪個(gè)報(bào)文段分離開來。</p><p>  如果有一個(gè)重發(fā)的報(bào)文段丟失,SACK可以在重發(fā)定時(shí)器超時(shí)后察覺,從而重發(fā)丟失的報(bào)文段,然后再進(jìn)入慢啟動(dòng)階段。而在收到一個(gè)“恢復(fù)ACK”,確認(rèn)了再進(jìn)入快速恢復(fù)時(shí)出現(xiàn)的所有數(shù)據(jù)后,發(fā)送端就退出快速恢復(fù)階段。另外,SACK發(fā)送端對(duì)在快速恢復(fù)階段收到的“

103、恢復(fù)ACK”還使用了特殊的處理方法:對(duì)這些ACK,發(fā)送端對(duì)pipe變量值每次減2,而不是減l。</p><p>  5.6 TCP Vegas</p><p>  1994年提出了Vegas算法。與前幾種算法不同,Vegas是一種通過檢測網(wǎng)絡(luò)流量來避免擁塞的擁塞控制算法。Vegas的策略是調(diào)整信源的發(fā)送速率使得傳輸路徑上的路由器中緩存少量的分組。它主要從三個(gè)方面對(duì)TEP擁塞控制基本機(jī)制進(jìn)

104、行了改進(jìn);重傳機(jī)制、擁塞避免機(jī)制和慢啟動(dòng)機(jī)制。</p><p><b>  1.新的重傳機(jī)制:</b></p><p>  Vegas對(duì)Reno的重傳機(jī)制做了以下擴(kuò)充:首先,Vegas讀取并記錄每次報(bào)文段發(fā)送時(shí)的系統(tǒng)時(shí)鐘。當(dāng)一個(gè)ACK到達(dá)時(shí)Vegas再次讀取時(shí)鐘,并用此時(shí)間與相應(yīng)報(bào)文段記錄的時(shí)間戳來計(jì)算RTT值。然后,Vegas用這個(gè)更精確的RTT估值來決定在下面兩種

105、情況下的重傳:當(dāng)收到一個(gè)重復(fù)的ACK時(shí),Vegas就檢測“當(dāng)前時(shí)間一相應(yīng)報(bào)文段的發(fā)送時(shí)間”的差值是否大于超時(shí)值,若大于超時(shí)值,發(fā)送端重傳此報(bào)文而不需要等收到三個(gè)重復(fù)的ACK后才做出反應(yīng),所以能更及時(shí)的做出反應(yīng)。同時(shí)也避免進(jìn)入這樣一種狀態(tài):發(fā)送端永遠(yuǎn)收不到三個(gè)重復(fù)的ACK。從而不得不依賴定時(shí)器的超時(shí)而進(jìn)行重發(fā)。</p><p>  當(dāng)收到一個(gè)非重復(fù)的ACK時(shí),如果這是重傳之后收到的第一或第二個(gè)確認(rèn),Vegas就再次

106、檢測報(bào)文段發(fā)送后的時(shí)間間隔是否大于超時(shí)值,若大于超時(shí)值就重傳此報(bào)文段,這樣就會(huì)知道在早先重傳之前可能丟失的其它的報(bào)文段,而不需要等待第一個(gè)重復(fù)的ACK到達(dá)才覺察。</p><p>  2.改進(jìn)的擁塞避免機(jī)制:</p><p>  Vegas的目標(biāo)是保持網(wǎng)絡(luò)中恰當(dāng)數(shù)量的額外數(shù)據(jù)。顯然,如果一個(gè)連接發(fā)送過多額外數(shù)據(jù)會(huì)就導(dǎo)致?lián)砣?,如果一個(gè)連接發(fā)送過少的額外數(shù)據(jù),它就不能在有可用帶寬的條件下快速的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論