面试题:从输入url到页面展示

1.dns解析

为什么需要dns解析?

TCP/IP协议只认识ip地址,不认识域名,域名的设计为了方便记忆,让你记住一个baidu.com远比记录一个180.101.49.12靠谱.

具体什么是dns解析?

d=domain n=name s=system

域名系统解析,就是把名字转换成ip

怎么做dns解析(dns解析的过程)

如果你输入的是一个ip,那么显而易见,你不需要dns解析。

  1. 把输入的url中的域名(主机名)抽离出来
  2. 判断host文件是否有这个主机名
  3. 去查本地dns解析缓存
  4. 问老大的老大根服务器(TLD顶级域名服务器)是否能查出来
    1. 返回一个小老大的ip,你去问这个人试试
    2. 这个人不知道,但是他知道A知道,返回A的地址
    3. … 最后返回了一个ip给你

如果是转发模式,会一级一级往上查找

什么是dns负载均衡

在地理位置不同的地方访问同样的baidu.com,ip地址不一样。会返回一个你所在的位置适合的ip给你

dns优化策略

使用meta告诉浏览器dns预取

<meta http-equiv="x-dns-prefetch-control" content="on" />

可以让域名不需要点击就在后台解析

因为静态资源一般都是使用其他域名来存放(为了解决一个域名只能同时创建6个左右的tcp连接),所以需要dns预解析来性能优化

浏览器缓存、系统缓存、路由器缓存、…进行dns优化

dns一般用tcp还是udp,哪个端口

udp传输效率高,传输字节数小于512字节的报文

因为一次dns解析可能需要查询多次,一次两次tcp连接与udp还差距不大,但是多次就差距很大。

tcp传输大于512字节的报文

tcp可以传输证书,签名,比较可靠

53端口

2.tcp协议

简单介绍一下osi七层协议

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

tcp、udp在传输层 ip协议在网络层 http在应用层 arp在数据链路层

三次握手与四次挥手

SYN(建立连接) ACK(确认) seq(序列号) FIN(结束)

三次握手:

  • 第一次客户端发送 SYN=1 seq=x

  • 服务器收到,返回 SYN=1 SEQ=y ACK=1 ACKnumber=x+1

  • 客户端收到,返回ACK=1 ACKnumber=y+1

  • 在每个阶段丢包:在第三次丢包,服务器会超时重传第二个包,直到收到相应或者超时

四次挥手:

  • FIN=1 SEQ=x 自己处于可以接受数据状态
  • ACK=1,ACKnumber=x+1 收到了,但是我没准备好
  • 还是服务端 FIN=1,seq=y
  • 客户端ACK=1 ACKnumber=y+1 进入TIME_WAIT状态
    • 这个状态是主动关闭的一方保持的
    • 为了解决最后一个包丢包重传
    • 为了之前发的包不影响下一次连接

3.https

通俗易懂:https=http+ssl/tls(鉴权/认证)

为了解决http窃听篡改冒充

基本流程:公钥(非对称)加密算法:加密和解密的key不一致

客户端要一个公钥,加密完成发给你。你收到了,拿自己的私钥解密

  • 怎么保证公钥是你发的公钥
    • 使用证书
  • 公钥加密整个信息太耗时。
    • 使用对话密钥(对称加密)加密信息,公钥加密对话秘钥本身
  1. 客户端向服务器要公钥并验证

  2. 双方生成对话密钥

  3. 通信

  4. ClientHello 我支持A、B、C、D·····加密方法,支持协议版本是1.0,再带一个随机数给你

  5. 那我们用C方法吧,带一个随机数,我的证书包裹着我的公钥给你。

  6. 收到证书,看一下是不是你,是的话拿出公钥,再公钥把一个随机数加密传给服务器,并且告诉对方我们要加密说话了

    • 证书是B带着公钥去机构C申请,然后发给A。A确认是不是B,是B则用这个公钥
  • 为什么要再生成一个随机数。因为前两次的随机数是公开的,这一次的随机数是加密的,不容易被猜出
  1. 收到,组成一个对话密钥,然后告诉对方接下来要开始加密说话了。

4.浏览器解析和渲染

浏览器通过前面铺垫这么多次终于拿到了html

浏览器开始解析html,并将元素转换成一个个dom,构建成dom树和css树

  1. 构建dom树
  2. 构建cssom树
  3. 加载js(遇到script标签,阻塞dom树的创建)等js运行完成,才会继续创建dom树
    • 主要是因为js有可能会对dom操作,浏览器无法知道dom节点最后的内容,为了不造成无意义的操作,阻塞dom树
  4. 构建渲染树
    1. 由dom和cssom树合并,(三者一边加载一边解析一边渲染),根据选人数计算可见元素布局,绘制到屏幕上
  5. 重排和重绘
    1. 重绘就是重新绘制,比如把颜色改了一下
    2. 重排就是重新排列,树节点改变,需要重新布局,生成渲染树
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章