Http TCP 详解

310 阅读2分钟

Http 1.0 :

 每一次请求都会建立一个TCP请求,这个TCP连接是在http请求创建的时候同步创建的,http请求发送到服务器端,服务器端响应了之后,这个TCP连接就关闭了

Http 1.X :

  •  http1.0以后,通过connection:keep-alive 方式声明将连接一直保持。一个请求以后,另外一个请求可以继续传输数据。TCP连接保持,数据包中其他请求就不需要再进行第二次的三次握手。
  •  TCP请求是一个协议(数据包),一个TCP协议数据包里面会有很多个http请求,简而言之,一个http请求是在一个TCP数据包中,TCP协议有三次握手和四次挥手

 词汇解释说明:

1. SYN 建立一次新链接
2. SEQ 序号,标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记
3. ACK 确认序号有效
4. FIN 请求释放连接

TCP三次握手

1. 第一次握手:建立连接,客户端发送报文,SYN:1。等待客户端相应。(请求建立新连接)
2. 第二次握手:客户端收到SYN报文,对SYN报文进行确认,设置ACK为X+1,设置SEQ发送给客户端。客户端进入ESTABLISHED状态(告诉客户端,服务器收到了你的数据)
3. 第三次握手:收到服务端返回的SYN/ACK报文。完成第三次握手。服务端进入ESTABLISHED状态(告知客户端,收到你发的数据了)

image.png

为什需要三次握手?

防止服务端开启一些无用的连接增加服务端开销以及防止一些已失效的报文传输到服务端产生错误。

 

TCP四次挥手:

1. 第一次挥手:客户端请求释放链接,发送FIN报文
2. 第二次挥手:服务端收到客户端TCP报文,确认客户端要断开链接,服务端结束ESTABLISHED状态。进入半关闭(CLOSE-WAIT)状态。
3. 第三次挥手:服务端结束半关闭(CLOSE-WAIT)状态,停止服务端向客户端发送数据。但是还是可以接受客户端发送的数据。服务端向客户端发送报文ACK
4. 第四次挥手:客户端收到服务端的TCP报文,确认服务端好释放链接准备

image.png

image.png