tcp握手與揮手

2021-08-03 16:03:27 字數 1228 閱讀 9968

1. 為什麼要三次握手 

先簡單介紹一下三次握手的過程

(1)客戶端向伺服器端傳送乙個syn置位的報文,並進入syn_send狀態,等待伺服器確認;

(2)伺服器發出段2,也帶有syn位,同時ack置位表示確認,此時伺服器進入syn_recv狀態;

(3)客戶端收到伺服器端的syn+ack包,向伺服器傳送確認包ack(ack=k+1),對伺服器的連線請求進行應答,完成三次握手。

為什麼要三次握手為什麼不能是兩次握手?

在資料傳輸過程中,ack和確認序號非常重要,應用程式交給tcp協議傳送的資料會暫時

存在tcp層的傳送緩衝區中,只有收到對方應答的ack段才知道該資料報確實發到了對方,可以從傳送緩衝區中釋放掉。

考慮計算機a和b之間的通訊,假定b給a傳送乙個連線請求分組,a收到了這個分組,並傳送了確認應答分組。如果是兩次握手,a認為已經和b成功建立連線,可以開始傳送資料。可是,如果a的確認應答分組在傳輸中如果丟失,b將不知道a是否準備好,甚至懷疑a是否受到自己的連線請求分組,這種情況下,b認為連線還未建立成功,將忽略a發來的任何資料,只等待連線確認應答分組,而a在發出的分組超時後,重**送同樣的分組,這就形成了死鎖。

2. 為什麼要四次揮手 

四次揮手的過程

(1)客戶端傳送乙個fin,表示關閉連線的請求;

(2)伺服器收到fin後,向客戶端傳送確認包ack,應答客戶端的關閉連線請求;

(3)伺服器傳送fin,向客戶端傳送關閉連線請求;

(4)客戶端收到fin後,發回ack報文確認,應答伺服器的關閉連線請求。

關閉連線通常需要4個段,伺服器的應答和關閉連線請求通常不合併在乙個段中,因為有

連線半關閉

的情況,這種情況下客戶端關閉連線後就不能在再傳送資料給伺服器了,但是伺服器還可以傳送資料給客戶端,直到伺服器也關閉連線為止。

tcp連線是全雙工的,因此每個方向都必須進行單獨關閉,而且每一次傳送關閉連線請求都必須得到確認。

3. 主動斷開鏈結的一方為什麼要進入time_wait狀態

為了保證客戶端傳送的最後乙個ack報文能夠到達伺服器

斷開時,如果客戶端向伺服器傳送的最後一次ack報文丟失了,伺服器會重發它傳送的fin,接著客戶端再重傳一次確認,重新啟動時間等待計時器,最後客戶端和伺服器端都能正常關閉。假設客戶端不等待,而是在傳送完ack後直接釋放關閉,一旦ack丟失,伺服器無法進入正常的關閉連線狀態。而

客戶端等待的這個狀態稱之為time_wait狀態

TCP握手與揮手

1.什麼是三次握手?在進行tcp資料傳輸時要確保資料傳送的穩定性,三次握手就是對資料與資料段進行協商跟蹤是資料的傳送與接收同步,根據所接收到的資料量而確定的資料確認數及資料傳送 接收完畢後何時撤消聯絡,並建立虛連線。2.三次握手過程 第一次握手 b的tcp服務區程序先建立傳輸控塊tcb,準備接受使用...

TCP的握手與揮手

在資料傳送前不需要建立連線,接受方收到udp報文後也不需要給出回應 不可靠的,但同時省去了很多開銷,獲得了速度的 提公升 在資料傳送之前必須建立連線,完成資料傳送之後斷開連線 socket每一條tcp連線都有兩個端點,稱之為socket 套接字 ip位址 埠號 碼農翻身中又將其比喻為乙個插座,負責將...

TCP握手 揮手的過程分析

華清遠見嵌入式學院 講師。tcp連線建立 在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。伺服器必須準備好接受外來的連線。這通過呼叫socket bind和listen函式來完成,稱為被動開啟 passive open 第一次握手 客戶通過呼叫connect進行主動開啟...