输入网址至页面显示

文章目录

  • 概述
  • 一、DNS解析
      • DNS协议
      • DNS查询过程
  • 二、TCP连接
      • 三次握手
      • 为什么是三次握手
  • 三、HTTP请求
      • 请求报文
      • HTTP请求方法
      • GET和POST请求区别
  • 四、服务器处理请求并返回HTTP报文
      • 响应报文
      • HTTP状态码
  • 五、浏览器解析渲染页面
  • 六、断开连接
      • 四次挥手
      • 为什么要四次挥手


概述

    从输入网站到页面显示,可以分为以下过程:

  • DNS解析
  • 发起TCP连接
  • 发起HTTP请求
  • 服务器处理请求并返回HTTP报头
  • 浏览器解析渲染页面
  • 断开连接

一、DNS解析

DNS协议

    DNS即域名系统(Domain Name System),提供了一种主机名到IP地址的转换服务。它是一个由分层的DNS服务器组成的分布式数据库,是定义主机查询此分布式出具库的方式的应用协议。
    DNS的作用是将域名解析为IP地址,客户端向DNS服务器发送域名请求,DNS告知客户机Web服务器的IP地址。

DNS查询过程

    DNS服务器解析域名时候,会按照如下过程进行解析,直至查找到对应的IP地址。

  • 浏览器缓存中查找相应IP地址
  • 将请求发送给本地DNS服务器,在本地域名服务器缓存中查找
  • 本地DNS服务i其向顶级域名服务器发送请求,接收请求的服务器查询缓存,如果有记录就返回查询结果,如果没有就返回相关的下一级权威域名服务器的地址列表
  • 本地DNS服务器向权威域名服务器发送请求,域名服务器返回对应的结果
  • 本地DNS服务器将返回结果保存在缓存中,并将结果返回给浏览器

二、TCP连接

三次握手

    TCP利用三次握手提供可靠的传输。

  • 第一次握手:客户端发送SYN包(seq=x),并进入SYN_SENT状态,等待服务器确认。
  • 第二次握手:服务器受到SYN包,确认用户的SYN(ack=x+1),同时发送自己的SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
  • 第三次握手:客户端受到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
    输入网址至页面显示_第1张图片

为什么是三次握手

    采用三次握手是为了防止旧的重复连接引起连接混乱问题。TCP建立连接时,采用客户端-服务器模式。当采用两次握手时,可能会出现失效的连接请求报文段突然又到达服务器端,进而产生错误。

三、HTTP请求

    构建HTTP请求,并通过TCP协议,发送到服务器指定端口。

请求报文

    请求报文由请求行请求报头请求正文组成,请求行即方法+路径+HTTP版本。
输入网址至页面显示_第2张图片

HTTP请求方法

    HTTP的常见请求方法如下:

  • GET:向服务器获取shuju
  • POST:将实体提交到指定资源,通常会造成服务器资源修改
  • PUT:上传文件,修改数据
  • DELETE:删除服务器上的对象
  • HEAD:获取报文首部,与GET相比,不返回报文主体部分
  • OPTIONS:询问支持的请求方法,用于跨域请求
  • TRACE:追踪请求-响应的传输路径
  • CONNECT:请求在代理服务器通信时简历用于TCP通信的隧道

GET和POST请求区别

  • 是否幂等:GET请求是幂等的,常用于对服务器资源不会产生影响的场景,POST是不幂等的,常用于对服务器资源产生影响的场景。
  • 是否缓存:浏览器一般会对Get请求缓存,而很少对POST请求缓存。
  • 报文格式:GET请求中报文实体部分为空,POST请求的报文中实体部分一般为向服务器发送的数据。
  • 安全性:GET请求将请求参数放入URL中向服务器发送,相对于POST请求安全性较低。
  • 请求长度:浏览器对于URL存在长度限制。
  • 参数类型:POST请求的参数传递支持更多的数据类型。

四、服务器处理请求并返回HTTP报文

    服务器接收到请求后,会对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。

响应报文

响应报文由状态行响应报头响应正文组成,相应行由HTTP版本、状态码和原因三部分组成。
输入网址至页面显示_第3张图片

HTTP状态码

    常见的HTTP状态码有以下几种:

  • 200 OK
  • 301 Moved Permanently
  • 302 Found
  • 404 Not Found

五、浏览器解析渲染页面

    浏览器解析渲染页面过程如下:

  • 解析HTML形成DOM树
  • 解析CSS形成CSSOM树
  • 合并DOM树和CSSOM树形成Render Tree
  • 浏览器开始渲染并绘制页面
    输入网址至页面显示_第4张图片

六、断开连接

四次挥手

    数据传输完毕后,双方都可释放连接。最开始客户端和服务端均处于ESTABLISHED状态,假设客户端主动关闭,服务器端被动关闭。

  • 第一次挥手:客户端发送一个FIN,用于通知服务器端数据传送已结束,此时客户端仍可以接收数据。FIN=1,其序列号seq=u(前面传送过来的数据的最后一个字节的序号加一),此时客户端进入FIN_WAIT_1状态。
  • 第二次挥手:服务器端受到FIN包后,发送一个ACK给客户端(ack=u+1),此时服务器进如CLOSE_WAIT状态。客户端受到响应后,进入FIN_WAIT_2状态。
  • 第三次挥手:服务端完成数据传输后,向客户端发送一个FIN(seq=w),服务器端进入LAST_ACK状态。
  • 第四次挥手:客户端受到FIN后,发送ACK(ack=w+1)给服务端,今日TIME——WAIT状态,等待2MSL(最大报文段寿命)后进入CLOSED状态。服务器端受到确认后进入CLOSED状态。
    输入网址至页面显示_第5张图片

为什么要四次挥手

    挥手阶段中服务端的 ACK 和 FIN 数据包不能合为一次。因为挥手阶段的流程为客户端发送FIN数据包表示自己发完了,服务端立即回复 ACK 数据包表示自己知道了,此时客户端到服务端的连接已经释放了,客户端不会再发送数据了,但服务端还可以继续向客户端发送数据,等到服务端也完成了数据发送,才会发送 FIN,这时客户端回复 ACK,就可以结束通信了。

你可能感兴趣的:(计算机网络,服务器,网络)