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