输入URL到页面渲染的整个过程
第一步:DNS
DNS的作用就是通过域名查询到具体的IP。
因为IP存在数字和英文的组合(IPv6),很不利于人类记忆,所以就出现了域名。我们可以把域名看成某个IP的别名,DNS就是去查询这个别名的真正的名称是什么。
在TCP握手之前就已经进行了DNS查询,这个查询是操作系统自己做的。当浏览器中想访问www.baidu.com时,会进行以下操作:
- 操作系统会首先在本地缓存中查询IP
- 若没有则在系统配置的DNS服务器中查询
- 如果这时候仍然没查到,就会直接去DNS根服务器查询,这一步查询会找出负责
com这一级域名的服务器 - 然后去该服务器查询
baidu这个二级域名 - 接下来三级域名的查询器其实是我们配置的,我们可以给
www这个域名配置一个IP,然后还可以给别的三级域名配置一个IP。
以上是DNS迭代查询,还有种是递归查询,区别就是前者是有客服端去做的查询,后者是由系统配置的NDS服务器做的请求,得到结果后将数据返回给客服端。
DNS是基于UDP查询的。(第二节介绍UDP)
第二步:TCP和TLS
应用层会下发数据给传输层,这里TCP协议会指明两端的端口号,然后下发给网络层,网络层中的IP协议会确定IP地址,并且指示了数据传输中如何跳转路由器。然后包会再被封装到数据链路层的数据帧中,最后就是物理层面的传输了。
这一部分中,可以详细说下TCP的握手情况以及TCP的一些特性。
当TCP握手结束后会进行TLS握手,然后开始正式的传输数据。
TLS的握手情况以及两种加密方式的内容。 数据在进入服务端之前,可能会先经过负责均衡的服务器,它的作用就是将请求合理的分发到多台服务器上,这时假设服务端会相应一个HTML文件。
第三步:浏览器处理
首先浏览器会判断状态码是什么,如果是200那就继续解析,如果是400或500的话就会报错,如果是300的话进行重定向,这里会有个重定向计数器,避免过多次数重定向,超过次数也会报错。
浏览器开始解析文件,如果gzip格式的话会先解压一下,然后通过文件的编码格式知道改如何去解析文件。
文件解码成功后正式开始渲染流程,会根据HTML构建DOM树,有CSS的话回去构建CSSDOM树,如果遇到script标签的话,会判断是否存在async和defer,前者会并行运行下并执行JS,后者会先下载文件,然后等带HTML解析完成后顺序执行。
如果以上都没有,就会阻塞渲染流程知道JS执行完毕后,遇到文件会去下载文件,如果使用HTTP/2协议的话加大的提高多图的下载效率。
CSSOM和DOM树构建完成后回开始生成render树,这一步就是确定页面的元素的布局、样式等等多方面的东西。
在生成Render树的过程中,浏览器就开始调用GPU绘制,合成图层,将内容显示在屏幕上了。
UDP
首先UDP协议是面向无连接的,也就是不需要在正式传递数据之前先连接起双方,然后UDP协议指示数据报文的搬运工,不保证有序且不丢失的传递到对端,并且UDP协议也没有任何控制流量的算法,总的来说UDP相较于TCP更加的轻便。
面向无连接
首先UDP是不需要和TCP一样在发送数据前进行三次握手建立连接,想发数据就可以发送了。
并且只是数据报文的搬运工,不会对数据进行任何拆分和拼接操作。
具体来说就是:
- 在发送端,应用层将数据传递给传输层UDP协议,UDP只会给数据增加一个UDP头标识下是UDP协议,然后就传递给网络层。
- 在接收端,网络层将数据传递给传输层,UDP指示去除IP报文头就传递给应用层,不会任何拼接操作
不可靠性
- 无连接,通信都不需要建议连接,想发就发,肯定是不可靠的
- 无备份,不关心对方是否收到。收到什么数据就发什么数据,不会对数据进行备份
- 不关心网络情况,以恒定的速度发送数据。当网络情况不好使,不会对发送速率进行调整,可能会丢包。
高效
正因为它没有TCP那么复杂,不需要保证数据不丢失且有序到达,所以在效率方面提高了不少。
UDP的头部开销小,只有八个字节,相比TCP的至少二十字节要少得多,在传输数据报文时是高效的。
UDP头部包含了以下几个数据
- 两个十六位的端口号,分别是源端口(可选字段)和目标端口
- 整个数据报文的长度
- 整个数据报文的校验和(IPv4可选字段),该字段用于发现头部信息和数据中的错误
传输方式
UDP不止支持一对一的传输模式,同样支持一对多,多对多,多对一的方式,也就使说UDP提供了单播,多播,广播的功能。
适合使用的场景
UDP虽然相对TCP有很多缺点,但是真是因为这些缺点造就了它高校的特性,在很多实时性要求高的地方都可以看到UDP的身影
直播:TCP需严格保证传输的正确性,一旦有某个数据对端没有接收到,就会停止下来知道对端接收到这个数据,在网络情况差的时候就会变成画面卡住,然后在继续播放下一帧的情况,但是对于直播来说,用户肯定关注的是最新的画面,而不是因网络差而丢失的老旧画面。
王者荣耀:用户体量使相当大的,如果使用TCP连接,就可能出现服务器不够用的情况,因为每台服务器可供支撑的TCP连接数量是有限的。再者和直播一样,用户更加关心最新的游戏画面。