【1】TCP擁塞控制,TCP建立連接和斷開連接的過程,三次握手,四次揮手


在這裏插入圖片描述

TCP保證可靠性:

(1)序列號、確認應答、超時重傳

數據到達接收方,接收方需要發出一個確認應答,表示已經收到該數據段,
並且確認序號會說明了它下一次需要接收的數據序列號。
如果發送端遲遲未收到確認應答,那麼可能是發送的數據丟失,也可能是確認應答丟失,這時發送方在等待一定時間後會進行重傳。這個時間一般是2*RTT(報文段往返時間)+一個偏差值。

(2)快速重傳(重複確認應答)

滑動窗口+累積確認

(3)擁塞控制

慢啓動:定義擁塞窗口,一開始將該窗口大小設爲1,之後每次收到確認應答(經過一個rtt),將擁塞窗口大小*2。
擁塞避免:設置慢啓動閾值,一般開始都設爲65536。擁塞避免是指當擁塞窗口大小達到這個閾值,擁塞窗口的值不再指數上升,而是加法增加(每次確認應答/每個rtt,擁塞窗口大小+1),以此來避免擁塞。
將報文段的超時重傳看做擁塞,則一旦發生超時重傳,我們需要先將閾值設爲當前窗口大小的一半,並且將窗口大小設爲初值1,然後重新進入慢啓動過程。
快速重傳:在遇到3次重複確認應答時,代表該數據之後的數據段丟失了,便對它進行立即重傳。
然後,先將閾值設爲當前窗口大小的一半,然後將擁塞窗口大小設爲慢啓動閾值+3的大小。
這樣可以達到:在TCP通信時,網絡吞吐量呈現逐漸的上升,並且隨着擁堵來降低吞吐量,再進入慢慢上升的過程,網絡不會輕易的發生癱瘓。

採用慢開始和擁塞避免算法的時候

  1. 一旦cwnd>慢開始門限,就採用擁塞避免算法,減慢增長速度

  2. 一旦出現丟包的情況,就重新進行慢開始,減慢增長速度

採用快恢復和快重傳算法的時候

  1. 一旦cwnd>慢開始門限,就採用擁塞避免算法,減慢增長速度

  2. 一旦發送方連續收到了三個重複確認,就採用擁塞避免算法,減慢增長速度

TCP建立連接和斷開連接的過程:

三次握手:

  1. Client將標誌位SYN置爲1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。
  2. Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。
  3. Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。

三次握手的原因:

三次握手的原因:三次握手可以防止已經失效的連接請求報文突然又傳輸到服務器端導致的服務器資源浪費。例如,客戶端先發送了一個SYN,但是由於網絡阻塞,該SYN數據包在某個節點長期滯留。然後客戶端又重傳SYN數據包並正確建立TCP連接,然後傳輸完數據後關閉該連接。該連接釋放後失效的SYN數據包纔到達服務器端。在二次握手的前提下,服務器端會認爲這是客戶端發起的又一次請求,然後發送SYN ,並且在服務器端創建socket套接字,一直等待客戶端發送數據。但是由於客戶端並沒有發起新的請求,所以會丟棄服務端的SYN 。如果沒有第三次握手,此時服務器會一直等待客戶端發送數據從而造成資源浪費。

四次揮手:

1.數據傳輸結束後,客戶端的應用進程發出連接釋放報文段,並停止發送數據,客戶端進入FIN_WAIT_1狀態,此時客戶端依然可以接收服務器發送來的數據。
2.服務器接收到FIN後,發送一個ACK給客戶端,確認序號爲收到的序號+1,服務器進入CLOSE_WAIT狀態。客戶端收到後進入FIN_WAIT_2狀態。
3.當服務器沒有數據要發送時,服務器發送一個FIN報文,此時服務器進入LAST_ACK狀態,等待客戶端的確認
4.客戶端收到服務器的FIN報文後,給服務器發送一個ACK報文,確認序列號爲收到的序號+1。此時客戶端進入TIME_WAIT狀態,等待2MSL(MSL:報文段最大生存時間),然後關閉連接。

四次揮手的原因:

由於連接的關閉控制權在應用層

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章