三次握手和四次揮手

2021-10-14 17:44:01 字數 1755 閱讀 4807

tcp連線建立過程

通俗的理解

為什麼是三次握手

四次揮手

為什麼需要握手:握手的作用就是為了同步一些資訊,比如最大滑動視窗

tcp:是乙個可靠的連線,也就是客戶端和伺服器雙方必須感知對方的存在,也就是需要經歷乙個建立連線的過程

用三次握手建立tcp連線,

連線的管理就是使連線的建立和釋放都能正常地進行,

連線階段過程中要解決以下三個問題

tcp建立連線的過程:被稱為握手

客戶端進入syn_sent狀態,即同步已傳送

伺服器進入syn_recvd狀態,即同步已收到

經過了這三次握手,兩者就進入了連線狀態

然後建立tcp連線

中國機長版三次握手

四次握手:

四次連線有點多餘,第三次的時候,我們已經互相進行了連線確認

但是因為我們無法保證百分百的可靠性

兩次握手:

客戶端知道伺服器有接收 和 傳送的能力,伺服器不知道客戶端有沒有接收資料的能力,因為通過第一次握手,已經知道了客戶端能夠傳送資料,但是能不能接收資料,還是不清楚,因此這個tcp連線是不可靠的。

為什麼不能兩次握手就建立連線

因為超時重傳機制的存在

但客戶端傳送第一次握手的時候,可能會經歷網路擁塞,然後客戶端會以為這個連線已經丟失,然後會重新傳送乙個請求連線的資訊到伺服器,這次傳送的訊息很快被伺服器接受,然後伺服器建立連線就開始建立連線。但是當第一次傳送的請求經過一段時間的阻塞後,成功到達伺服器,然後伺服器又連線連線,而此時客戶端是不會理會這次請求的建立,所以伺服器一直在等待客戶端資料的傳送。

所謂的四次揮手,就是關閉tcp連線的過程,指的是斷開乙個tpc連線,需要客戶端和服務端總共傳送4個包,以確定雙方連線的斷開。

主要目的:保證tcp連線的全雙工連線

由於tcp連線是全雙工的,因此每個方向都必須單獨關閉,這個原則是當以防完成它的資料傳送任務後,就能傳送乙個fin包來終止這個方向的連線。

收到乙個fin包只意味著這一方向上沒有資料流動,乙個tcp連線在收到乙個fin後,仍然能傳送資料,首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

這是因為雖然雙方都同意了關閉連線,而且握手的4個報文也都協調和傳送完畢,按道理可以直接回到close狀態

但是因為我們需要假設網路是不可靠的,你無法保證你最後傳送的ack報文是會一定被對方收到,因此處於last_ack狀態下的socket可能會因為超時未收到ack報文,而重發fin報文,所以這個time_wait狀態的作用就是用來重發可能丟失的報文。

當客戶端與伺服器在規定的時間內沒有得到應答

會傳送報文進行探測,假設沒有應答,那麼就會關閉連線

下面是四次揮手的過程

三次握手和四次揮手

三次握手和四次揮手如圖所示 為什麼是三次握手而不是兩次 因為當客戶端第傳送syn到服務端的時候,如果有幾次請求是因為網路等原因延時等情況的時候,如果沒有第三次握手的確定。服務端就會認為客戶端重寫傳送請求了,就會去開啟連線相應。為什麼關閉連線的時候是四次握手而不是三次?當客戶端傳送請求關閉連線的時候,...

三次握手和四次揮手

tcp三次握手和四次揮手的全過程 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線 位碼即tcp標誌位,有6種表示 syn synchronous建立連線 ack acknowledgement 表示響應 確認 psh push表示有data資料傳輸 fin fi...

三次握手和四次揮手

1.在學習tcp協議的時候,總是在強調三次握手,那麼為什麼是三次?而不是兩次或者四次?強迫症表示黑人問號?今天我們就來分析一下為什麼是三次,下圖是一次tcp通訊的時序 在這個例子中,首先客戶端主動發起連線 傳送請求,然後伺服器端響應請求,然後客戶端主動關閉連線。兩條豎線表示通訊的兩端,從上到下表 示...