如果计算机必须获取一些信息,网络请求通常是最慢的可能来源之一。我的理解是,总的来说:
- 网络访问比磁盘慢得多
- 磁盘访问比 RAM 慢得多
- RAM 访问比 CPU 寄存器慢得多
我的问题是:平均而言,是什么让网络访问比磁盘慢得多?
显然,这并不总是正确的:您可能拥有与同一房间内的服务器的超快网络连接和缓慢的硬盘驱动器。但就这个问题而言,请想象一个普通用户在网上冲浪:从磁盘读取数据将比从 Google 获取相同数据更快。
我能想到的一些与 HTTP 请求有关的部分是:
- IP的DNS查找
- 建立 TCP 连接的三次握手
- 打包:将 HTTP 请求分解为 TCP 数据包,然后将它们放入 IP 数据包中,并使用所有必要的计数器和校验和等
- 传输:电信号穿过导线所需的时间
- 路由:发生在路由器内部的决策、缓冲等
- 处理:服务器对响应的制定
- 响应的所有传输和路由,包括重新发送丢失的数据包
- 排序和组装 TCP 数据包的内容并将 HTTP 响应返回给客户端
如果我错过了任何主要步骤,请告诉我。
在这些步骤中,忽略服务器处理(这实际上不是网络问题),是否有任何部分特别慢?它们中的任何一个都解释了网络请求中的大部分固有延迟吗?
更新:一些数字
平均 DNS 查找需要 60~120 毫秒,然后是完整的往返 (RTT) 来执行 TCP 握手 - 加起来,这会在我们发送请求之前产生 100 到 200 毫秒的延迟!
- 资料来源:Chrome 网络:DNS 预取和 TCP 预连接,作者 Ilya Grigorik,Google 开发人员倡导者