最后更新時(shí)間:2010-08-13 06:43:46
?TCP采用“帶重傳的肯定確認(rèn)”技術(shù)來實(shí)現(xiàn)傳輸?shù)目煽啃?。簡單的“帶重傳的肯定確認(rèn)”是指與發(fā)送方通信的接收者,每接收一次數(shù)據(jù),就送回一個(gè)確認(rèn)報(bào)文,發(fā)送者對(duì)每個(gè)發(fā)出去的報(bào)留一份記錄,等到收到確認(rèn)之后再發(fā)出下一報(bào)文分組。發(fā)送者發(fā)出一個(gè)報(bào)文分組時(shí),啟動(dòng)一個(gè)計(jì)時(shí)器,若計(jì)時(shí)器計(jì)數(shù)完畢,確認(rèn)還未到達(dá),則發(fā)送者重新送該報(bào)文分組。
簡單的確認(rèn)重傳嚴(yán)重浪費(fèi)帶寬,TCP還采用一種稱之為“滑動(dòng)窗口”的流量控制機(jī)制來提高網(wǎng)絡(luò)的吞吐量,窗口的范圍決定了發(fā)送方發(fā)送的但未被接收方確認(rèn)的數(shù)據(jù)報(bào)的數(shù)量。每當(dāng)接收方正確收到一則報(bào)文時(shí),窗口便向前滑動(dòng),這種機(jī)制使網(wǎng)絡(luò)中未被確認(rèn)的數(shù)據(jù)報(bào)數(shù)量增加,提高了網(wǎng)絡(luò)的吞吐量。
TCP通信建立在面向連接的基礎(chǔ)上,實(shí)現(xiàn)了一種“虛電路”的概念。雙方通信之前,先建立一條連接,然后雙方就可以在其上發(fā)送數(shù)據(jù)流。這種數(shù)據(jù)交換方式能提高效率,但事先建立連接和事后拆除連接需要開銷。TCP連接的建立采用三次握手的過程,整個(gè)過程由發(fā)送方請(qǐng)求連接、接收方再發(fā)送一則關(guān)于確認(rèn)的確認(rèn)三個(gè)過程組成。
TCP的擁塞控制和流量控制是一個(gè)比較復(fù)雜的問題,它包括發(fā)送端發(fā)送報(bào)文的大小和報(bào)文的時(shí)機(jī),接收端發(fā)送確認(rèn)和窗口大小的策略。同時(shí)還要兼顧不同網(wǎng)絡(luò)的具體情況,算法要具有一定的自適應(yīng)性,在保證可靠傳輸?shù)耐瑫r(shí),盡量提高傳輸效率。
這里主要對(duì)目前公認(rèn)的比較行之有效的一些擁塞控制和流量控制算法進(jìn)行介紹和驗(yàn)證。主要有:TCP的滑動(dòng)窗口機(jī)制、TCP的糊涂窗口綜合癥和Nagle算法分析、網(wǎng)絡(luò)擁塞的處理、TCP的超時(shí)與重傳、TCP的窗口探查技術(shù)、TCP的快重傳和快恢復(fù)。
TCP的滑動(dòng)窗口機(jī)制
為了提高報(bào)文段的傳輸速率,TCP采用大小可變的滑動(dòng)窗口進(jìn)行流量控制。窗口大小的單位是字節(jié)。發(fā)送窗口在連接建立時(shí)由雙方商定,但在通信過程中,接收端可根據(jù)自己的接收緩存的大小,隨時(shí)動(dòng)態(tài)地調(diào)整發(fā)送端的發(fā)送窗口的上限值。這就是接收端窗口rwnd(receiverwindow),這個(gè)值被放在接收端發(fā)送的TCP報(bào)文段首部的窗口字段中。
同時(shí),發(fā)送端根據(jù)其對(duì)當(dāng)前網(wǎng)絡(luò)擁塞程度的估計(jì)而確定的窗口值,叫做擁塞窗口cwnd(congestionwindow)。其大小與網(wǎng)絡(luò)的帶寬和時(shí)延密切相關(guān)。
發(fā)送端設(shè)置的當(dāng)前能夠發(fā)送數(shù)據(jù)量的大小叫做發(fā)送窗口,發(fā)送窗口的上限值由下面公式確定:
發(fā)送窗口的上限值=Min[cwnd,rwnd]
rwnd由接收端根據(jù)其接收緩存確定,發(fā)送端確定cwnd比較復(fù)雜,詳細(xì)情況在慢啟動(dòng)和擁塞避免一節(jié)中敘述。