自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

說(shuō)說(shuō)TCP為什么需要三次握手和四次揮手?

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
三次握手(Three-way Handshake)其實(shí)就是指建立一個(gè)TCP連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包,主要作用就是為了確認(rèn)雙方的接收能力和發(fā)送能力是否正常、指定自己的初始化序列號(hào)為后面的可靠性傳送做準(zhǔn)備。

 [[402116]]

本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。

一、三次握手

三次握手(Three-way Handshake)其實(shí)就是指建立一個(gè)TCP連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包

主要作用就是為了確認(rèn)雙方的接收能力和發(fā)送能力是否正常、指定自己的初始化序列號(hào)為后面的可靠性傳送做準(zhǔn)備

過(guò)程如下:

  • 第一次握手:客戶端給服務(wù)端發(fā)一個(gè) SYN 報(bào)文,并指明客戶端的初始化序列號(hào) ISN(c),此時(shí)客戶端處于 SYN_SENT 狀態(tài)
  • 第二次握手:服務(wù)器收到客戶端的 SYN 報(bào)文之后,會(huì)以自己的 SYN 報(bào)文作為應(yīng)答,為了確認(rèn)客戶端的 SYN,將客戶端的 ISN+1作為ACK的值,此時(shí)服務(wù)器處于 SYN_RCVD 的狀態(tài)
  • 第三次握手:客戶端收到 SYN 報(bào)文之后,會(huì)發(fā)送一個(gè) ACK 報(bào)文,值為服務(wù)器的ISN+1。此時(shí)客戶端處于 ESTABLISHED 狀態(tài)。服務(wù)器收到 ACK 報(bào)文之后,也處于 ESTABLISHED 狀態(tài),此時(shí),雙方已建立起了連接

上述每一次握手的作用如下:

  • 第一次握手:客戶端發(fā)送網(wǎng)絡(luò)包,服務(wù)端收到了 這樣服務(wù)端就能得出結(jié)論:客戶端的發(fā)送能力、服務(wù)端的接收能力是正常的。
  • 第二次握手:服務(wù)端發(fā)包,客戶端收到了 這樣客戶端就能得出結(jié)論:服務(wù)端的接收、發(fā)送能力,客戶端的接收、發(fā)送能力是正常的。不過(guò)此時(shí)服務(wù)器并不能確認(rèn)客戶端的接收能力是否正常
  • 第三次握手:客戶端發(fā)包,服務(wù)端收到了。這樣服務(wù)端就能得出結(jié)論:客戶端的接收、發(fā)送能力正常,服務(wù)器自己的發(fā)送、接收能力也正常

通過(guò)三次握手,就能確定雙方的接收和發(fā)送能力是正常的。之后就可以正常通信了

為什么不是兩次握手?

如果是兩次握手,發(fā)送端可以確定自己發(fā)送的信息能對(duì)方能收到,也能確定對(duì)方發(fā)的包自己能收到,但接收端只能確定對(duì)方發(fā)的包自己能收到 無(wú)法確定自己發(fā)的包對(duì)方能收到

并且兩次握手的話, 客戶端有可能因?yàn)榫W(wǎng)絡(luò)阻塞等原因會(huì)發(fā)送多個(gè)請(qǐng)求報(bào)文,延時(shí)到達(dá)的請(qǐng)求又會(huì)與服務(wù)器建立連接,浪費(fèi)掉許多服務(wù)器的資源

二、四次揮手

tcp終止一個(gè)連接,需要經(jīng)過(guò)四次揮手

過(guò)程如下:

  • 第一次揮手:客戶端發(fā)送一個(gè) FIN 報(bào)文,報(bào)文中會(huì)指定一個(gè)序列號(hào)。此時(shí)客戶端處于 FIN_WAIT1 狀態(tài),停止發(fā)送數(shù)據(jù),等待服務(wù)端的確認(rèn)
  • 第二次揮手:服務(wù)端收到 FIN 之后,會(huì)發(fā)送 ACK 報(bào)文,且把客戶端的序列號(hào)值 +1 作為 ACK 報(bào)文的序列號(hào)值,表明已經(jīng)收到客戶端的報(bào)文了,此時(shí)服務(wù)端處于 CLOSE_WAIT狀態(tài)
  • 第三次揮手:如果服務(wù)端也想斷開連接了,和客戶端的第一次揮手一樣,發(fā)給 FIN 報(bào)文,且指定一個(gè)序列號(hào)。此時(shí)服務(wù)端處于 LAST_ACK 的狀態(tài)
  • 第四次揮手:客戶端收到 FIN 之后,一樣發(fā)送一個(gè) ACK 報(bào)文作為應(yīng)答,且把服務(wù)端的序列號(hào)值 +1 作為自己 ACK 報(bào)文的序列號(hào)值,此時(shí)客戶端處于 TIME_WAIT狀態(tài)。需要過(guò)一陣子以確保服務(wù)端收到自己的 ACK 報(bào)文之后才會(huì)進(jìn)入 CLOSED 狀態(tài),服務(wù)端收到 ACK 報(bào)文之后,就處于關(guān)閉連接了,處于 CLOSED 狀態(tài)

四次揮手原因

服務(wù)端在收到客戶端斷開連接Fin報(bào)文后,并不會(huì)立即關(guān)閉連接,而是先發(fā)送一個(gè)ACK包先告訴客戶端收到關(guān)閉連接的請(qǐng)求,只有當(dāng)服務(wù)器的所有報(bào)文發(fā)送完畢之后,才發(fā)送FIN報(bào)文斷開連接,因此需要四次揮手

三、總結(jié)

一個(gè)完整的三次握手四次揮手如下圖所示:

參考文獻(xiàn)

https://zhuanlan.zhihu.com/p/53374516

https://segmentfault.com/a/1190000020610336

 

責(zé)任編輯:武曉燕 來(lái)源: JS每日一題
相關(guān)推薦

2021-01-29 06:11:08

TCP通信三次握手

2021-05-18 12:27:40

TCP控制協(xié)議

2015-10-13 09:42:52

TCP網(wǎng)絡(luò)協(xié)議

2023-10-24 15:22:09

TCPUDP

2019-06-12 11:26:37

TCP三次握手四次揮手

2024-01-12 08:23:11

TCPACK服務(wù)器

2017-09-25 21:27:07

TCP協(xié)議數(shù)據(jù)鏈

2021-07-03 17:47:25

TCP控制協(xié)議

2019-02-01 09:38:16

2023-03-07 08:38:23

三次握手四次揮手服務(wù)端

2020-06-29 14:50:47

TCP狀態(tài)ACK

2023-10-28 09:07:57

TCP面試三次握手

2020-02-17 10:10:43

TCP三次握手四次揮手

2014-09-19 09:46:46

TCPIP

2024-05-07 08:15:33

TCP四次揮手三次握手

2023-11-01 08:04:08

WiresharkTCP協(xié)議

2023-09-07 16:46:54

TCP數(shù)據(jù)傳遞

2021-04-30 13:32:17

TCP三次握手網(wǎng)絡(luò)協(xié)議

2015-11-09 09:58:56

2022-11-17 10:20:49

TCP三次握手四次揮手
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)