Title

HTTP基本链接原理

http的基本链接原理

因为http是基于TCP/IP的协议,所以还是要说说这个面试老题,3次握手4次挥手的问题了。

三次握手:

  1. 第一次握手:客户端发送了一个带有SYN(建立连接)的Tcp报文到服务器,这个三次握手中的开始。表示客户端想要和服务端建立连接。
  2. 第二次握手:服务端接收到客户端的请求,返回客户端报文,这个报文带有SYN(建立连接)和ACK(确认)标志,询问客户端是否准备好。
  3. 第三次握手:.客户端再次响应服务端一个ACK(确认),表示我已经准备好。

为什么要3次握手那么麻烦?

当然这个其实作为一个前端不需要关注,因为其实基本没你什么事情,但是了解到这一些基本知识,对于日后排除页面性能的时候,某些指标就是需要了解整个http链接过程了。言归正传,为什么需要三次握手呢?

因为第一次握手的时候,客户端发送了一个请求,之后因为网络原因或者任何原因,客户端断网了或者没有收到服务器回传的ACK确认码,在这种情况下,如果服务器不去接收客户端回传ACK码确认,就开启链接,在这个时候就浪费了服务器的资源了,所以第三次握手就为这样的一种情况设计的,服务器必须确认客户端接收到了ACK码才开启连接。

 

四次挥手:

  1. 第一次握手:客户端发送一个FIN(结束),用来关闭客户到服务端的连接。
  2. 第二次握手:服务端收到这个FIN,他发回一个ACK(确认),确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。
  3. 第三次握手:服务端发送一个FIN(结束)到客户端,服务端关闭客户端的连接。
  4. 第四次握手:客户端发送ACK(确认)报文确认,并将确认的序号+1,这样关闭完成。

那么为什么关闭一个http请求需要走4次握手呢?

因为服务器收到了客户端的FIN报文请求关闭连接的时候,服务器端很可能并不会立即关闭连接,而是需要等待所有数据都传输完毕后才进行关闭,所以会先回复一个ACK报文告诉客户端收到了FIN报文,当数据都传输完毕了,才使用FIN报文告诉客户端现在可以进行关闭了,客户端回复ACK报文进行确认,彼此才真正关闭连接。因此需要4次握手。

文章转载:https://www.cnblogs.com/quietxin/p/10740213.html

posted @ 2020-01-09 09:29  快乐小洋人  阅读(313)  评论(0编辑  收藏  举报