TCP傳輸控制協(xié)議概覽

TCP服務(wù)模型

TCP作為傳輸層,向上為應(yīng)用層提供服務(wù),向下使用網(wǎng)絡(luò)層的接口。

TCP提供了一種面向連接的,可靠的字節(jié)流服務(wù)。術(shù)語”面向連接的“是指使用TCP的兩個(gè)應(yīng)用程序必須通過交互來建立連接。

字節(jié)流的概念:TCP提供字節(jié)流的概念,TCP不在字節(jié)流中插入任何記錄標(biāo)志和消息邊界,通俗的解釋:發(fā)送者可能一次發(fā)送20字節(jié),30字節(jié),50字節(jié),在它們的TCP連接中,將被視為一個(gè)完整的100字節(jié)流,接收者不知道發(fā)送者是以20字節(jié),30字節(jié),50字節(jié)發(fā)送的,所以接收者會(huì)按照自己的方式來讀入數(shù)據(jù),可能是40字節(jié),20字節(jié),40字節(jié)。

分組和報(bào)文段:TCP將字節(jié)流轉(zhuǎn)換成一組IP可以攜帶的分組序列。每個(gè)分組包含序列號(hào),這些序列號(hào)表示得是分組中的字節(jié)偏移。將字節(jié)流轉(zhuǎn)換成分組序列的過程稱為組包

全雙工:TCP的數(shù)據(jù)流是雙向的。

ARQ和重傳

通信媒介可能會(huì)丟失或者改變傳遞的消息,TCP設(shè)計(jì)的目標(biāo)就是要提供一種可靠的傳遞數(shù)據(jù)的機(jī)制,因?yàn)榈讓拥逆溌穼訁f(xié)議和IP協(xié)議并不對(duì)此提供保證。TCP使用ARQ,即自動(dòng)重復(fù)請(qǐng)求,當(dāng)?shù)弥獢?shù)據(jù)沒有被正確接受時(shí),發(fā)送方簡(jiǎn)單的“嘗試重新發(fā)送”,直到信息被正確接收。

ACK

首先回憶一下,傳輸層傳輸?shù)囊粋€(gè)單元被稱為一個(gè)分組,IP層被稱為一個(gè)數(shù)據(jù)報(bào),鏈路層被稱為一個(gè)分組。

所以,在傳輸層作差錯(cuò)重傳時(shí),應(yīng)該確定的是一個(gè)分組是否被正確接收:

  • 分組被對(duì)方接收
  • 分組無差錯(cuò)

接收方通過差錯(cuò)校驗(yàn)碼確定分組是否正確,當(dāng)確定接收后,向發(fā)送方發(fā)送一個(gè)ACK,表示該分組被正確接受。

停止和等待

基于ACK和重傳,可以使用一種簡(jiǎn)單的停止等待的方法來保證數(shù)據(jù)的傳輸,即發(fā)送方每發(fā)送一個(gè)分組,就進(jìn)入等待,直到WWW確認(rèn)分組被接收者接收。

這種方法可以保證數(shù)據(jù)的傳輸,但是這樣的話網(wǎng)絡(luò)吞吐量太低,TCP沒有使用這種方法。

分組窗口或者滑動(dòng)窗口

在滑動(dòng)窗口協(xié)議中,發(fā)送方一次性發(fā)送一個(gè)分組序列。而不是發(fā)送完一個(gè)分組就陷入等待。

如何理解滑動(dòng)窗口呢,將從發(fā)送端到接收端的分組序列是為從發(fā)送方流向接收者的流。我們僅能通過一個(gè)窗口來觀察在鏈路中活躍的窗口。

發(fā)送方的窗口,已經(jīng)發(fā)送且未被確認(rèn)接受的分組的數(shù)量被控制在窗口大小內(nèi)。已經(jīng)確認(rèn)的分組被置于窗口左側(cè),準(zhǔn)備好,但是窗口已滿的后面的分組將停滯,等待窗口中的分組被確認(rèn)接收后再發(fā)送(進(jìn)入窗口)。

發(fā)送方窗口.png

接收方也保持同樣的窗口,但是意義不同,分別是已經(jīng)確認(rèn)接收的,剩下的是期望接收的和可能因?yàn)閮?nèi)存限制而被丟棄的分組。

接收方窗口.png

重傳超時(shí)

如果一個(gè)分組遲遲沒有ACK響應(yīng),發(fā)送者要等多久,總不能一直等下去吧。TCP使用的方法是RTT估計(jì),RTT是端到端的往返時(shí)間,協(xié)議采樣多個(gè)RTT樣本,取均值(一般稍微增加一點(diǎn))來作為超時(shí)等待的時(shí)間。

滑動(dòng)窗口中的ACK

TCP使用的ACK是累積的,當(dāng)字節(jié)N的ACK到達(dá)時(shí),表示前面的N個(gè)字節(jié)均已經(jīng)正常接收。這樣做的好處是降低了對(duì)于ACK的丟失的影響。

捎帶應(yīng)答: TCP往往不會(huì)單獨(dú)發(fā)送一個(gè)ACK作為應(yīng)答數(shù)據(jù)段,而時(shí)在雙發(fā)發(fā)送數(shù)據(jù)的同時(shí),攜帶最新的應(yīng)答消息給對(duì)方。

流量控制和擁塞控制

  • 基于速率的流量控制

    給發(fā)送方指定某個(gè)速率,同時(shí)確保數(shù)據(jù)不超過這個(gè)速率。

  • 基于窗口的流量控制

    窗口的大小會(huì)隨時(shí)變動(dòng),TCP使用的方法是接收者通過某種方式通知接收者使用多大的窗口,自己才能應(yīng)對(duì)這種速率。具體的方法是:接收者每次回復(fù)某一個(gè)分組的ACK時(shí),會(huì)在同一分組攜帶一個(gè)告知發(fā)送者調(diào)整窗口大小的信息,發(fā)送者會(huì)依據(jù)此來調(diào)整窗口的大小。所以,發(fā)送者往往在窗口滑動(dòng)的時(shí)候改變窗口的大小。

TCP中的擁塞控制實(shí)際上非常復(fù)雜,這里只是簡(jiǎn)單介紹一部分。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容