八股—计网

记录一下常见的计算机网络相关的八股

一、url历程

面试经常会遇到一类问题:浏览器输入url会发生什么?

其实这类问题属于老掉牙的问题,但仔细剖析,涵盖了诸多概念,现对其进行分析。

1.1 url组成

输入url,那就得首先明白url的组成。

  • 协议:常见的如http、https
  • 域名
  • 端口号:可省略,采用默认端口号:http-80,https-443
  • 虚拟目录:域名后的/开始到最后一个/结束,非必需
  • 文件名
  • 参数

1.2 详细过程

输入url,以https://www.baidu.com/为例。

  1. 检测输入的url是否合法,包括协议、主机名等,是否存在非法字符;

  2. 接着进行缓存判断,如果命中缓存,则直接使用缓存数据;

    这里缓存又分为强缓存和协商缓存。

    • 强缓存

      强缓存存在两种:expires、cache-control(http1.1存在)

      若存在cache-control,则判断max-age是否过期;

      若存在expires,则判断有效时间是否过期;

    • 协商缓存
      协商缓存也存在两种:if-modified-since、if-none-match(http1.1存在)
      服务器比较Etag值,判断是否资源发生改变;
      服务器比较last-modified,根据最后的修改时间来判断是否命中协商缓存;

  3. 当未命中强缓存,则需要重新向服务器发送请求;

  4. 首先进行DNS解析,首先判断本地是否该域名的ip缓存,有则使用,无则向本地DNS服务器发送请求。
    本地DNS首先检查是否存在缓存,没有则开始迭代请求,依次向根域名服务器、顶级域名服务器、权威域名服务器发送请求,获得ip地址。

  5. 获取到IP地址后,还需获得MAC地址。
    应用层下发数据给传输层,TCP协议会指定源端口号和目的端口号;
    下发到网络层,将本机地址作为源地址,获得的IP地址作为目标地址;

    下发到数据链路层,本机MAC地址作为源MAC地址,目标MAC地址需要分情况讨论:在同一个子网内,使用ARP协议获取目标MAC地址;不在同一个子网内,请求转发给网关,再通过ARP协议拿到网关的MAC地址;

  6. 接着开始TCP三次握手。
    第一次握手,客户端向服务端发送SYN报文,进入SYN_SEND状态;
    第二次握手,服务端收到报文,以自己SYN报文作为应答,进入SYN_REVD状态;
    第三次握手,客户端收到SYN报文,发送ACK报文进行确认,双方进入ESTABLISHED状态。

  7. 如果使用的协议为https协议,则存在TLS握手过程。
    客户端发送16组加密方法、一个随机数A、协议版本号;
    服务端选择加密方法,发送随机数B、CA证书;

    客户端使用CA证书的公钥和加密方法对随机数C进行加密,传输;

    服务端使用私钥进行解密,双方对三个随机数按照选择的加密方法进行加密,生成一把密钥D。
    之后的通信使用D来进行对称加密。

  8. 返回响应
    请求发送到服务器后,判断是否命中协商缓存,有则304,无则返回html文件进行响应。

  9. 页面渲染
    浏览器根据html文件生成DOM树,根据解析到css文件生成css规则树;
    根据DOM树、CSSOM树生成AST(渲染树);
    接着根据AST进行页面布局,明确各个节点的确切位置和大小;

    最后遍历AST,调用渲染对象paint方法进行绘制。

  10. TCP四次挥手

1.3 DNS

域名系统,由一个分层的DNS服务器组成的分布式数据库,提供主机名到ip地址转换的服务。