TCP三次握手與四次揮手

2022-08-03 06:06:10 字數 2110 閱讀 2968

一、tcp三次握手

1、客戶端傳送syn(synchronize sequence numbers 同步序列編號)握手訊號,

2、服務端回應ack(acknowledgement)確認字元,並傳送syn以確認客戶端是否請求的是自己,

3、客戶端接收到服務端傳送的ack後,進入established狀態,並就服務端傳送的syn,回覆ack確認字元,

4、服務端收到確認資訊(字元),進去established狀態。

有兩個中間狀態,syn_sent和syn_rcvd,這兩個狀態叫著「半開啟」狀態,就是向對方招手了,但是還沒來得及看到對方的點頭微笑。syn_sent是主動開啟方的「半開啟」狀態,syn_rcvd是被動開啟方的「半開啟」狀態。客戶端是主動開啟方,伺服器是被動開啟方。

二、tcp資料傳輸

客戶端向服務端傳送data,服務端接收到後要向客戶端回應ack。如果這個過程中data沒有順利傳到服務端,或者客服端沒有接收到ack,就需要重發data,稱為tcp重傳。在重傳的情況下,服務端有可能用乙個data接收到了兩次,需要執行去重操作。「重傳」和「去重」工作作業系統的網路核心模組都已經幫我們處理好了,使用者層是不用關心的。

客戶端可以向服務端傳送資料,同樣服務端也能向客戶端傳送資料,因為tcp鏈結是「雙工的」,雙方都可以主動傳送資料傳輸,不過無論是哪方傳送,都需要收到對方的確認才能認為對方收到了自己傳送的資料。

「批量ack」——客戶端連續性傳送多條data,此時服務端不用一句一句回覆,而是在連續接收完後,向客戶端回覆ack。

「tcp視窗大小」——客戶端一次性不能傳送太多data,服務端一次性無效處理太多訊息,兩端之間需要有協商好的合適的傳送和接受速率。

網路環境的資料互動存在資料報亂序的現象。同乙個**發出來的不同資料報在「網際路由」上可能會走過不同的路徑,最終達到同乙個地方時,順序就不一樣了。作業系統的網路核心模組會負責對資料報進行排序,到使用者層時順序就已經完全一致了。

三、tcp四次揮手

tcp斷開鏈結的過程和建立鏈結的過程比較類似,只不過中間的兩部並不總是會合成一步走,所以它分成了4個動作。

客戶端傳送fin結束標誌,服務端回應ack,服務端傳送fin結束標誌,客戶端回應ack。

之所以中間的兩個動作沒有合併,是因為tcp存在「半關閉」狀態,也就是單向關閉。客戶端雖然關閉,但只是不再主動傳送data,但是還是可以接收收據,服務端繼續傳送資料。等待服務端不再傳送data,向客戶端傳送fin結束標誌,客戶端回應ack,才徹底結束了。

上面有乙個非常特殊的狀態time_wait,它是主動關閉的一方在回覆完對方的揮手後進入的乙個長期狀態,這個狀態標準的持續時間是4分鐘,4分鐘後才會進入到closed狀態,釋放套接字資源(不過在具體實現上這個時間是可以調整的)。

就好像提出主動分手那方告知對方(傳送fin),對方收到分手的訊息,表示知道了這個訊息(回應ack),主動方就不說話了,對方或是數落主動方的不是,或是尋求乙個解釋,或是歇斯底里(可以繼續像主動方傳送data),但是主動方不會再主動說話(不再主動傳送data),直到對方累了,同意分手(傳送fin),主動方接收到fin,進入time_wait狀態,回覆對方表示知道了(回應ack)。在4分鐘的time_wait狀態裡,要確保對方接收到回應ack,如果對方沒接收到ack,則對方要重新傳送同意分手的訊息(重傳fin)。

time_wait的作用是重傳最後乙個ack報文,確保對方可以收到。因為如果對方沒有收到ack的話,會重傳fin報文,處於time_wait狀態的套接字會立即向對方重發ack報文。

同時在這段時間內,該鏈結在對話期間於網際路由上產生的殘留報文(因為路徑過於崎嶇,資料報文data走的時間太長,重傳的報文都收到了,原始報文還在路上)傳過來時,都會被立即丟棄掉。4分鐘的時間足以使得這些殘留報文徹底消逝。不然當新的埠被重複利用時,這些殘留報文可能會干擾新的鏈結。

4分鐘就是2個msl,每個msl是2分鐘。msl就是maximium segment lifetime——最長報文壽命。這個時間是由官方rfc協議規定的。至於為什麼是2個msl而不是1個msl,不知

四次揮手也並不總是四次揮手,中間的兩個動作有時候是可以合併一起進行的(主動方請求分手,對方立即同意),這個時候就成了三次揮手,主動關閉方就會從fin_wait_1狀態直接進入到time_wait狀態,跳過了fin_wait_2狀態。

Tcp三次握手與四次揮手

tcp三次握手 四次揮手 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 syn 同步序列編號 synchronize sequence numbers 第二次...

TCP三次握手與四次揮手

也許三次握手你會經常聽到,但你知道三次握手的真正意義嗎,為什麼需要三次握手呢?首先我們必須明白tcp是面向連線的協議,無論哪乙個方向在傳送資料之前,都必須先在雙方之間建立連線。這一點與udp協議是不一樣的,udp在傳送資料報之前是不需要建立連線的。建立tcp連線的過程中,通訊的雙方需要互相發報文進行...

tcp三次握手與四次揮手

一.tcp三次握手 簡述 a傳送乙個請求給b,b發回確認,然後a再加以確認,來回共3次 1 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認。2 第二次握手 伺服器收到syn包之後,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn syn...