— TCP傳輸控制協(xié)議 —
傳輸控制協(xié)議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。
TCP旨在適應(yīng)支持多網(wǎng)絡(luò)應(yīng)用的分層協(xié)議層次結(jié)構(gòu)。 連接到不同但互連的計(jì)算機(jī)通信網(wǎng)絡(luò)的主計(jì)算機(jī)中的成對(duì)進(jìn)程之間依靠TCP提供可靠的通信服務(wù)。
TCP假設(shè)它可以從較低級(jí)別的協(xié)議獲得簡(jiǎn)單的,可能不可靠的數(shù)據(jù)報(bào)服務(wù)。 原則上,TCP應(yīng)該能夠在從硬線連接到分組交換或電路交換網(wǎng)絡(luò)的各種通信系統(tǒng)之上操作。
01
** TCP協(xié)議首部 **
TCP協(xié)議,表現(xiàn)在報(bào)文上,就是會(huì)在應(yīng)用層傳輸下來(lái)的數(shù)據(jù)前附加上一個(gè)TCP首部,這個(gè)首部附加了TCP信息。
首部結(jié)構(gòu)
02
** TCP面向字節(jié)流特性**
TCP并不是把應(yīng)用層傳輸過(guò)來(lái)的數(shù)據(jù)直接加上首部然后發(fā)送給目標(biāo),而是把數(shù)據(jù)看成一個(gè)字節(jié)流,給他們標(biāo)上序號(hào)之后分部分發(fā)送。這就是TCP的面向字節(jié)流特性:
TCP會(huì)以流的形式從應(yīng)用層讀取數(shù)據(jù)并存放在自己的發(fā)送緩存區(qū)中,同時(shí)為這些字節(jié)標(biāo)上序號(hào),TCP會(huì)從發(fā)送方緩沖區(qū)選擇適量的字節(jié)組成TCP報(bào)文,通過(guò)網(wǎng)絡(luò)層發(fā)送給目標(biāo),目標(biāo)會(huì)讀取字節(jié)并存放在自己的接收方緩沖區(qū)中,并在合適的時(shí)候交付給應(yīng)用層。
面向字節(jié)流的好處是無(wú)需一次存儲(chǔ)過(guò)大的數(shù)據(jù)占用太多內(nèi)存,壞處是無(wú)法知道這些字節(jié)代表的意義,例如應(yīng)用層發(fā)送一個(gè)音頻文件和一個(gè)文本文件,對(duì)于TCP來(lái)說(shuō)就是一串字節(jié)流,沒(méi)有意義可言,這會(huì)導(dǎo)致粘包以及拆包問(wèn)題。
03
** 可靠傳輸原理**
TCP是可靠傳輸協(xié)議,也就是,一個(gè)數(shù)據(jù)交給他,他肯定可以完整無(wú)誤地發(fā)送到目標(biāo)地址,除非網(wǎng)絡(luò)炸了。他實(shí)現(xiàn)的網(wǎng)絡(luò)模型如下:
對(duì)于應(yīng)用層來(lái)說(shuō),他就是一個(gè)可靠傳輸?shù)牡讓又С址?wù);而運(yùn)輸層底層采用了網(wǎng)絡(luò)層的不可靠傳輸。雖然在網(wǎng)絡(luò)層甚至數(shù)據(jù)鏈路層就可以使用協(xié)議來(lái)保證數(shù)據(jù)傳輸?shù)目煽啃?,但這樣網(wǎng)絡(luò)的設(shè)計(jì)會(huì)更加復(fù)雜、效率會(huì)隨之降低。把數(shù)據(jù)傳輸?shù)目煽啃员WC放在運(yùn)輸層,會(huì)更加合適。
可靠傳輸原理的重點(diǎn)總結(jié)一下:滑動(dòng)窗口、超時(shí)重傳、累積確認(rèn)、選擇確認(rèn)、連續(xù)ARQ 。
04
停止等待協(xié)議
要實(shí)現(xiàn)可靠傳輸,最簡(jiǎn)便的方法就是:我發(fā)送一個(gè)數(shù)據(jù)包給你,然后你跟我回復(fù)收到,我繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)包。
這種“一來(lái)一去”的方法來(lái)保證傳輸可靠就是停止等待協(xié)議(stop-and-wait)。
再來(lái)考慮一種情況:丟包。網(wǎng)絡(luò)環(huán)境不可靠,導(dǎo)致每一次發(fā)送的數(shù)據(jù)包可能會(huì)丟失,如果機(jī)器A發(fā)送了數(shù)據(jù)包丟失了,那么機(jī)器B永遠(yuǎn)接收不到數(shù)據(jù),機(jī)器A永遠(yuǎn)在等待。解決這個(gè)問(wèn)題的方法是:超時(shí)重傳 。
當(dāng)機(jī)器A發(fā)出一個(gè)數(shù)據(jù)包時(shí)便開(kāi)始計(jì)時(shí),時(shí)間到還沒(méi)收到確認(rèn)回復(fù),就可以認(rèn)為是發(fā)生了丟包,便再次發(fā)送,也就是重傳。
但重傳會(huì)導(dǎo)致另一種問(wèn)題:如果原先的數(shù)據(jù)包并沒(méi)有丟失,只是在網(wǎng)絡(luò)中待的時(shí)間比較久,這個(gè)時(shí)候機(jī)器B會(huì)受到兩個(gè)數(shù)據(jù)包,那么機(jī)器B是如何辨別這兩個(gè)數(shù)據(jù)包是屬于同一份數(shù)據(jù)還是不同的數(shù)據(jù)?這就需要前面講過(guò)的方法:給數(shù)據(jù)字節(jié)進(jìn)行編號(hào)。這樣接收方就可以根據(jù)數(shù)據(jù)的字節(jié)編號(hào),得出這些數(shù)據(jù)是接下來(lái)的數(shù)據(jù),還是重傳的數(shù)據(jù)。
05
** 連續(xù)ARQ協(xié)議**
停止等待協(xié)議已經(jīng)可以滿足可靠傳輸了,但有一個(gè)致命缺點(diǎn):效率太低。發(fā)送方發(fā)送一個(gè)數(shù)據(jù)包之后便進(jìn)入等待,這個(gè)期間并沒(méi)有干任何事,浪費(fèi)了資源。解決的方法是:連續(xù)發(fā)送數(shù)據(jù)包。
和停止等待最大的不同就是,他會(huì)源源不斷地發(fā)送,接收方源源不斷收到數(shù)據(jù)之后,逐一進(jìn)行確認(rèn)回復(fù)。這樣便極大地提高了效率。但同樣,帶來(lái)了一些額外的問(wèn)題:
發(fā)送是否可以無(wú)限發(fā)送直到把緩沖區(qū)所有數(shù)據(jù)發(fā)送完?不可以。因?yàn)樾枰紤]接收方緩沖區(qū)以及讀取數(shù)據(jù)的能力。如果發(fā)送太快導(dǎo)致接收方無(wú)法接受,那么只是會(huì)頻繁進(jìn)行重傳,浪費(fèi)了網(wǎng)絡(luò)資源。所以發(fā)送方發(fā)送數(shù)據(jù)的范圍,需要考慮到接收方緩沖區(qū)的情況。這就是TCP的流量控制 。解決方法是:滑動(dòng)窗口 。
-
緩沖器
+關(guān)注
關(guān)注
6文章
1911瀏覽量
45424 -
接收機(jī)
+關(guān)注
關(guān)注
8文章
1177瀏覽量
53376 -
ARQ
+關(guān)注
關(guān)注
0文章
3瀏覽量
6121 -
TCP協(xié)議
+關(guān)注
關(guān)注
1文章
91瀏覽量
12054
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論