溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

TCP/IP鏈接的三次握手與四次揮手

發(fā)布時間:2020-07-04 10:04:03 來源:網(wǎng)絡(luò) 閱讀:301 作者:ye小灰灰 欄目:網(wǎng)絡(luò)安全




一.概述圖:

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

TCP/IP鏈接的三次握手與四次揮手

先來看看如何建立連接的。

TCP/IP鏈接的三次握手與四次揮手

首先Client端發(fā)送連接請求報文,Server段接受連接后回復(fù)ACK報文,并為這次連接分配資源。Client端接收到ACK報文后也向Server段發(fā)生ACK報文,并分配資源,這樣TCP連接就建立了。

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

TCP/IP鏈接的三次握手與四次揮手




二.注意點(diǎn):

(1).標(biāo)志位:

tcp標(biāo)志位,有6種標(biāo)示:

SYN(synchronous建立聯(lián)機(jī))

ACK(acknowledgement 確認(rèn))

PSH(push傳送)

FIN(finish結(jié)束)

RST(reset重置)

URG(urgent緊急)

Sequence number(順序號碼)(自己的)

Acknowledge number(確認(rèn)號碼)(對方的)

具體作用請參考《計算機(jī)網(wǎng)絡(luò)》謝希仁 第6版

(2).鏈接關(guān)閉方:中斷連接端可以是Client端,也可以是Server端。

假設(shè)Client端發(fā)起中斷連接請求,也就是發(fā)送FIN報文。Server端接到FIN報文后,意思是說"我Client端沒有數(shù)據(jù)要發(fā)給你了",但是如果你還有數(shù)據(jù)沒有發(fā)送完成,則不必急著關(guān)閉Socket,可以繼續(xù)發(fā)送數(shù)據(jù)。所以你先發(fā)送ACK,"告訴Client端,你的請求我收到了,但是我還沒準(zhǔn)備好,請繼續(xù)你等我的消息"。這個時候Client端就進(jìn)入FIN_WAIT狀態(tài),繼續(xù)等待Server端的FIN報文。當(dāng)Server端確定數(shù)據(jù)已發(fā)送完成,則向Client端發(fā)送FIN報文,"告訴Client端,好了,我這邊數(shù)據(jù)發(fā)完了,準(zhǔn)備好關(guān)閉連接了"。Client端收到FIN報文后,"就知道可以關(guān)閉連接了,但是他還是不相信網(wǎng)絡(luò),怕Server端不知道要關(guān)閉,所以發(fā)送ACK后進(jìn)入TIME_WAIT狀態(tài),如果Server端沒有收到ACK則可以重傳?!?,Server端收到ACK后,"就知道可以斷開連接了"。Client端等待了2MSL后依然沒有收到回復(fù),則證明Server端已正常關(guān)閉,那好,我Client端也可以關(guān)閉連接了。Ok,TCP連接就這樣關(guān)閉了!




三.狀態(tài)機(jī):

整個過程Client端所經(jīng)歷的狀態(tài)如下:

TCP/IP鏈接的三次握手與四次揮手

而Server端所經(jīng)歷的過程如下:轉(zhuǎn)載請注明:blog.csdn.net/whuslei

TCP/IP鏈接的三次握手與四次揮手

【注意】 在TIME_WAIT狀態(tài)中,如果TCP client端最后一次發(fā)送的ACK丟失了,它將重新發(fā)送。TIME_WAIT狀態(tài)中所需要的時間是依賴于實(shí)現(xiàn)方法的。典型的值為30秒、1分鐘和2分鐘。等待之后連接正式關(guān)閉,并且所有的資源(包括端口號)都被釋放。

【問題1】為什么連接的時候是三次握手,關(guān)閉的時候卻是四次握手?
答:因?yàn)楫?dāng)Server端收到Client端的SYN連接請求報文后,可以直接發(fā)送SYN+ACK報文(SYN與ACK是在一個報文中的)。其中ACK報文是用來應(yīng)答的,SYN報文是用來同 步的。但是關(guān)閉連接時,當(dāng)Server端收到FIN報文時,很可能并不會立即關(guān)閉SOCKET,所以只能先回復(fù)一個ACK報文,告訴Client端,"你 發(fā)的FIN報文我收到了"。只有等到我Server端所有的報文都發(fā)送完了,我才能發(fā)送FIN報文,因此不能一起發(fā)送。故需要四步握手。

【問題2】為什么TIME_WAIT狀態(tài)需要經(jīng)過2MSL(最大報文段生存時間)才能返回到CLOSE狀態(tài)?

答:雖然按道理,四個報文都發(fā)送完畢,我們可以直接進(jìn)入CLOSE狀態(tài)了,但是如果網(wǎng)絡(luò)是不可靠的,有可以最后一個ACK丟失。所以TIME_WAIT狀態(tài)就是用來重發(fā)可能丟失的ACK報文。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI