TCP三次握手+四次揮手

網(wǎng)絡(luò)

TCP三次握手

通俗理解四次揮手

1、客戶(hù)端發(fā)了個(gè)連接請(qǐng)求消息到服務(wù)端,請(qǐng)求連接(SYN)

2、客戶(hù)端收到請(qǐng)求連接后,確認(rèn)收到了請(qǐng)求,并請(qǐng)求與客戶(hù)端建立連接(ACK+SYN)

3、客戶(hù)端收到建立連接請(qǐng)求后,確認(rèn)與服務(wù)器連接(ACK)

通俗理解:

TCP 三次握手好比在一個(gè)夜高風(fēng)黑的夜晚,你一個(gè)人在小區(qū)里散步,不遠(yuǎn)處看見(jiàn)小區(qū)里的一位漂亮妹子迎面而來(lái),但是因?yàn)槁窡粲悬c(diǎn)暗等原因不能100%確認(rèn),所以要通過(guò)招手的方式來(lái)確定對(duì)方是否認(rèn)識(shí)自己。

你首先向妹子招手(syn),妹子看到你向自己招手后,向你點(diǎn)了點(diǎn)頭擠出了一個(gè)微笑(ack)。你看到妹子微笑后確認(rèn)了妹子成功辨認(rèn)出了自己(進(jìn)入estalished狀態(tài))。

但是妹子有點(diǎn)不好意思,向四周看了一看,有沒(méi)有可能你是在看別人呢,她也需要確認(rèn)一下。妹子也向你招了招手(syn),你看到妹子向自己招手后知道對(duì)方是在尋求自己的確認(rèn),于是也點(diǎn)了點(diǎn)頭擠出了微笑(ack),妹子看到對(duì)方的微笑后確認(rèn)了你就是在向自己打招呼(進(jìn)入established狀態(tài))。

于是兩人加快步伐,走到了一起,彼此之間相互擁抱。

我們來(lái)回顧一下,這個(gè)過(guò)程中總共有四個(gè)動(dòng)作,

你招手
妹子點(diǎn)頭微笑
妹子招手
你點(diǎn)頭微笑

其中妹子連續(xù)進(jìn)行了兩個(gè)動(dòng)作,先是點(diǎn)頭微笑(回復(fù)對(duì)方),然后再次招手(尋求確認(rèn)),實(shí)際上我們可以將這兩個(gè)動(dòng)作合成一個(gè)動(dòng)作,招手的同時(shí)點(diǎn)頭和微笑(syn+ack)。于是這四個(gè)動(dòng)作就簡(jiǎn)化成了三個(gè)動(dòng)作。

你招手
妹子點(diǎn)頭微笑并招手
你點(diǎn)頭微笑

TCP四次揮手

image.png

1、客戶(hù)端請(qǐng)求釋放連接(FIN),并進(jìn)入FIN-WAIT-1階段,此階段客戶(hù)端不會(huì)再向服務(wù)器發(fā)送數(shù)據(jù)(不包括ACK報(bào)文),但能接收服務(wù)器發(fā)送的數(shù)據(jù)

2、服務(wù)器收到請(qǐng)求后,向客戶(hù)端發(fā)送確認(rèn)請(qǐng)求報(bào)文(ACK),隨后進(jìn)入CLOSE-WAIT階段,準(zhǔn)備釋放連接,客戶(hù)端接收到請(qǐng)求后,進(jìn)入FIN-WAIT-2階段

3、服務(wù)器做好釋放連接準(zhǔn)備后,向客戶(hù)端發(fā)送FIN+ACK請(qǐng)求,表示已經(jīng)準(zhǔn)備好釋放連接了,隨后服務(wù)器端結(jié)束CLOSE-WAIT階段,進(jìn)入LAST-ACK階段。并且停止在服務(wù)器端到客戶(hù)端的方向上發(fā)送數(shù)據(jù),但是服務(wù)器端仍然能夠接收從客戶(hù)端傳輸過(guò)來(lái)的數(shù)據(jù)。

4、客戶(hù)端收到從服務(wù)器端發(fā)出的TCP報(bào)文,確認(rèn)了服務(wù)器端已做好釋放連接的準(zhǔn)備,結(jié)束FIN-WAIT-2階段,進(jìn)入TIME-WAIT階段,并向服務(wù)器端發(fā)送一段ACK報(bào)文,確認(rèn)釋放連接,服務(wù)器接收到客戶(hù)端發(fā)送的ACK報(bào)文后,進(jìn)入CLOSED階段,客戶(hù)端在等待2MSL后也進(jìn)入CLOSED階段

通俗理解:

image.png

QA

1、為什么“握手”是三次,“揮手”卻要四次?

  • 建立連接時(shí),被動(dòng)方服務(wù)器端結(jié)束CLOSED階段進(jìn)入“握手”階段并不需要任何準(zhǔn)備,可以直接返回SYN和ACK報(bào)文,開(kāi)始建立連接。

  • 釋放連接時(shí),被動(dòng)方服務(wù)器,突然收到主動(dòng)方客戶(hù)端釋放連接的請(qǐng)求時(shí)并不能立即釋放連接,因?yàn)檫€有必要的數(shù)據(jù)需要處理,所以服務(wù)器先返回ACK確認(rèn)收到報(bào)文,經(jīng)過(guò)CLOSE-WAIT階段準(zhǔn)備好釋放連接之后,才能返回FIN釋放連接報(bào)文

2、為什么客戶(hù)端在TIME-WAIT階段要等2MSL?

  • 當(dāng)客戶(hù)端發(fā)出最后的ACK確認(rèn)報(bào)文時(shí),并不能確定服務(wù)器端能夠收到該段報(bào)文。所以客戶(hù)端在發(fā)送完ACK確認(rèn)報(bào)文之后,會(huì)設(shè)置一個(gè)時(shí)長(zhǎng)為2MSL的計(jì)時(shí)器。MSL指的是Maximum Segment Lifetime:一段TCP報(bào)文在傳輸過(guò)程中的最大生命周期。2MSL即是服務(wù)器端發(fā)出為FIN報(bào)文和客戶(hù)端發(fā)出的ACK確認(rèn)報(bào)文所能保持有效的最大時(shí)長(zhǎng)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。