提出一个问题
假设有一台服务器配了千兆网卡,独占千兆带宽,一个业务数据包大小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