从输入URL到展示出页面发生了什么


从输入URL到展示页面发生了什么:

  1. DNS解析URL为对应的IP地址
  2. 根据IP地址建立 TCP 连接
  3. 发起HTTP请求
  4. 服务器处理HTTP请求,浏览器接收HTTP响应
  5. 页面渲染,构建DOM树
  6. 关闭 TCP 连接

一、DNS域名解析

TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息,于是人们发明了域名,并通过域名系统来映射域名和IP地址,域名解析的过程实际是将域名还原为IP地址的过程

域名解析过程:

发送端主机作为域名系统树形结构的一个子节点,通过域名信息,从下到上查找对应IP地址的过程。如果到根节点(根域名服务器)还找不到,即找不到该主机。
在这里插入图片描述

二、TCP连接

在通过第一步的DNS域名解析后,获取到了服务器的IP地址,在获取到IP地址后,开始建立一次连接,这是由TCP协议完成的,主要通过三次握手进行连接:

  1. 第一次握手:建立连接时,客户端发送SYN到服务器,并进入SYN_SENT状态,等待服务器确定;
  2. 第二次握手:服务器收到SYN,必须确认客户的SYN,同时自己也发送一个SYN给客户端,即SYN+ACK包,此时服务器进入SYN_RECV状态;
  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送ACK包,此包发送完毕后,客户端和服务器都进入ESTABLISHED状态,完成三次握手,TCP连接建立成功。

三次握手

完成三次握手后,客户端和服务器开始传送数据。

三、发起HTTP请求

HTTP请求包括请求行、请求头、请求体:HTTP协议详解

四、浏览器接收HTTP响应

服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态行响应头响应体三个部分。

HTTP响应状态码如下:

在这里插入图片描述
响应体为服务器返回给浏览器的信息,主要由HTML,CSS,JS,图片文件等组成。

五、页面渲染

浏览器拿到响应文本后,解析HTML代码,请求JS,CSS等资源,最后进行页面渲染,呈现给用户。

页面渲染一般分为以下几个步骤:

  • 解析HTML文件,构建DOM树
  • 解析CSS文件,构建CSSOM树(CSS规则树)
  • DOM树与CSSOM树合成渲染树
  • 构建好渲染树之后,会过滤掉display:none 这种无需渲染的节点,将render tree渲染到页面

六、断开TCP连接

当数据传输结束之后,四次挥手断开TCP连接:在断开连接之前客户端和服务器都处于ESTABLISHED状态,双方都可以主动断开连接,以客户端主动断开连接为优。

  1. 第一次挥手:客户端打算断开连接,向服务器发送FIN报文(FIN标记位被设置为1,1表示为FIN,0表示不是),FIN报文中会指定一个序列号seq=n,之后客户端进入FIN_WAIT_1状态;
  2. 第二次挥手:服务器收到连接释放报文段(FIN报文)后,就向客户端发送ACK应答报文,以客户端的FIN报文的序列号 seq+1 作为ACK应答报文段的确认序列号ack = seq+1 = n + 1。此时服务器进入CLOSE_WAIT(等待关闭)状态,此时的TCP处于半关闭状态,客户端到服务器的连接释放。客户端收到来自服务器的ACK应答报文段后,进入FIN_WAIT_2状态;
  3. 第三次挥手:服务器也打算断开连接,向客户端发送连接释放(FIN)报文段,之后服务器进入LASK_ACK(最后确认)状态,等待客户端的确认;
  4. 第四次挥手:客户端收到来自服务器的连接释放(FIN)报文段后,会向服务器发送一个ACK应答报文段,之后客户端进入TIME_WAIT(时间等待)状态,服务器收到ACK应答报文段后,服务器就进入CLOSE(关闭)状态,到此服务器的连接已经完成关闭。

四次挥手

客户端处于TIME_WAIT状态时,此时的TCP还未释放掉,需要等待2MSL后,客户端才进入CLOSE状态。

七、广域网数据传输流程

广域网数据传输流程图如下:
在这里插入图片描述


总结

本篇文章到这里就结束了,本文简单的描述了从输入URL到页面展示中间发生了什么,事实上实际中要比这个复杂的多,如果你觉得有收获的话,就留下你的👍吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怎样让大排不硬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值