TCP的三次握手四次揮手

2021-10-08 11:55:02 字數 1542 閱讀 3876

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_sent狀態,等待伺服器確認;syn:同步序列編號(synchronize sequence numbers)。

第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態;

第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established(tcp連線成功)狀態,完成三次握手。

其實,在進行第二次握手時(即伺服器向客戶端進行應答時),可以看作時發了兩次包,先回答客戶端的服務請求(ack=1,確認號ack=x+1),然後向客戶端發出請求(syn=1,序列號seq=y)

問題1:三次握手中,為什麼客戶端最後還要再向伺服器傳送一次確認呢?答:這是為了防止已失效的連線請求報文段突然又傳到了伺服器。所謂「已失效的連線請求報文段」是這樣產生的。考慮一種正常的情況,客戶端發出連線請求,但因為連線請求報文丟失而未收到確認。於是客戶端再重傳了一次連線請求,後來收到了確認,建立了連線。資料傳輸完後,就釋放了連線。客戶端共傳送了兩個連線請求報文段,其中第乙個丟失,第二個到達了伺服器,沒有所謂的「已失效的連線請求報文段」。

(1)客戶端a傳送乙個fin,用來關閉客戶a到伺服器b的資料傳送。

(2)伺服器b收到這個fin,它發回乙個ack,確認序號為收到的序號加1。和syn一樣,乙個fin將占用乙個序號。

(3)伺服器b關閉與客戶端a的連線,傳送乙個fin給客戶端a。

(4)客戶端a發回ack報文確認,並將確認序號設定為收到序號加1。

問題2:為什麼客戶端傳送完最後乙個資料後要在time-wait狀態等待一段時間呢?答:第一:為了保證客戶端最後傳送的那個ack報文段能夠到達伺服器。這個ack報文段可能會丟失。因而使處在last-ack狀態的b收不到對已傳送的fin+ack報文段的確認。伺服器會超時重傳這個fin+ack報文段,而客戶端就能在2msl時間內收到這個重傳的fin+ack報文段。接著客戶端重傳一次確認,重新啟動2msl計時器,最後客戶端和伺服器都可以進入到closed(關閉)狀態。如果沒有2msl等待時間,那麼就無法收到重傳的fin+ ack包,無法進入正常的closed狀態。

第二,防止「已失效的連線請求報文段」出現在本連線中。客戶端在傳送完最後乙個ack報文段,再經過時間2msl,就可以使本連線持續的時間內所產生的報文段都從網路中消失。這樣就可以使下乙個新的連線中不會出現這種舊的連線請求報文段。

TCP三次握手 四次揮手

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

TCP三次握手 四次揮手

服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...

TCP三次握手四次揮手

tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...