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