在浏览器输入地址后回车到页面显示全流程

  • DNS查询
    • 浏览器缓存,host,路由器缓存,本地DNS,根,*域,权威
  • 建立TCP连接
    • SYN置1 ,随机初始序号,发送SYN后进入SYN_SENT状态
    • serviceSYN cookie防御系统
      • 没有部署
        • 为该连接分配 TCP缓存和相关变量(半开连接) ,随机初始序号,SYN置1,ACK(SYNACK报文段)
      • 有部署
        • 不生成半开连接 ,而是把初始序号设为hash(源IP,源port,目的IP,目的port),之后就还没有部署一样
        • 再搜到客户的ACK后判断ACK的确认序号-1是否等于hash(源IP,源port,目的IP,目的port),是的话才分配 TCP缓存和相关变量,此时TCP连接才正式建立双向连接
    • 客户收SYNACK后分配 TCP缓存和相关变量,进入ESABLISHED状态,SYN置0,ACK,可开始携带数据(HTTP请求)
  • 服务端对请求进行相应,客户拿到相应数据后开始解析HTML文档,解析完成后渲染显示在屏幕上
  • 在服务端发送完响应后,如果HTTP请求的首部行Connection
    • 为close
      • 服务器断开TCP连接
        • 服务器FIN置1,发送后进入FIN_WAIT_1状态
        • 客户发送ACK,服务器接到ACK后进入FIN_WAIT_2状态。
        • 等客户确认数据发送完成后,FIN置1,发送给服务器
        • 服务器收到FIN后发送ACK并进入TIME_WAIT状态,经过某个等待时间后连接正式关闭,释放资源,客户端收到这个ACK后也响应的关闭连接,释放资源
    • 为 keep-alive
      • 保持TCP连接
上一篇:博通Broadcom SDK源码学习与探讨3——Cable Modem Docsis3.0


下一篇:谈谈网络协议 – 传输层( Transport)