tcp三次握手 以及四次揮手

2022-08-15 20:21:14 字數 1223 閱讀 4302

首先client端傳送連線請求報文,server段接受連線後回覆ack報文,並為這次連線分配資源。client端接收到ack報文後也向server段發生ack報文,並分配資源,這樣tcp連線就建立了。

那如何斷開連線呢?簡單的過程如下:

【注意】中斷連線端可以是client端,也可以是server端。

假設client端發起中斷連線請求,也就是傳送fin報文。server端接到fin報文後,意思是說"我client端沒有資料要發給你了

",但是如果你還有資料沒有傳送完成,則不必急著關閉socket,可以繼續傳送資料。所以你先傳送ack,"告訴client端,你的請求我收到了,但是我還沒準備好,請繼續你等我的訊息"。這個時候client端就進入fin_wait狀態,繼續等待server端的fin報文。當server端確定資料已傳送完成,則向client端傳送fin報文,"告訴client端,好了,我這邊資料發完了,準備好關閉連線了"。client端收到fin報文後,"就知道可以關閉連線了,但是他還是不相信網路,怕server端不知道要關閉,所以傳送ack後進入time_wait狀態,如果server端沒有收到ack則可以重傳。「,server端收到ack後,"就知道可以斷開連線了"。client端等待了2msl後依然沒有收到回覆,則證明server端已正常關閉,那好,我client端也可以關閉連線了。ok,tcp連線就這樣關閉了!

【問題1】為什麼連線的時候是三次握手,關閉的時候卻是四次握手?

答:因為當server端收到client端的syn連線請求報文後,可以直接傳送syn+ack報文。其中ack報文是用來應答的,syn報文是用來同步的。但是關閉連線時,當server端收到fin報文時,很可能並不會立即關閉socket,所以只能先回覆乙個ack報文,告訴client端,"你發的fin報文我收到了"。只有等到我server端所有的報文都傳送完了,我才能傳送fin報文,因此不能一起傳送。故需要四步握手。

三次握手:

客戶端傳送請求,伺服器接受到請求並連線,然後傳送ack,同時分配資源,客戶端接受到ack之後,向伺服器傳送乙個ack

四次揮手:

客戶端傳送fin,表示我要釋放連線,伺服器接受之後,傳送ack,表示我已經接受到了,但是現在不能釋放。。等待伺服器處理完之後,向客戶端傳送fin,表示可以釋放,客戶端接收之後,傳送確認ack表示可以釋放連線

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...