監控查詢流量、用量查詢流量統計的是實際產生的網路流量,而日誌統計流量統計的是應用程式層產生的流量,由於TCP/IP包頭和TCP重傳等原因,實際的計費流量(也包括監控查詢流量)是通過日誌統計流量的1.1倍。
問題現象
為什麼通過CDN控制台(或者OpenAPI)的監控查詢、用量查詢(實際計費流量)功能查到的加速網域名稱使用的流量資料與通過日誌統計的流量資料有差異?(通過日誌統計的流量資料通常會比通過監控查詢流量或者用量查詢流量查詢的資料更小一點。)
可能原因
日誌統計流量是統計日誌中response size欄位記錄的流量資料,只統計了應用程式層產生的流量,但實際產生的網路流量(網路層統計的流量)通常比應用程式層流量要高出7%~15%。主要原因是網路層流量比應用程式層流量多了以下兩個流量消耗:
TCP/IP包頭:
應用程式層流量在開始網路傳輸之前,需要先使用TCP協議(傳輸層)封裝為TCP資料包,再使用IP協議(網路層)封裝為IP資料包,IP資料包最大為1500位元組,這其中包含了20位元組的TCP協議包頭和20位元組的IP協議包頭,這兩個協議包頭也會產生網路流量,但由於應用程式層無法統計到這兩個包頭的流量,因此日誌統計流量裡不包含這40位元組。這部分包頭消耗的網路流量至少佔通過日誌統計流量的2.74%(按最大IP資料包1500位元組,其中TCP/IP包頭40位元組,應用程式層資料1460位元組),應用程式層資料越小,佔比越大,通常在3%左右。
TCP重傳
由於互連網中網路情況較為複雜,在出現網路擁堵、裝置故障等情況下就會出現丟包,通常有3%~10%的資料會被互連網丟棄,資料包被丟棄後的重傳動作是由作業系統核心層的協議棧處理的,無法記錄到應用程式層日誌中,因此這部分也會產生額外的網路消耗。
基於以上兩個額外的網路流量消耗,在行業慣例中,會在基於日誌中response size欄位統計出的應用程式層流量的基礎上,再加上7%~15%的網路消耗來得出實際的計費流量資料(即:體現在費用賬單上的資料)。阿里雲CDN產品取平均值10%做為網路消耗流量,因此實際的計費流量(也包括監控查詢流量)是通過日誌統計流量的1.1倍(即:TCP係數1.1)。