簡單的說就是每次傳送乙個分組就停下來等待接收端的回應,如果再「超時重傳時間」內還未收到回應就重新傳送分組,所以應該注意:
這裡所用到的超時重傳在不可靠的傳輸網路上實現了可靠的通訊,這種協議也被稱為「自動重傳請求」arq傳送發維護「傳送視窗」,在傳送視窗中的分組都能連續傳送出去,不用乙個個挨著確認,這樣就提高了通道的利用率。
接收方一般都是以累計確認方式傳送確認,而不必挨個確認。一般對按序到達的最後乙個分組傳送確認。
tcp首部中的標誌位:
使傳送方的傳送速率不要太快,要讓接收方來得及接受。傳送方的傳送視窗不能超過接收視窗,並且tcp視窗的單位為位元組,而不是報文段。
當接收端進行流量控制時將接收視窗減為0時,表示不允許傳送方傳送資料了,等到接收方有空餘緩衝區時再將接收視窗調大並傳送給傳送方通知他可以再次傳送資料了。但是若這條通知資料再傳輸的過程中丟失,則傳送方會一直等待,為了打破這種死迴圈,tcp中為每乙個連線設定了持續計數器,每次計數完成傳送方就會傳送乙個資料段為1位元組的「探測報文段」進行探測。
擁塞控制與流量控制不同,流量控制是因為接受雙方的緩衝區有限而做出的控制,擁塞控制與網際網路資源、頻寬有關,當網路線路上有太多資料需要傳送並且超過網路的承載力時,網際網路上的節點就可能丟棄部分資料。
擁塞控制就是防止過多的資料注入到網路中,tcp的擁塞控制有4種方法:慢開始、擁塞避免、快重傳、快恢復。
首先,這4種演算法都是基於視窗的擁塞控制演算法,傳送方維護了乙個「擁塞視窗」的變數,而擁塞視窗的大小依賴於網路的擁塞程度。傳送方讓自己的傳送視窗等於擁塞視窗。
我們控制擁塞視窗的原則就是:如果沒有發生擁塞,就將擁塞視窗增大,如果發生了擁塞,就減小視窗。那麼我們如何判斷網路是否擁塞?
如果出現了超時就說明網路發生了擁塞。
慢開始:初始時擁塞視窗從1個「最大報文段」smss開始以2倍速增長
慢開始門限
當阻塞視窗《慢開始門限,使用慢開始演算法;
當阻塞視窗》慢開始門限,使用擁塞避免演算法;
當阻塞視窗=慢開始門限,兩者都可。
擁塞避免
擁塞避免是指讓擁塞視窗每次增加1個smss進行緩慢增長,而不是慢開始那樣每次都是上一次的2倍的速度增長。
如上圖所示,初始狀態擁塞視窗從1個報文段開始,然後以「慢開始」演算法進行增長,當擁塞視窗》慢開始門限時轉為使用擁塞避免演算法;當擁塞視窗=24時,即「2」點,發生了超時,則重置擁塞視窗為1個報文段,並且將慢開始門限置為超時前的一半=24/2=12;在「4」點發生了3次冗餘ack,是利用了「快速重傳」演算法立即通知傳送方某個報文段丟失,由於是部分報文段的丟失,所以不啟用「慢開始」演算法,而是啟用「快恢復」演算法:調整慢開始門限=擁塞視窗/2,並將擁塞視窗置為當前的一半,然後直接以「擁塞避免」演算法開始。
三次握手:
四次揮手:
這裡需要注意的是time-wait狀態,他表示傳送端在接收到接收端的fin資訊後仍需要等待2msl(最長報文段壽命)才能進入closed狀態。原因有很多方面:
(1)當客戶端發出最後的ack後如果立即關閉,如果這條ack丟失沒有傳送到接收端,那麼接收端還以為這個連線存在,繼續維持這個連線。為了防止這種情況,傳送方如果在2msl時間內接收到接收端的重發資訊,則可以重發ack資訊,使連線正常關閉;
(2)防止「已失效的連線請求報文段」出現在本連線中,傳送端傳送完最後ack後的2msl可以使本次連線的所有資訊都從網路中消失,屆時建立新的連線就不會受到「已失效的連線請求報文段」的干擾。
保活計時器
當客戶端發生嚴重錯誤斷開連線時,伺服器可能長時間不知道客戶端已經被動斷開連線而繼續維持連線資源,造成資源浪費。為了消除這個問題,tcp設有乙個保活計時器,伺服器每接收到乙個來自客戶端的報文段就重置保活計時器,若在保活計時器時間段內無資訊來往伺服器就主動傳送探測報文段,若連續10個探測報文段仍無回應,就可以認為客戶端出現故障,關閉連線(類似心跳包)。
關於OSI和TCP IP 應該知道的事
tcp ip協議 osi 是 open system interconnection 的縮寫,譯為 開放式系統互聯 osi 模型把網路通訊的工作分為 7 層,從下到上分別是物理層 資料鏈路層 網路層 傳輸層 會話層 表示層和應用層。osi七層模型是乙個理論模型,實際應用則千變萬化,因此更多把它作為分...
Docker 你應該知道的10件事
容器並不是乙個全新的技術,但這並不妨礙docker如風暴一樣席捲整個世界。如果你在it圈裡,你一定聽說過docker。就算與其他熱門技術,如 puppet chef,hadoop或者mongodb放在一起,docker仍然讓你耳目一新。不過就算docker現在怎樣的如日中天,這並不意味著它一定適合你...
docker 你應該知道的10件事
容器並不是乙個全新的技術,但這並不妨礙docker如風暴一樣席捲整個世界。如果你在it圈裡,你一定聽說過docker。就算與其他熱門技術,如 puppet chef,hadoop或者mongodb放在一起,docker仍然讓你耳目一新。不過就算docker現在怎樣的如日中天,這並不意味著它一定適合你...