Http的三次握手和4次挥手

171 阅读1分钟

超文本传输协议(Hyper Text Transfer Protocol, HTTP)是一个简单的请求-响应协议,属于OSI七层模型中的应用层协议,主要作用是规范数据传输的格式标准,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
Http的工作是基于TCP/IP协议来完成客户端与服务器之间的连接和数据传输。
TCP的三次握手:是指建立一个TCP连接时,需要客户端与服务器总共发送3个包,作用就是确认客户端和服务端接受和发送是否正常。
握手过程如下图:

截屏2022-09-19 10.04.15.png

那为什么需要3次握手,而不是2次,或者4次? (2次不够,4次没有必要,效率不够高。) TCP是具备双向传输能力的,前两次握手只能证明Client->Server方向是连通的,要保证Server->Client方向的连通,至少需要发送一次数据包。因此TCP连接至少需要3次握手才能保证双向连通。

TCP的4次挥手:

截屏2022-09-19 11.08.44.png

断开连接为什么需要4次挥手? 看图可知,前两次的挥手只能保证Client->Server方向的连接断开(Client没有数据要发送),而后两次的挥手才是确认了Server->Client方向的断开(Server没有数据要发送)。第四次挥手后Client要等一段时间才关闭,是因为要确保Server接收到了确认挥手的信息。如果第四次没有被Server接收,Server会进行超时重传(第三次挥手信息)。只有这样才能确保Server能正常关闭了。