TCP協議的三次握手和四次揮手

2022-07-15 06:33:09 字數 2324 閱讀 2691

暫時需要的資訊有:

ack : tcp協議規定,只有ack=1時有效,也規定連線建立後所有傳送的報文的ack必須為1

syn(synchronization) : 在連線建立時用來同步序號。當syn=1而ack=0時,表明這是乙個連線請求報文。對方若同意建立連線,則應在響應報文中使syn=1和ack=1. 因此,  syn置1就表示這是乙個連線請求或連線接受報文。

fin (finis)即完,終結的意思, 用來釋放乙個連線。當 fin = 1 時,表明此報文段的傳送方的資料已經傳送完畢,並要求釋放連線。

建立tcp需要三次握手才能建立,而斷開連線則需要四次握手。整個過程如下圖所示:

先來看看如何建立連線的:

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

首先由client發出請求連線即 syn=1 ack=0  (請看頭欄位的介紹), tcp規定syn=1時不能攜帶資料,但要消耗乙個序號,因此宣告自己的序號是 seq=x

然後 server 進行回覆確認,即 syn=1 ack=1 seq=y, ack=x+1,

再然後 client 再進行一次確認,但不用syn 了,這時即為 ack=1, seq=x+1, ack=y+1.

然後連線建立,為什麼要進行三次握手呢(兩次確認)。

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

【注意】中斷連線端可以是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連線就這樣關閉了!

整個過程client端所經歷的狀態如下:

【注意】在time_wait狀態中,如果tcp client端最後一次傳送的ack丟失了,它將重新傳送。time_wait狀態中所需要的時間是依賴於實現方法的。典型的值為30秒、1分鐘和2分鐘。等待之後連線正式關閉,並且所有的資源(包括埠號)都被釋放。

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

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

【問題2】為什麼time_wait狀態需要經過2msl(最大報文段生存時間)才能返回到close狀態?

答:雖然按道理,四個報文都傳送完畢,我們可以直接進入close狀態了,但是我們必須假象網路是不可靠的,有可以最後乙個ack丟失。所以time_wait狀態就是用來重發可能丟失的ack報文。

tcp協議三次握手 四次揮手

起初,伺服器和客戶端都為closed狀態。在通訊開始前,雙方都得建立各自的傳輸控制塊 tcb 伺服器建立完tcb後遍進入listen狀態,此時準備接收客戶端發來的連線請求。第一次握手 客戶端向服務端傳送連線請求報文段。該報文段的頭部中syn 1,ack 0,seq x。請求傳送後,客戶端便進入syn...

TCP協議三次握手四次揮手

1.什麼是tcp協議 tcp協議是作用在傳輸層的傳輸控制協議 tcp 提供一種面向連線的 可靠的位元組流服務 在乙個 tcp 連線中,僅有兩方進行彼此通訊。廣播和多播不能用於 tcp tcp 使用校驗和,確認和重傳機制來保證可靠傳輸 tcp 給資料分節進行排序,並使用累積確認保證資料的順序不變和非重...

TCP協議三次握手四次揮手

tcp有哪些過程?a.建立連線 b.資料傳輸 c.終止連線 tcp三次握手和四次揮手的過程?syn,ack是什麼?syn 請求建立連線 含有同步序列號的標誌位的資料,tcp建立連線時,將這個 位 置1 ack 針對syn的確認應答 fin是什麼?fin 傳送端完成傳送任務 位 當tcp完成資料傳輸需...