tcp協議(「傳輸控制協議(transmission control protocol」). )是當今使用最廣泛的協議之一,首先我們要明確tcp協議是乙個(1)有連線(2)可靠傳輸(3)面向位元組流的乙個協議。現在就來細數以下他具有的幾大特點。
1. 確認應答機制
這是tcp協議可靠性的核心機制,接收方在收到傳送方發出的資料時返回乙個ack,表示我已經收到資料了,然後,傳送方在接受到接收方傳送的ack之後,再繼續傳送資料。對於傳送的資料,tcp將每個位元組的資料都進行了編號. 即為序列號. 假設每次傳送1000個位元組,傳送方的序列號就是1,接收方收到資料後,給傳送方返回1001,表示我已經收到資料,下次傳送從1001開始。
2. 超時重傳
這也是tcp協議可靠性的核心機制,與應答機制相輔相成
主機a傳送資料給b之後, 可能因為網路擁堵等原因, 資料無法到達主機b; 如果主機a在乙個特定時間間隔內沒有收到b發來的確認應答, 就會進行重發。重傳是為了進一步降低丟包的可能性,而這個「特定時間」,也會隨著重發次數變得慢慢變得越來越長,若達到一定次數對方還沒沒響應,那麼就會強制斷開連線。
這裡有乙個需要注意的點,上面說b未收到a的資料可能是因為網路擁堵,那麼假如b收到資料,返回的ack同樣也可能因為網路擁堵,導致a無法收到,此時a會因此重發資料給b,最終導致b接受了一堆重複資料,那麼如何解決這些重複資料呢?
此時就用到了第一條裡所說的序列號了,只要a傳送的一樣的資料那麼序列號一定相同,b就可根據序列號來自動去重。
3. 連線管理
首先討論一下建立連線的意義:
(1)可以試探一下對方是否適合和我進行通訊
(2)可以協商一些重要資料,
接下來就是著名的tcp協議的三次握手。
1)客戶端傳送建立連線請求,syn
2)服務端收到請求後,返回ack,同時傳送確認連線請求,syn
3)客戶端收到請求後,返回ack
至此tcp連線建立,三次揮手完成
接下來是斷開連線的四次揮手的過程
1)客戶端請求斷開連線,傳送fin
2)服務端接受請求並返回ack
3)服務端傳送斷開連線請求,傳送fin
4)客戶端收到後返回ack
至此tcp連線斷開
4. 滑動視窗
剛才我們討論了確認應答策略, 對每乙個傳送的資料段, 都要給乙個ack確認應答. 收到ack後再傳送下乙個資料段. 這 樣做有乙個比較大的缺點, 就是效能較差. 尤其是資料往返的時間較長的時候
既然這樣一發一收的方式效能較低, 那麼我們一次傳送多條資料, 就可以大大的提高效能(其實是將多個段的等待時間 重疊在一起了).
這裡我們假設傳送3個資料,如果是直接僅僅是確認應答,那麼傳送第乙個資料後只有收到返回的ack才能傳送下乙個,而加入滑動視窗後就不太一樣了,比如下圖:在傳送第乙個資料後我可以不必等待ack,而直接傳送下乙個,一次能發的最多資料數取決於滑動視窗的大小,以下圖為例,我一次傳送三個資料,此時視窗裡的資料就是(1~1000,1001-2000,2001-3000),當我收到第乙個資料返回的ack時,此時視窗變成了(1001-2000,2001-3000,3001-4000).,相當於向下滑動了一格,由於3個時依次一起傳送,可能會出現有的返回了ack,有的沒有。此處假設三個資料只有1-1000的ack沒有收到,那麼傳送端會重發此資料(1-1000),(及沒收到誰的ack就重發誰,不會三個一起發),等到都收到之後,接收端會從返回的ack裡的最大的開始繼續傳送,如下圖,接收端就會從3001開始在傳送乙個視窗大小的資料(及3個)
簡單來說就是:
5. 流量控制
接收端處理資料的速度是有限的. 如果傳送端發的太快, 導致接收端的緩衝區被打滿, 這個時候如果傳送端繼續傳送, 就 會造成丟包, 繼而引起丟包重傳等等一系列連鎖反應. 因此tcp支援根據接收端的處理能力, 來決定傳送端的傳送速度. 這個機制就叫做流量控制(flow control);
6. 擁塞控制
雖然tcp有了滑動視窗, 能夠高效可靠的傳送大量的資料. 但是如果在剛開始階段就傳送大量的資料, 仍然 可能引發問題. 因為網路上有很多的計算機, 可能當前的網路狀態就已經比較擁堵. 在不清楚當前網路狀態下, 貿然傳送大量的資料, 是 很有可能引起雪上加霜的. tcp引入慢啟動機制, 先發少量的資料, 探探路, 摸清當前的網路擁堵狀態, 再決定按照多大的速度傳輸資料;
像上面這樣的擁塞視窗增長速度, 是指數級別的. 「慢啟動」 只是指初使時慢, 但是增長速度非常快.
為了不增長的那麼快, 因此不能使擁塞視窗單純的加倍. 此處引入乙個叫做慢啟動的閾值
當擁塞視窗超過這個閾值的時候, 不再按照指數方式增長, 而是按照線性方式增長
當tcp開始啟動的時候, 慢啟動閾值等於視窗最大值; 在每次超時重發的時候, 慢啟動閾值會變成原來的一半, 同時擁塞視窗置回1.
7. 延時應答
他存在的目的就是為了在可靠性的基礎上讓滑動視窗的值盡量大一些,簡單來說就是在收到資料時不立刻返會ack,而是稍等一會才返回 ,在等的過程中程式就會多消耗一些快取區的資料,這樣在返回的ack中反饋接受快取區剩餘空間的大小,這個值會更大一些,從而時反饋的視窗的大小就會更大一些。
一定要記得, 視窗越大, 網路吞吐量就越大, 傳輸效率就越高.我們的目標是在保證網路不擁塞的情況下盡量提高傳輸效 率;
那麼所有的包都可以延遲應答麼?
肯定也不是;
數量限制: 每隔n個包就應答一次;
時間限制: 超過最大延遲時間就應答一次
8. 捎帶應答
他建立在延遲應答的基礎上,簡單來說就是作業系統核心返回ack的時機和程式反饋響應的實際合二為一,通過同乙個資料報返回倆方面的資訊。
9. 面向位元組流
主要指由於緩衝區的存在, tcp程式的讀和寫不需要一一匹配, 不管你是怎麼寫的,我想一次讀幾個就讀幾個,
*粘包問題:*tcp協議傳輸資料都是一段一段的,乙個乙個的報文,在應用層的角度來看,它就是一連串的位元組資料,並不知道從哪個部分開始到哪個部分, 是乙個完整的應用層資料報。
那麼如何解決呢?
簡單來說就是明確倆個包之間的邊界,倆種方式:
(1)指定分隔符
(2)指定包的長度.
10.感謝閱讀
架構師十大特點
架構師,聽起來是如此神秘的乙個稱號。尤其是在開發領域剛入門不久的菜鳥級程式設計師眼中,架構師都是高手,都是牛人,都是如此高高在上的存在。不過,在搞了 四 五年程式設計之後,程式設計師們往往早已失去了當年對這些 高階 職位的神秘感,甚至會對自己所在專案的架構師抱怨不已,背後裡稱他們是一群水王。所以有江...
cPanel控制面板的十大特點!
一 簡單直觀 二 可靠 cpanel的監控功能非常強大,某一項服務失敗時,它會嘗試自動重啟該服務。cpanel的監控機制很健全,使用者可以為伺服器的一些關鍵引數如負載設定閾值,當達到這些閾值時,cpanel會發通知郵件給使用者,從而使得使用者可以及時處理潛在的伺服器隱患。cpanel同時支援簡訊接收...
TCP 協議 特點
tcp介紹 tcp協議,傳輸控制協議 英語 transmission control protocol,縮寫為 tcp 是 一種面向連線的 可靠的 基於位元組流的傳輸層通訊協議,由ietf的rfc 793定義。tcp通訊需要經過建立連線 資料傳送 終止連線三個步驟。tcp特點 1.面向連線 通訊雙方...