跳到主要内容

一次 Web 请求的完整历程

浏览器如何解析 URL?​

  • 解析: 浏览器先解析输入的地址;
  • 分支: 若格式不正确, 就把输入当作关键词交给搜索引擎; 若格式正确, 则对 URL 做必要转义;

DNS 如何解析域名?​

  • 客户端生成 DNS 查询报文并发出;
  • 依次查询根 DNS、顶级 DNS 与权威 DNS 服务器, 获得 URL 对应的 IP 地址;

TCP 与 HTTP 如何交互?​

  • 建立连接: 按目标 IP 地址发起 TCP 三次握手;
  • 传输: 在 TCP 套接字中发送请求并解析 HTTP 响应报文;
  • 关闭连接: 数据传输完成后执行 TCP 四次挥手;

HTTPS 在何时插入?​

  • 时机: 使用 HTTPS 时, 在 TCP 连接建立之后、传输应用数据之前;
  • 过程: 执行 SSL 四次握手完成密钥协商与身份鉴别;

网页如何被渲染?​

  1. 读取响应内容并加载 HTML;
  2. 解析 HTML, 构造 DOM;
  3. 加载外部资源, 如 js、css 与多媒体;
  4. 把 css 与 js 应用到 DOM 上完成渲染;

网络层与链路层在这一过程中做了什么?​

  • 网络层:
    • 通过 DHCP 获得本机 IP 地址;
    • 数据平面: 各路由器对数据包做存储转发;
    • 控制平面: AS 内部使用 OSPF 选路, AS 之间通过 BGP 选路;
  • 链路层:
    • 使用 CRC 做差错检测;
    • 使用多路访问协议解决共享信道竞争;
    • 使用 ARP 获取子网内的 MAC 地址, 并借助 ARP 与网关把请求转发到其他子网;
    • 使用交换机与自学习机制实现帧的存储转发;