一种被动的评估HTTP连接速度的方法

本文编译自Can you GET Me Now? Estimating the Time-to-First-Byte of HTTP Transactions with Passive Measurements, Internet Measurement Conference, 2012.

HTTP连接的延时是用户体验质量的重要组成部分,因此对于移动网络的运营商来说,也是非常感兴趣的工作。现有的监控方法都需要主动的使用探针或是被动的预测RTT(Round Trip Latency),然而,在实际中,使用主动探针来监控整个移动网络是不太具有实践可能的(性能损耗太大),并且RTT是HTTP延时中唯一的因素,因此也不太可能使用传统的预测方法来进行预测。本文提出了一种被动评估HTTP连接速度的方法,这种方法克服了前述方法的缺点。

设计

为了抓取影响移动网络时延的全部潜在因素,作者集中在分析以新的TCP连接开头的HTTP连接的TTFB(Time to First Byte, 首字节响应时间)。因为典型的Web服务器经常会每几秒断开持久性的HTTP连接以避免资源的浪费,这是因为这些连接更有可能是用户初始请求时产生的HTTP连接。

WX20171203-114740@2x.png

作者定义TTFB为第一个SYN包发出时和第一个HTTP数据包到达时的时间差。如上图所述的t2-t0即为一个TTFB。作者定义的TTFB与传统的不同,因为其中不包含DNS请求和返回的时间。这是因为影响TTFB的因素同时也会影响DNS延时,这可能会错过由于DNS初始化导致的状态变更。

最原始的预测TTFB的方法就是使用SYN或DATA-ACK之间的时间。如图中的r2-r0. 如果图中的UE和probe间的延时都是固定的,这种预测就是正确的。然而由于STT的原因,r0-t0的延时是大于r1-t1和r2-t2的。为了克服这种缺陷,我们必须直接来预测t0和t2.

许多TCP连接都包含了TCP时间戳的选项。这个选项在TCP头部增加两个字段(TS Val即Timestamp Value和TSecr即Timestamp Echo Reply)。这两个字段分别由发送者和接收者设置。作者利用这一选项来进行观察和预测。

假设发送者在计算TS0和TS2时使用同样的频率,记为1/G'次每秒,可以容易地得出一个等式:t2-t0 = G'(TS2-TS0)。然而G'的值是未知的,其依赖于设备生成时间戳的设定,我们又没有一个更好的解决时间这一问题的方案。换句话说,可靠地在探针中预测G'也是本项目的一个重要的挑战。

TTFB预测

由于TTFB=t2-t0, 我们直接使用TS2-TS0来预测TTFB。 然而TSi的单位,也就是时间戳的粒度是未知的,所以我们必须将其转换为可比较的时间单位。我们定义G为粒度系数,则有:

G=(r2-r1)/(TS2-TS1).

因此就有 TTFB = r2-r1 = G(TS2-TS1)。对于每一个TCP连接,我们只需要收集r0, r1, r2, TS0, TS1和TS2. 由于ri的值在几秒钟里几乎不会变,作者使用16位的时间戳来记录。

若考虑STT另一种形式的公式可被表示为:

TTFB' = 2(r1-r0)+STT。这种方法使用的前提时我们可以直接获得时间戳粒度G而不需要获取HTTP请求/响应的包。作者在文中提出了一些获取G的方式。因为G对于操作系统和设备常常是不变的,因此我们可以构造一个保存G的数据库,之后通过判别操作系统和设备来直接获取G。这虽然增加了工作总量,但是避免了追踪HTTP的GET请求和数据包ACK请求之间的时间。

局限性

本文虽然理论上提出了一种方式来预测TTFB,但依然存在着相当的局限性。作者的假设主要包括:

  1. 假设TTFB的流程如图2,但实际上总是存在着例外情况的。
  2. 假设DATA-ACK是紧随着HTTP-DATA包的,但实际上有小部分的例外情况。
  3. 假设SYN在到达探针前是不会丢失的,所以时间戳就可以表示初始时用户的行为。

感想

本文提出了一种预测TTFB的方法,主要是依据了时间戳的粒度系数G。作者依据一系列的假设来近似地预估TTFB,从而实现一种被动的、无需主动探针的方法来监测网络质量。这是作者所采取的折衷,在影响不大的前提下实现了更容易的监测方法。在实际生产中的很多问题可以利用这种思想,在对最终结果影响不大的前提下,用近似来取代精确的测量,从而降低成本。