【发布时间】:2012-06-08 12:57:02
【问题描述】:
如果计算机必须获取某些信息,网络请求通常是最慢的来源之一。我的理解是,总的来说:
- 网络访问比磁盘慢很多
- 磁盘访问比 RAM 慢得多
- RAM 访问比 CPU 寄存器慢得多
我的问题是:平均而言,是什么让网络访问比磁盘慢得多?
显然这并不总是正确的:您可能拥有与同一房间内的服务器的超快网络连接和缓慢的硬盘驱动器。但就这个问题而言,请想象普通用户在网上冲浪:从磁盘读取数据比从 Google 获取相同数据要快。
我能想到的与 HTTP 请求有关的部分是:
- IP 的 DNS 查找
- 建立 TCP 连接的三次握手
- 数据包化:将 HTTP 请求分解为 TCP 数据包,然后将其放入 IP 数据包中,以及所有必要的计数器和校验和等
- 传输:电信号通过电线所需的时间
- 路由:发生在路由器内部的决策、缓冲等
- 处理:服务器对响应的制定
- 响应的所有传输和路由,包括重新发送丢失的数据包
- 排序和组装 TCP 数据包的内容并将 HTTP 响应返回给客户端
如果我遗漏了任何主要步骤,请告诉我。
在这些步骤中,忽略服务器处理(这实际上不是网络问题),是否有任何部分特别慢?它们中的任何一个都解释了网络请求中的大部分固有延迟吗?
更新:一些数字
DNS 查找平均需要 60~120 毫秒,然后是完整的往返 (RTT) 执行 TCP 握手 - 结合起来,创建 100-200 毫秒 在我们发送请求之前的延迟!
- 来源:Chrome Networking: DNS Prefetch & TCP Preconnect,由 Google 开发人员倡导者 Ilya Grigorik 提供
【问题讨论】:
-
我很好奇,你为什么问这种毫无意义的问题。
-
@AlanKuras - 简短的回答是“因为我喜欢了解我所依赖的系统。”但它可能有实际的好处。例如:将我们的数据中心移近物理距离会大大提高速度吗?还是购买速度更快的路由器会更好?
-
致那些投票结束的人:这个问题有一个可量化的、客观的答案。它对每个联网程序都有实际影响。请重新考虑。
-
毫无意义的问题,因为:哪个网络,哪个磁盘?我们是在谈论一些磨损的主轴磁盘与 LAN 或 SSD 与冰岛的某些服务器吗?另外:网络协议比 TCP 多。
-
@moodywoody - 我明确询问平均情况,这将是与您半球中的服务器的 TCP 连接,但不在您的建筑物中。请想象一个普通用户在普通电脑上上网。