數一數網絡吞吐量

這裏寫圖片描述

提出一個問題

假設有一臺服務器配了千兆網卡,獨佔千兆帶寬,一個業務數據包大小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

參考鏈接

http://www.ruanyifeng.com/blog/2017/06/tcp-protocol.html

歡迎關注公衆號

這裏寫圖片描述