HTTP的三次握手与四次挥手

目录

1.HTTP 的三次握手
2.HTTP 的四次挥手

HTTP 的三次握手

三次握手(Three-way Handshake)是指在客户端和服务器之间建立一个 TCP 连接,总共需要发送 3 个包,其中客户端向服务器发送 2 个包,服务器向客户端发送 1 个包。进行三次握手主要是为了确认双方的接收能力和发送能力,并且根据双方的序列号和确认号,在客户端和服务器之间建立可靠的 TCP 连接用于传送数据。

最初,客户端处于 Closed 的状态,服务器处于 Listen 状态。

三次握手过程如下:

第一次握手:客户端向服务器发送一个 SYN 报文,并指定客户端的初始化序列号 ISN,此时客户端处于 SYN_SEND 状态。

第二次握手:服务器在接收到客户端发送的 SYN 报文后,会向客户端发送一个 SYN 报文,并指定服务器的初始化序列号 ISN,同时会把客户端的初始化序列号 ISN + 1 作为 ACK 的值,此时服务器处于 SYN_REVD 状态。

第三次握手:客户端在收到服务器发送的 SYN 报文后,会向服务器发送一个 ACK 报文,同时把服务器的初始化序列号 ISN + 1 作为 ACK 的值,此时客户端处于 ESTABLISHED 状态。服务器在收到客户端发送的 ACK 报文后,也处于 ESTABLISHED 状态。此时,双方建立了连接。

HTTP 的四次挥手

四次挥手(four-way handshake)是指断开客户端和服务器之间的 TCP 连接,总共需要发送 4 个包,其中客户端向服务器发送 2 个包,服务器向客户端发送 2 个包。进行 4 次挥手是为了保证 TCP 连接传输的数据的完整性。客户端或服务器均可主动发起挥手动作。

客户端和服务器建立了连接后,都处于 ESTABLISHED 状态。

此时,假设客户端希望关闭连接,四次挥手过程如下:

第一次挥手:客户端会向服务器发送一个 FIN 报文,并指定一个序列号。此时客户端处于 FIN_WAIT1(终止等待1) 状态。

第二次挥手:服务器在接收到客户端发送的 FIN 报文后,会向客户端发送一个 ACK 报文,同时会把客户端的序列号 + 1 作为 ACK 的值,此时服务器处于 CLOSE_WAIT 状态。客户端在收到服务器发送的 ACK 报文后,进入 FIN_WAIT2(终止等待2)状态,等待服务器发出连接释放报文。

第三次挥手:当服务器希望断开连接时,会向客户端发送一个 FIN 报文,并指定一个序列号。此时服务器处于 LAST_ACK 的状态。

第四次挥手:客户端在接收到服务器发送的 FIN 报文后,会向服务器发送一个 ACK 报文,同时会把服务器的序列号 + 1 作为 ACK 的值,此时客户端处于 TIME_WAIT 状态。在等待一段时间,确保服务器收到自己发送的 ACK 报文后,客户端进入 CLOSED 状态。服务器在接收到客户端发送的 ACK 报文后,就会关闭连接,此时服务器处于 CLOSED 状态。

此条目发表在HTTP分类目录,贴了, , 标签。将固定链接加入收藏夹。