本文为您介绍CDN产品、DCDN产品(全站加速产品)的监控查询流量、用量查询流量(实际计费流量)与日志统计流量不同的原因。

问题现象

为什么通过CDN/DCDN控制台(或者OpenAPI)的监控查询、用量查询(实际计费流量)功能查到的加速域名使用的流量数据与通过日志统计的流量数据有差异?(通过日志统计的流量数据通常会比通过监控查询流量或者用量查询流量查询的数据更小一点。)

可能原因

日志中response size字段记录的流量数据,只统计了应用层产生的流量,但实际产生的网络流量比应用层统计到的流量要高出7%~15%。主要原因如下:
  • TCP/IP包头的消耗

    HTTP请求基于TCP/IP协议,现有互联网中每个包最大通常是1500个字节。这1500个字节中包含了TCP/IP协议插入的40个字节的包头,包头部分也会产生流量,由于加包头的动作是由服务器操作系统的协议栈完成的,无法被应用层统计到,因此日志里不会记录这40个字节的流量,这部分流量占通过日志计算出流量的2.74%(40/1460)以上,正常情况下占3%左右。

  • TCP重传

    根据互联网物理网络的负载情况,正常情况下发送的包有3%~10%会被互联网丢弃。数据包被丢弃后服务器会对丢弃的部分进行重传,重传动作是由内核层协议栈处理的,应用层无法统计到,这部分流量占我们日志计算出流量的比例,根据网络的好坏而不等,在凌晨互联网轻载的情况下重传率会较低;在晚高峰互联网重载的情况下重传会上升,一般情况下在3%~7%之间。

因此在业界标准中,会在基于日志中response size字段统计出的应用层流量的基础上,再加上7%~15%的网络消耗来得出实际的计费流量数据(即:体现在费用账单上的数据)。阿里云CDN产品(也包括DCDN产品)取平均值10%做为网络消耗流量,因此实际的计费流量(也包括监控查询流量)是通过日志统计流量的1.1倍(即:TCP系数1.1)。