浏览器从输入网址到看到网页的流程

一、解析URL

⾸先会对 URL 进⾏解析,分析所需要使⽤的传输协议请求的资源的路径。如果输⼊的URL 中的协议或者主机名不合法,将会把地址栏中输⼊的内容传递给搜索引擎。如果没有问题,浏览器会检查 URL 中是否出现了⾮法字符,如果存在⾮法字符,则对⾮法字符进⾏转义后再进⾏下⼀过程。

二、缓存判断

浏览器会判断所请求的资源是否在缓存⾥,如果请求的资源在缓存⾥并且没有失效,那么就直接使⽤,否则向服务器发起新的请求。

三、DNS解析

下⼀步⾸先需要获取的是输⼊的 URL 中的域名的 IP 地址,⾸先会判断本地是否有该域名的 IP 地址的缓存,如果有则使⽤,如果没有则向本地 DNS 服务器发起请求。本地 DNS 服务器也会先检查是否存在缓存,如果没有就会先向根域名服务器发起请求,获得负责的顶级域名服务器的地址后,再向顶级域名服务器请求,然后获得负责的权威域名服务器的地址后,再向权威域名服务器发起请求,最终获得域名的 IP 地址后,本地 DNS 服务器再将这个 IP 地址返回给请求的⽤户。⽤户向本地 DNS 服务器发起请求属于递归请求,本地 DNS 服务器向各级域名服务器发起请求属于迭代请求

四、获取MAC地址

当浏览器得到 IP 地址后,数据传输还需要知道⽬的主机 MAC 地址,因为应⽤层下发数据给传输层,TCP 协议会指定源端⼝号⽬的端⼝号,然后下发给⽹络层。⽹络层会将本机地址作为源地址,获取的 IP 地址作为⽬的地址。然后将下发给数据链路层,数据链路层的发送需要加⼊通信双⽅ 的 MAC 地址,本机的 MAC 地址作为源 MAC 地址,⽬的 MAC 地址需要分情况处理。通过将 IP 地址本机的⼦⽹掩码 相与,可以判断是否与请求主机在同⼀个⼦⽹⾥,如果在同⼀个⼦⽹⾥,可以使⽤ APR 协议获取到⽬的主机的 MAC 地址,如果不在⼀个⼦⽹⾥,那么请求应该转发给⽹关,由它代为转发,此时同样可以通过 ARP 协议来获取⽹关的 MAC 地址,此时⽬的主机的 MAC 地址应该为⽹关的地址。

五、TCP三次握手

下⾯是 TCP 建⽴连接的三次握⼿的过程,⾸先客户端向服务器发送⼀个 SYN 连接请求报⽂段和⼀个随机序号,服务端接收到请求后向服务器端发送⼀个 SYN ACK报⽂段,确认连接请求,并且也向客户端发送⼀个随机序号。客户端接收服务器的确认应答后,进⼊连接建⽴的状态,同时向服务器也发送⼀个ACK 确认报⽂段,服务器端接收到确认后,也进⼊连接建⽴状态,此时双⽅的连接就建⽴起来了。

六、HTTPS握手

如果使⽤的是 HTTPS 协议,在通信前还存在 TLS 的⼀个四次握⼿的过程。⾸先由客户端向服务器端发送使⽤的协议的版本号、⼀个随机数和可以使⽤的加密⽅法。服务器端收到后,确认加密的⽅法,也向客户端发送⼀个随机数和⾃⼰的数字证书。客户端收到后,⾸先检查数字证书是否有效,如果有效,则再⽣成⼀个随机数,并使⽤证书中的公钥对随机数加密,然后发送给服务器端,并且还会提供⼀个前⾯所有内容的 hash 值供服务器端检验。服务器端接收后,使⽤⾃⼰的私钥对数据解密,同时向客户端发送⼀个前⾯所有内容的 hash 值供客户端检验。这个时候双⽅都有了三个随机数,按照之前所约定的加密⽅法,使⽤这三个随机数⽣成⼀把秘钥,以后双⽅通信前,就使⽤这个秘钥对数据进⾏加密后再传输。

七、返回数据

当⻚⾯请求发送到服务器端后,服务器端会返回⼀个 html ⽂件作为响应,浏览器接收到响应后,开始对 html ⽂件进⾏解析,开始⻚⾯的渲染过程。

八、页面渲染

浏览器⾸先会根据 html ⽂件构建 DOM 树,根据解析到的 css ⽂件构建 CSSOM 树,如果遇到 script 标签,则判断是否含有 defer 或者 async 属性,要不然 script 的加载和执⾏会造成⻚⾯的渲染的阻塞。当 DOM 树和 CSSOM 树建⽴好后,根据它们来构建渲染树。渲染树构建好后,会根据渲染树来进⾏布局。布局完成后,最后使⽤浏览器的 UI 接⼝对⻚⾯进⾏绘制。这个时候整个⻚⾯就显示出来了。

九、TCP四次挥手

最后⼀步是 TCP 断开连接的四次挥⼿过程。若客户端认为数据发送完成,则它需要向服务端发送连接释放请求。服务端收到连接释放请求后,会告诉应⽤层要释放 TCP 链接。然后会发送ACK 包,并进⼊ CLOSE_WAIT 状态,此时表明客户端到服务端的连接已经释放,不再接收客户端发的数据了。但是因为 TCP 连接是双向的,所以服务端仍旧可以发送数据给客户端。服务端如果此时还有没发完的数据会继续发送,完毕后会向客户端发送连接释放请求,然后服务端便进⼊ LAST-ACK 状态。客户端收到释放请求后,向服务端发送确认应答,此时客户端进⼊ TIME-WAIT 状态。该状态会持续 2MSL(最⼤段⽣存期,指报⽂段在⽹络中⽣存的时间,超时会被抛弃) 时间,若该时间段内没有服务端的重发请求的话,就进⼊ CLOSED 状态。当服务端收到确认应答后,也便进⼊ CLOSED 状态.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值