數一數網路吞吐量
提出一個問題
假設有一臺伺服器配了千兆網絡卡,獨佔千兆頻寬,一個業務資料包大小1MB,通過TCP協議傳送,請問這臺服務流量全部跑滿,最大的支援多少吞吐量。
大家可以先思考一下這個問題
瞭解幾個概念
解決這個問題,有必要先了解一下問題中的幾個概念。
千兆網絡卡
網絡卡我們都知道是一種提供計算機與傳輸介質的硬體介面。
千兆則是表示傳輸速率,一般傳輸速率是以bit/s為單位,表示每秒傳輸1bit的資料量。
所以千兆網絡卡就是每秒傳輸1000Mb資料量的網絡卡,這裡的資料量都是單向,如果是雙向計算的就是2000Mb/s。
注意這裡的單位都是小b(bit = 位),. 而大B表示位元組(byte) 換算公式1B = 8b
頻寬
頻寬是指在規定時間內從一端流到另一端的資訊量,即資料傳輸率,是一個通訊領域的一個概念。所謂的千兆頻寬也就是每秒的傳輸速率是1000Mb。
TCP協議
我們來簡單看一個簡單協議分層
從圖中我們可以看到,應用層協議是最頂層協議,通過TCP協議打包,ip協議包,最後乙太網協議打包這樣生成一個乙太網資料包通過傳輸介質傳輸出去。我們以Http資料協議做為例子,看看整個傳輸流程。
所以一個最終發出去的資料不僅只有業務資料包。裡面還有tcp協議,ip協議以及乙太網協議層層打包,如下圖
一個乙太網資料包(packet)的大小是固定的,1522位元組。
乙太網資料包(1522Byte) = 乙太網標頭(22B) + IP標頭(20B) + TCP標頭(20B) + 應用層資料包(1460)
這個演算法不包含IP標頭和TCP標頭裡的而外資訊
再來看這個問題
通過以上的概念解釋相信大家已經能計算出來了,只是一個數學問題。
由於業務資料包1MB = 1024 * 1024Byte, 而我們知道乙太網資料包最大隻支援1460B的資料,所以這裡需要分包,1024 * 1024 / 1460 約等於 718
由於網絡卡和頻寬都是千兆所以這裡傳輸速率就是1000Mbps(實際速率以頻寬為準),每個乙太網資料包是1522B,1B = 8b,如果乙太網資料包被填滿,最多可以傳送:1000Mb * 1024 * 1024 / (8 * 1522) = 86118
最終這個每秒吞吐量 86118 / 718 = 119