客户端与服务器:一次请求的旅程(HTTP、DNS)

这一集讲了什么

在浏览器里敲下网址,到页面开始显示,请求要依次经过六站:用 DNS 把域名换成 IP,用 TCP 和服务器握手,用 TLS 商量加密,然后才是发请求、服务器干活、返回结果。这一集里的毫秒数是为了演示取的典型值,真实的数字会随网络远近和服务器而变,但结构是一样的:前三站和“干活”本身无关,却常常占掉大头。

于是有两个最常见的优化:把 DNS 结果缓存起来,以及复用已经建立的连接,让握手和加密只做一次。再让任意一站变慢,总时间会同样地增加,这就是为什么优化前要先问:时间花在哪一站。

先修

没有先修,可以直接看。

现实里用在哪

  • 浏览器的预解析和预连接 Chrome 等浏览器会在你点链接之前,先把页面里的域名解析好、把连接建好,就是在偷前三站的时间。
  • 公共 DNS(如 1.1.1.1、8.8.8.8) 它们替千万用户缓存域名的解析结果,所以大多数查询不用一路问到源头。
  • HTTP/2 和 HTTP/3 HTTP/2 让一条连接同时跑多个请求;HTTP/3 把传输握手和加密握手合在一起,进一步缩短前面几站。

接着看

  • API 设计:REST 与 RPC 即将推出
  • 负载均衡:流量怎么分给多台机器 即将推出
  • 缓存与 CDN:命中率和新鲜度的取舍 即将推出

第 1 集

本集是《系统设计》系列的第 1 集(计划共 29 集)。

查看系列全部分集