zoukankan      html  css  js  c++  java
  • HTTP三次握手四次挥手

    一 浏览器渲染流程:
    • DNS解析:把域名解析成IP地址
    • TCP 建立连接:TCP三次握手
    • 发送HTTP请求
    • 服务器处理并响应报文
    • 浏览器解析并渲染页面
    • 断开连接:TCP 结束连接
     
    二 HTTP之TCP三次握手与四次挥手详解:https://www.jianshu.com/p/12790cea57ac
     三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。
    1. 第一次握手([SYN], Seq = x)
    客户端发送一个SYN标记的包,Seq初始序列号x,发送完成后客户端进入SYN_SEND状态。
    1. 第二次握手([SYN,ACK], Seq = y, ACK = x + 1)
    服务器返回确认包(ACK)应答,同时还要发送一个SYN包回去。ACK = x + 1,表示确认收到(客户端发来的Seq值 + 1),Seq = y, 表示让客户端确认是否能收到。发送完成后服务端进入SYN_RCVD状态。
    1. 第三次握手([ACK], ACK = y + 1)
    客户端再次发送确认包(ACK),ACK = y + 1, 表示确认收到服务器的包(服务端发来的Seq值 + 1)。客户端发送完毕后,进入ESTABLISHED状态,服务端接收到这个包,也进入ESTABLISHED状态, TCP握手结束。
    TCP连接的断开需要发送四个包,所以称为四次挥手。
    1. 第一次挥手([FIN], Seq = x)
    客户端发送一个FIN标记的包,告诉服务器需要关闭连接,表示自己不用发送数据了,但是还可以接收数据。发送完成后,客户端进入FIN_WAIT_1状态。
    1. 第二次挥手 ([ACK], ACK = x + 1)
    服务端发送一个ACK的确认包,告诉客户端接收到关闭的请求,但是还没有准备好。发送完成后,服务端进入CLOSE_WAIT状态,客户端收到这个包后,进入FIN_WAIT_2,等待服务器关闭连接。
    1. 第三次挥手 ([FIN], Seq = y)
    服务端准备好关闭连接时,发送FIN标记的包,告诉客户端准备关闭了。发送完成后,服务端进入LAST_ACK状态,等待客户端确认。
    1. 第四次挥手 ([ACK], ACK = y + 1)
    客户端接收到服务端的关闭请求,再发送ACK标记的确认包,进入TIME_WAIT状态,等待服务端可能请求重传的ACK包。
    服务端接收到ACK包后,关闭连接,进入CLOSED状态。
    客户端在等待固定时间(两个最大段生命周期)后,没有接收到服务的ACK包,认为服务器已关闭连接,自己也关闭连接,进入CLOSED状态。
    三 HTTP三次握手与四次挥手动态图:https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc
    序号(sequence number):seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发送自己的数据。
    确认号(acknowledgement number):ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。(发送接收到的对方的数据)
    标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:
    • URG:紧急指针(urgent pointer)有效。
    • ACK:确认序号有效。(为了与确认号ack区分开,我们用大写表示),用于确定收到了请求。
    • PSH:接收方应该尽快将这个报文交给应用层。
    • RST:重置连接。
    • SYN:用于建立连接。
    • FIN:释放一个连接。
     
     
     
     

  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/terrymin/p/14554404.html
Copyright © 2011-2022 走看看