从网址输入url将会发生什么
从一个url地址到最终页面渲染完成,发生了什么。
1 DNS解析
DNS解析:将域名地址解析成 IP 地址
1.浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有就调用这个IP地址映射,完成域名解析。
2.如果浏览器缓存中没有,浏览器会检查操作系统缓存中有没有对应的已解析过的结果,如果查找到则返回。
3.如果没有则向本地 DNS 服务器发起请求。本地 DNS 服务器也会先检查是否存在缓存,如果没有就会先向根域名服务器发起请求,获得负责的顶级域名服务器的地址后,再向顶级域名服务器请求,然后获得负责的权威域名服务器的地址后,再向权威域名服务器发起请求,最终获得域名的 IP 地址后,本地 DNS 服务器再将这个 IP 地址返回给请求的用户。
如果要查询 www.baidu.com 的 IP 地址,首先会在浏览器的缓存中查找是否有该域名的缓存,存在就返回。如果浏览器缓存中没有,浏览器会检查操作系统缓存中有没有对应的已解析过的结果,如果查找到则返回。如果不存在就将请求发送到本地的 DNS 服务器中,本地 DNS 服务器会判断是否存在该域名的缓存,如果不存在,则向根域名服务器发送一个请求,根域名服务器返回负责 .com 的顶级域名服务器的 IP 地址的列表。然后本地 DNS 服务器再向其中一个负责 .com 的顶级域名服务器发送一个请求,负责 .com 的顶级域名服务器返回负责 .baidu 的权威域名服务器的 IP 地址列表。然后本地 DNS 服务器再向其中一个权威域名服务器发送一个请求,最后权威域名服务器返回一个对应的主机名的 IP 地址列表。
2 TCP连接:三次握手
初始服务端处于LISTEN状态。
第一次握手:客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。
第二次握手:服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。
第三次握手:当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。
TCP 为什么会进行三次握手?
为了确认双方的接收能力和发送能力都正常,防止已失效的连接请求报文段又到了服务端,从而产生错误。
第三次握手的作用:是客户端对服务器端的初始序号的确认。如果只使用两次握手,那么服务器就没有办法知道自己的序号是否已被确认。
3 发送请求
请求报文
4 接收响应
响应报文
5 渲染页面
1.遇见 HTML 标签,调用 HTML 解析器解析成 Token 构成 DOM 树
2.遇见 style/link 标签,调用 css 解析器,处理 css 并构成 css OM 树
3.遇见 script 标签,调用 javascript 解析器,处理 script 代码(绑定事件,修改dom树/om树)
4.将 DOM 树,CSS OM 树合并成渲染树,根据渲染树计算布局
5.将各个节点颜色渲染在页面上
6 断开连接,4次挥手
第一次挥手:若客户端认为数据发送完成,则它需要向服务端发送连接释放请求。
第二次挥手:服务端收到连接释放请求后,会告诉应用层要释放 TCP 连接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明客户端到服务端的连接已经释放,不再接收客户端发的数据了。但是因为 TCP 连接是双向的,所以服务端仍旧可以发送数据给客户端。
第三次挥手:服务端如果此时还有没发完的数据会继续发送,完毕后会向客户端发送连接释放请求,然后服务端便进入 LAST-ACK 状态。
第四次 挥手:客户端收到释放请求后,向服务端发送确认应答,此时客户端进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃)时间,若该时间段内没有服务端的重发请求的话,就进入 CLOSED 状态。当服务端收到确认应答后,也便进入 CLOSED 状态。
TCP 使用四次挥手的原因是因为 TCP 的连接是全双工的,所以需要双方分别释放到对方的连接,单独一方的连接释放,只代表不能再向对方发送数据,连接处于的是半释放的状态。
最后一次挥手中,客户端会等待一段时间再关闭的原因,是为了防止发送给服务器的确认报文段丢失或者出错,从而导致服务器端不能正常关闭。
- 本文作者: étoile
- 版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!