Ilya Grigorik的《高性能浏览器网络》一书正是回答了这一问题。整章(第7章)专门讨论移动网络。该书指出,高性能的问题几乎总是与延迟有关,我们通常有足够的带宽,但协议会妨碍您。无论是TCP 慢启动,无线资源控制器(RRC)还是次优配置。如果仅在移动网络中遇到较差的延迟,这就是它们的设计方式。
书中有一张表格介绍典型延迟:
表7-2。活动移动连接的数据速率和延迟
世代| 数据速率 潜伏
2G | 100–400 Kbit / s | 300–1000毫秒
3G | 0.5–5 Mbit / s | 100–500毫秒
4G | 1–50 Mbit / s | <100毫秒
尽管与延迟非常相关,TCP特性的三向握手或慢启动并不能真正回答问题,因为它们同样影响有线连接。真正影响移动网络延迟的是IP下的层。如果IP下的层的延迟为半秒,则与服务器的TCP连接将花费约1.5秒(0.5s * 3),因为您看到的数字加起来很快。如前所述,假设移动设备没有空闲。如果手机空闲,则它首先必须“连接”网络,这需要与塔架协商资源储备(简化),并且在LTE中花费50-100毫秒,在3G中花费数秒,甚至更多。在较早的网络中。
图7-12。LTE请求流延迟
- 控制平面等待时间:RRC协商和状态转换产生的固定的一次性等待时间成本:空闲到活动<100毫秒,休眠到活动<50毫秒。
- 用户平面延迟:设备与无线电塔之间传输的每个应用程序包的固定成本:<5毫秒。
- 核心网络延迟:从无线电塔到数据包网关的数据包传输费用,取决于运营商:实际上是30-100 ms。
- Internet路由延迟:运营商的数据包网关与公共Internet上的目标地址之间的可变延迟成本。
实际上,一旦设备处于连接状态,许多已部署的4G网络的端到端延迟往往会在30-100毫秒范围内。
因此,您有一个请求(图8-2。“简单” HTTP请求的组件):
- RRC协商50-2500毫秒
- DNS查找1 RTT
- TCP握手1个RTT(现有连接)或3个RTT(新连接)
- TLS握手1-2个RTT
- HTTP请求1-n RTT
并带有真实数据:
表8-1。单个HTTP请求的延迟开销
| 3G | 4G
控制平面| 200–2,500毫秒| 50–100毫秒
DNS查找| 200毫秒| 100毫秒
TCP握手| 200毫秒| 100毫秒
TLS握手| 200–400毫秒| 100–200毫秒
HTTP请求| 200毫秒| 100毫秒
总延迟开销| 200–3500毫秒| 100–600毫秒
另外,如果您有一个交互式应用程序想要在移动网络中正常运行,则可以尝试禁用Nagle算法(内核等待数据合并为较大的数据包,而不是发送多个较小的数据包),寻找测试方法在https://stackoverflow.com/a/17843292/869019中。
由Velocity Conference赞助的https://hpbn.co/上的每个人都可以免费阅读整本书。这是一本非常值得推荐的书,不仅对开发网站的人有用,对于在某个网络上为客户端提供字节服务的每个人都非常有用。