在浏览器输入 URL 回车之后发生了什么

这篇文章主要参考在浏览器中输入URL并回车后都发生了什么?,感兴趣的可以去直接看原文。
简略步骤:

  • 浏览器对,URL解析,获取到域名地址;
  • 计算机对DNS进行解析,获取到IP地址;
  • 浏览器与服务器通过三次握手建立TCP连接;
  • 服务器解析传入的参数字段,通过对应的后台接口,返回结果;
  • 浏览器对拿到的数据进行渲染,显示结果;

1. URL解析

在这里插入图片描述URLUniversal Resource Locator):统一资源定位符,也就是我们经常使用的网址。如上图所示,URL通常由4部分组成:协议、主机、端口、路径

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

当然还有参数和锚等。

URL解析,主要就是通过正则匹配找到所需要的参数,比如域名。

2. DNS解析

在进行DNS解析时,会经历以下步骤:

  • 查询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间),如果没有找到,

  • 检查系统缓存,检查hosts文件,这个文件保存了一些以前访问过的网站的域名和IP的数据。它就像是一个本地的数据库。如果找到就可以直接获取目标主机的IP地址了。没有找到的话,需要

  • 检查路由器缓存,路由器有自己的DNS缓存,可能就包括了这在查询的内容;如果没有,要

  • 查询ISP DNS 缓存ISP服务商DNS缓存(本地服务器缓存)那里可能有相关的内容,如果还不行的话,需要,

  • 递归查询:从根域名服务器顶级域名服务器再到权限域名服务器依次搜索哦对应目标域名的IP

在这里插入图片描述

2.1 【相关问题】DNS 使用的是 TCP 协议还是 UDP协议?

DNS 在进行区域传输的时候使用 TCP 协议,其它时候则使用 UDP 协议。

DNS中,有 2 种类型的 DNS 服务器,一个叫主 DNS 服务器,一个叫辅助DNS 服务器。

一个区中主 DNS 服务器从自己本机的数据文件中读取该区的 DNS 数据信息,而辅助 DNS
服务器则从区的主 DNS 服务器中读取该区的 DNS 数据信息。当一个辅助 DNS 服务器启动时,
它需要与主 DNS 服务器通信,并加载数据信息,这就叫做区域传输。在这个过程使用 TCP 协议进行传输。

区域传输使用 TCP 而不是 UDP,因为辅域名服务器会定时(一般时 3 小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。而数据同步传送的数据量比一个请求和应答的数据量要多得多。UDP 报文的最大长度512 字节,而 TCP 则允许报文长度超过 512 字节,故而在进行区域传输的时候使用TCP更加合理。

另外,TCP 是一种可靠的连接,保证了数据的准确性

在客户端向DNS服务器查询域名时使用 UDP 协议,因为一般返回的内容都不超过 512 字节,用 UDP 传输即可。不用经过 TCP 三次握手,这样 DNS 服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向 DNS 服务器查询的时候使用 TCP,但事实上,很多 DNS 服务器进行配置的时候,仅支持 UDP 查询包。

3. 建立TCP连接

一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程可以描述为:

SYN:发起一个新连接。
ACK:确认序号有效。

在这里插入图片描述
上图来自知乎:https://zhuanlan.zhihu.com/p/51560184

第一次握手:一般由客户端发起(SYN=1,seq=J) 客户端发送一个 TCPSYN 标志为 1 的包,指明客户端打算连接的服务器的端口,以及初始化序列号为 J,保存在包头的序列号字段中。 发送完毕后客户端进入 SYN_SENT 状态,等待Server确认。

第二次握手Server收到数据包后由标志位SYN=1知道Client请求建立连接,服务器会将SYN 标志位和 ACK 标志位均为 1。服务器选择自己的 ISN 序列号K,放在 seq 域中,同时将确认序列号(ack)设置为客户端的 ISN1,即 J+1 发送完毕后服务器进入 SYN_RCVD 状态。

第三次握手Client收到确认后,检查ack是否为J+1ACK是否为1,如果正确则将标志位ACK置为1ack=K+1,并将该数据包发送给ServerServer检查ack是否为K+1ACK是否为1,如果正确则连接建立成功,ClientServer进入ESTABLISHED状态,完成三次握手,随后ClientServer之间可以开始传输数据了。

为什么需要三次握手:
假设不需要三次握手,那么客户端发送一个连接请求到服务器,由于网络延迟,客户端就放弃了这次连接,但是服务器并不知道,就以为客户端需要请求,就一直等待客户端数据,但是此时的连接并没有建立,这样会浪费很多服务器资源

  • 三次握手才可以阻止重复历史连接的初始化
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免资源浪费

TCP 建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能
帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。

4. 请求和传输数据

5. 浏览器渲染页面

  • 浏览器会解析html源码,然后创建一个 DOM树。
  • 解析CSS代码,计算出最终的样式数据,形成css对象模型CSSOM
  • 加载JS,遇到了js,将立即阻塞DOM树的构建,将控制权移交给 JavaScript 引擎,等到 JavaScript 引擎运行完毕,浏览器才会从中断的地方恢复DOM树的构建。
  • 利用DOMCSSOM构建一个渲染树(rendering tree)。
  • 浏览器就根据渲染树直接把页面绘制到屏幕上。

Thanks

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦否

文章对你有用?不妨打赏一毛两毛

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

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

打赏作者

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

抵扣说明:

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

余额充值