八股—计网
八股—计网
记录一下常见的计算机网络相关的八股
一、url历程
面试经常会遇到一类问题:浏览器输入url会发生什么?
其实这类问题属于老掉牙的问题,但仔细剖析,涵盖了诸多概念,现对其进行分析。
1.1 url组成
输入url,那就得首先明白url的组成。
- 协议:常见的如http、https
- 域名
- 端口号:可省略,采用默认端口号:http-80,https-443
- 虚拟目录:域名后的/开始到最后一个/结束,非必需
- 文件名
- 锚
- 参数
1.2 详细过程
输入url,以https://www.baidu.com/为例。
检测输入的url是否合法,包括协议、主机名等,是否存在非法字符;
接着进行缓存判断,如果命中缓存,则直接使用缓存数据;
这里缓存又分为强缓存和协商缓存。
强缓存
强缓存存在两种:expires、cache-control(http1.1存在)
若存在cache-control,则判断max-age是否过期;
若存在expires,则判断有效时间是否过期;
协商缓存
协商缓存也存在两种:if-modified-since、if-none-match(http1.1存在)
服务器比较Etag值,判断是否资源发生改变;
服务器比较last-modified,根据最后的修改时间来判断是否命中协商缓存;
当未命中强缓存,则需要重新向服务器发送请求;
首先进行DNS解析,首先判断本地是否该域名的ip缓存,有则使用,无则向本地DNS服务器发送请求。
本地DNS首先检查是否存在缓存,没有则开始迭代请求,依次向根域名服务器、顶级域名服务器、权威域名服务器发送请求,获得ip地址。获取到IP地址后,还需获得MAC地址。
应用层下发数据给传输层,TCP协议会指定源端口号和目的端口号;
下发到网络层,将本机地址作为源地址,获得的IP地址作为目标地址;下发到数据链路层,本机MAC地址作为源MAC地址,目标MAC地址需要分情况讨论:在同一个子网内,使用ARP协议获取目标MAC地址;不在同一个子网内,请求转发给网关,再通过ARP协议拿到网关的MAC地址;
接着开始TCP三次握手。
第一次握手,客户端向服务端发送SYN报文,进入SYN_SEND状态;
第二次握手,服务端收到报文,以自己SYN报文作为应答,进入SYN_REVD状态;
第三次握手,客户端收到SYN报文,发送ACK报文进行确认,双方进入ESTABLISHED状态。如果使用的协议为https协议,则存在TLS握手过程。
客户端发送16组加密方法、一个随机数A、协议版本号;
服务端选择加密方法,发送随机数B、CA证书;客户端使用CA证书的公钥和加密方法对随机数C进行加密,传输;
服务端使用私钥进行解密,双方对三个随机数按照选择的加密方法进行加密,生成一把密钥D。
之后的通信使用D来进行对称加密。返回响应
请求发送到服务器后,判断是否命中协商缓存,有则304,无则返回html文件进行响应。页面渲染
浏览器根据html文件生成DOM树,根据解析到css文件生成css规则树;
根据DOM树、CSSOM树生成AST(渲染树);
接着根据AST进行页面布局,明确各个节点的确切位置和大小;最后遍历AST,调用渲染对象paint方法进行绘制。
TCP四次挥手
1.3 DNS
域名系统,由一个分层的DNS服务器组成的分布式数据库,提供主机名到ip地址转换的服务。

