特點
- 面向連接(可靠的連接建立和連接關(guān)閉)
- 點對點通信(一對一)
- 可靠的
- 面向字節(jié)流(把上層協(xié)議的數(shù)據(jù)當(dāng)成字節(jié)傳輸)
- 全雙工通信
采用的技術(shù)
- 排序技術(shù)(處理分組重復(fù)和亂序)
- 重傳技術(shù)(處理分組丟失)
- 避免分組重復(fù)的技術(shù)
- 流量控制(機器間的速度不一致)
- 擁塞控制(網(wǎng)絡(luò)延遲)
1.排序技術(shù)
分組
為每一個分組附加一個序號
接收方保存
- 當(dāng)前按順序收到的最后一個分組的序號
- 亂序到達的分組列表
接收方執(zhí)行
- 如果分組是所期待的下一個分組炸枣,遞交給上一層協(xié)議,并檢查亂序分組列表中有沒有可以繼續(xù)遞交的分組等曼;
- 如果是亂序到達的分組侧纯,添加到亂序分組列表
- 如果是重復(fù)分組始花,丟棄
2.重傳技術(shù)
發(fā)送方發(fā)送分組的同時啟動一個計時器,如果在計時器超時之前岳掐,還未收到來自接收方的ACK確認(rèn)報文顽决,發(fā)送方將發(fā)送該分組的副本并再次啟動計時器
3.避免分組重復(fù)的技術(shù)
問題:較早的連接中的分組可能在未來的連接中被接收
解決:用唯一的ID標(biāo)記每一次會話(連接),并且保證在很長一段時間內(nèi)(如幾小時)都不重復(fù)使用相同的ID
4.流量控制
問題:速度快的計算機發(fā)送太多數(shù)據(jù)造成速度慢的計算機過載
解決:滑動窗口汉规。接收方通過通告發(fā)送方自己的窗口大小礼殊,從而控制發(fā)送方的發(fā)送速度
知乎·TCP協(xié)議的滑動窗口具體是怎樣控制流量的驹吮?
ACK報文包含兩個非常重要的信息:
1. 接收方期望接收到的下一字節(jié)的序號n针史。
- 該n代表接收方已經(jīng)接收到了前n-1字節(jié)數(shù)據(jù),此時如果接收方收到第n+1字節(jié)數(shù)據(jù)而不是第n字節(jié)數(shù)據(jù)碟狞,接收方是不會發(fā)送序號為n+2的ACK的啄枕。
- 舉個例子,假如接收端收到1-1024字節(jié)族沃,它會發(fā)送一個確認(rèn)號為1025的ACK,但是接下來收到的是2049-3072频祝,它是不會發(fā)送確認(rèn)號為3072的ACK,而依舊發(fā)送1025的ACK。
2. 接收方當(dāng)前的窗口大小m脆淹。
- 如此發(fā)送方在接收到ACK包含的這兩個數(shù)據(jù)后就可以計算出還可以發(fā)送多少字節(jié)的數(shù)據(jù)給對方常空。
- 假定當(dāng)前發(fā)送方已發(fā)送到第x字節(jié),則可以發(fā)送的字節(jié)數(shù)就是y=m-(x-n)盖溺。這就是滑動窗口控制流量的基本原理漓糙。
假設(shè)發(fā)送方和接收方同意滑動窗口的大小為5個分組。
(1)發(fā)送方提取數(shù)據(jù)填充這5個分組烘嘱,并發(fā)送分組的副本昆禽;
(2)此時最多可以發(fā)送5個分組蝗蛙,發(fā)送1個分組后,繼續(xù)發(fā)送剩余4個分組醉鳖;
(3)只有在收到來自接收方的ACK確認(rèn)報文之后捡硅,發(fā)送方才會丟棄該分組。此處收到第一個分組的ACK盗棵,可以丟棄第一個分組壮韭,窗口中剩下4個分組,還能再發(fā)送一個分組漾根。
5.擁塞控制
TCP利用分組延遲的變化來作為對網(wǎng)絡(luò)擁塞的測量泰涂,通過減小重傳數(shù)據(jù)的速率來應(yīng)對網(wǎng)絡(luò)擁塞。實際上辐怕,TCP不是直接改變傳輸速率逼蒙,而是通過減小窗口的大小,來降低速率寄疏。
擁塞窗口
接收方通告一個接收窗口大惺抢巍(接收緩沖區(qū)的大小)陕截,發(fā)送方可以在接收到ACK之前填滿接收窗口
*窗口分為滑動窗口和擁塞窗口
拓展鏈接:TCP的滑動窗口與擁塞窗口
知乎·既然有了滑動窗口驳棱,為什么還要有等同于滑動窗口的擁塞窗口?
慢開始
(開始一個新連接)
發(fā)送方先發(fā)送一個報文农曲,如果一個ACK確認(rèn)報文到達社搅,TCP就把發(fā)送的數(shù)據(jù)量加倍,即發(fā)送兩個報文乳规。如果對應(yīng)的兩個ACK也到達了形葬,就發(fā)送四個報文,以此類推暮的,直到TCP正在發(fā)送的數(shù)據(jù)量等于接收窗口大小的一半為止笙以。之后數(shù)據(jù)量改為線性增長,每次加一冻辩。
(出現(xiàn)報文丟失時)
如果發(fā)送方超過一定時間沒有收到ACK確認(rèn)報文猖腕,說明報文丟失,出現(xiàn)網(wǎng)絡(luò)擁塞恨闪,此時將窗口大小設(shè)置為1倘感,重新進行慢開始算法。
參考鏈接:TCP協(xié)議概述