TCP為什麼需要三次握手

2021-08-14 01:50:13 字數 779 閱讀 6254

晚上看到的面試題,tcp三次握手的印象很深,但為什麼需要3次握手,還是想不起來了。

簡單而言:如果不是三次握手的話,那麼到底需要幾次握手最佳呢?2次握手,或者4次以上的握手?

先看2次握手的情況:客戶端給伺服器傳送建立連線的請求,伺服器同意連線請求發回應給客戶端,連線就此建立。

有問題的就是網路中經常會出現的包的延遲,如果客戶端的某個包在路由器上延遲了,過了很久才發給伺服器,伺服器收到這個包後回應給客戶端,伺服器以為連線就此建立成功,分配資源,這樣就會出現問題。

再看四次握手的情況:

①a傳送syn,

②b收到syn後傳送ack+syn

③a傳送ack

④b再傳送ack

實際上這樣的過程可以一直迴圈下去,其實3次握手已經是能夠使雙方知道對方裝置都是好用的最少次數。四次握手會浪費資源。

綜上所述,tcp 3次握手最好。

下面是第二個問題:time_wait是做什麼的?

假設客戶端傳送的最後乙個ack丟失了,伺服器會重發它傳送的最後乙個fin,所以客戶端必須維持乙個狀態資訊,以便能夠重發ack;如果不維持這種狀態,客戶端在接收到fin後將會響應乙個rst,伺服器端接收到rst後會認為這是乙個錯誤。如果tcp協議能夠正常完成必要的操作而終止雙方的資料流傳輸,就必須完全正確的傳輸四次握手的四個節,不能有任何的丟失。這就是為什麼socket在關閉後,仍然處於 time_wait狀態,因為他要等待以便重發ack。

TCP為什麼三次握手

tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個 syn置位的 tcp報文,其中包含連線的初始序列號 x和乙個視窗大小 表示客戶端上用來儲存從伺服器...

TCP為什麼三次握手

1 第一次握手 客戶端向伺服器端傳送tcp報文請求建立連線,其中 標記位為syn 1 序號為seq x 2 第二次握手 服務端收到資訊後知道自己與客戶端是可以連線成功的,但此時客戶端並不知道服務端是否已經接收到了它的請求,所以服務端接收到訊息後進行應答,這就是第二次握手,其中 標記位為syn 1,a...

理解TCP為什麼需要進行三次握手

首先簡單介紹一下tcp三次握手 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。第一次握手 建立連線時,客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也...