当我们在浏览器中输入一个URL后,发生了什么?

在输入网址后回车或者刷新页面的时候,渲染出页面,计算机和浏览器要做的:

首先是域名解析:

通过DNS(domain name system域名系统)获取IP地址,DNS查询步骤,其中一步成功则直接跳到建立连接部分:

  • 浏览器搜索自身的DNS缓存
  • 搜索操作系统自身的DNS缓存

  • 读取本地的HOST文件

  • 向域名服务器发送请求

建立TCP连接(TCP三次握手):

浏览器获得域名对应的IP地址后,建立TCP连接,TCP协议通过“三次握手”等方法保证传输的安全可靠:

  • 发送方:SYN(synchronize),客户端发送SYN包(SYN=j)到服务器

  • 接收方:SYN/ACK:在接收到客户端的syn包后,服务器也要发送一个SYN包给客户端,即SYN+ACK包,(确认信息传达)

  • 发送方:ACK:客户端收到SYN+ACK包后,向服务器发送ACK包(确认接收方在线可收消息,握手结束)

  • Accept:完成三次握手,客户端与服务器开始传送数据

发送HTTP请求:

TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了。使用了比如HTTP的get方法请求一个根域里的一个域名,协议可以采用HTTP1.0的一个协议。

  • 请求行(如:GET /index.html HTTP/1.0用来说明请求类型,要访问的资源以及所使用的HTTP版本.)

  • 请求头(用来说明服务器要使用的附加信息)

  • 空行(CR+LF)

  • 报文主体

 

服务器发送HTML响应:

服务器端接收到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的一个结果的数据返回给浏览器

  • 状态行(如:HTTP/1.1 200 OK,HTTP协议版本号、响应状态码、状态码信息)

  • 响应首部(用来说明客户端需要使用的一些附加信息)

  • 空行(CR+LF)

  • 报文主体(响应正文)

 

浏览器解析HTML页面代码

浏览器拿到了拿到了完整的HTML页面代码,在解析和渲染这个页面的时候,里面的JS、CSS、图片静态资源,他们同样也是一个个HTTP请求,都需要经过上面的步骤

浏览器渲染

浏览器根据拿到的资源对页面进行渲染

TCP连接的释放(四次挥手)

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

  • 客户端:FIN:客户端进程发出连接释放报文,并且停止发送数据;

  • 服务器:ACK:服务器收到连接释放报文,发出确认报文;

  • 服务器:FIN+ACK:将最后的数据发送完毕后,就向客户端发送连接释放报文

  • 客户端:ACK:收到服务器的连接释放报文后,发出确认报文(服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接)

posted @ 2020-08-20 14:31  叶子叶子耶  阅读(508)  评论(0编辑  收藏  举报