TCP的三次握手四次握手

2020-11-17  本文已影响0人  风向应该可以决定发型吧

HTTP是建立在TCP协议上的。

概念

TCP(Transmission Control Protocol):传输控制协议

位码:TCP标志位,有6种:

Sequence number(顺序号码) Acknowledge number(确认号码)

其他概念:

seq: 序列号
ack: 确认序列号
ACK: 确认位码
SYN: 发起连接标志位码

简单说

3次握手:

  1. 客户端发送连接请求到服务端,进入SYN-SENT 状态
  2. 服务端收到客户端请求后,确认SYN成功后回复客户端,进入SYN-RCVD 状态
  3. 客户端收到服务端的回复,验证ACKack后,给服务端回复一个确认报文,服务端确认通过后,进入ESTAB-LISHED状态,TCP连接建立成功

4次挥手:

  1. 客户端向服务端发送FIN位码,表示要断开连接,并进入FIN-WAIT-1第一阶段等待状态
  2. 服务端接收到客户端的断开请求后,确认FIN成功后,给客户端回复一段报文,服务端进入CLOSE-WAIT 关闭等待状态,客户端进入FIN-WAIT-2第二阶段等待状态
  3. 服务端继续发送剩余的数据,等发送完后立即向客户端发送FIN和ACK位码,等待客户端确认,自身进入LAST-ACK最终确认状态
  4. 客户端接收到服务端的断开请求,先确认服务端返回的报文,确认成功后给服务端发送最后的确认报文;服务端接收到确认报文后立马关闭连接,而客户端会进入2MSL(一个请求来+回的时间)的等待,之所以要等待,因为如果第四次挥手的报文丢失,服务端无法收到确认报文,就会重发第三次挥手的报文,报文一来一回的时间就是2MSL

详细版

http的3次握手":

4次挥手:

假如:
建立连接时(第一次握手)的seq=x,客户端共发送了n个字节的数据;
服务端初始(第二次我搜狐)返回的seq=y,服务端共发送了m个字节的数据.

第四次挥手后为什么要进行2MSL时间的等待?
考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了。

HTTP2 比 HTTP1.X 的优势

TCP三次握手和四次挥手的好处

确保数据的安全和完整。

响应头: 服务器会告诉浏览器数据的长度,浏览器数据长度和响应头数据长度相同,说明数据已经接收完毕了。

TCP和UDP对比

上一篇下一篇

猜你喜欢

热点阅读