網(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)。