千兆以太网极限传输速度计算与分析
众所周知,千兆以太网标识的传输速度是1.0 Gbps
,那么在实际传输的过程中,能够达到的最大传输速度又是多少呢?这篇文章结合理论计算及实际测试告诉你答案。
计算器
这里提供一个计算器来方便计算各网络情况下的速度:
预备知识
数据长度单位
- 计数单位:
- 比特:
bit
缩写b
,表示1个二进制位,可以表示0或1 - 字节:
Byte
缩写B
,表示8个二进制位,可以表示0~255
- 比特:
- 换算关系:
1 Byte = 8 bit
- 内部换算关系:
字节(Byte) | 比特(bit) |
---|---|
1024 Byte = 1 KByte | 1000 bit = 1 Kbit |
1024 KByte = 1 MByte | 1000 Kbit = 1 Mbit |
1024 MByte = 1 GByte | 1000 Mbit = 1 Gbit |
- 后文皆以B表示Byte,以b表示bit,务必注意区分
- 网络设备通常以
bit
作为单位,而操作系统中计算文件大小通常以Byte
作为单位
数据传输速度单位
- 比特率:bps(bits per second),每秒传输比特数
- 波特率:baud,每秒传输码元数
计算过程
物理层
我们在操作系统的许多地方都可以找到,千兆以太网标识的传输速度是1.0 Gbps
,也就意味着在网线等传输媒介中每秒可以传输1 * 10^9
个比特。换算成字节,并不能简单的除以8,因为Gb与GB并不是简单的8倍关系。
- 物理层数据实际传输速度:
- 1000 Mb
- 119.21 MB,计算公式:
10^9 / 8 / 1024 / 1024 ≈ 119.21
数据链路层
在数据链路层中,RFC894规定,以太网MTU(最大传输单元)为1500B
,也就是说一个以太网帧可以携带1500B的数据,加上帧头14B
数据(不考虑4B
的802.1Q标签),帧尾校验码4B
数据,帧前导码8B
(7B前导码+1B帧开始界定符),帧间间隔12B
,传输一个帧实际上要消耗1538B
带宽。
- 数据链路层数据实际传输速度:
- 975.29 Mb,计算公式:
1000 / 1538 * 1500 ≈ 975.29
- 116.26 MB,计算公式:
119.21 / 1538 * 1500 ≈ 116.26
- 975.29 Mb,计算公式:
网络层
如今网络层绝大多数网络设备都使用IP协议,其中IPv4首部固定长度20B
,可选部分最大40B
(这里不讨论),IPv6首部固定长度40B
,因此我们可以很容易得出网络层数据实际传输速度。
- 网络层数据实际传输速度:
- IPv4:
- 962.29 Mb,计算公式:
1000 / 1538 * (1500 - 20) ≈ 962.29
- 114.71 MB,计算公式:
119.21 / 1538 * (1500 - 20) ≈ 114.71
- 962.29 Mb,计算公式:
- IPv6:
- 949.28 Mb,计算公式:
1000 / 1538 * (1500 - 40) ≈ 949.28
- 113.16 MB,计算公式:
119.21 / 1538 * (1500 - 40) ≈ 113.16
- 949.28 Mb,计算公式:
- IPv4:
传输层
在传输层有面向连接的TCP协议,其中首部固定长度20B
,这里不考虑附加字段;面向无连接的UDP协议,其中首部固定长度8B
。
- 传输层数据实际传输速度:
- TCP via IPv4:
- 949.28 Mb,计算公式:
1000 / 1538 * (1500 - 20 - 20) ≈ 949.28
- 113.16 MB,计算公式:
119.21 / 1538 * (1500 - 20 - 20) ≈ 113.16
- 949.28 Mb,计算公式:
- UDP via IPv4:
- 957.08 Mb,计算公式:
1000 / 1538 * (1500 - 20 - 8) ≈ 957.08
- 114.09 MB,计算公式:
119.21 / 1538 * (1500 - 20 - 8) ≈ 114.09
- 957.08 Mb,计算公式:
- TCP via IPv6:
- 936.28 Mb,计算公式:
1000 / 1538 * (1500 - 40 - 20) ≈ 936.28
- 111.61 MB,计算公式:
119.21 / 1538 * (1500 - 40 - 20) ≈ 111.61
- 936.28 Mb,计算公式:
- UDP via IPv6:
- 944.08 Mb,计算公式:
1000 / 1538 * (1500 - 40 - 8) ≈ 944.08
- 112.54 MB,计算公式:
119.21 / 1538 * (1500 - 40 - 8) ≈ 112.54
- 944.08 Mb,计算公式:
- TCP via IPv4:
实验与测试
实验使用iPerf3工具测试链路带宽,使用CAT-5e双绞线将2台PC连接至同个交换机,分别以网络层IPv4、IPv6协议,传输层TCP、UDP协议组合,共计4组测试,其中测试UDP协议时,使用-b 1000M
参数,指定传输带宽为1.0 Gbps
。
- TCP via IPv4理论传输速度:949.28Mb/113.16MB,实际测试结果:
- UDP via IPv4理论传输速度:957.08Mb/114.09MB,实际测试结果:
- TCP via IPv6理论传输速度:936.28Mb/111.61MB,实际测试结果:
- UDP via IPv6理论传输速度:944.08Mb/112.54MB,实际测试结果:
结论与展望
数据链路层 | 以太网帧 | 巨型帧* | ||||||
---|---|---|---|---|---|---|---|---|
网络层 | IPv4 | IPv6 | IPv4 | IPv6 | ||||
传输层 | TCP | UDP | TCP | UDP | TCP | UDP | TCP | UDP |
Ethernet* | 1.13MB/s | 1.14MB/s | 1.12MB/s | 1.13MB/s | 1.18MB/s | 1.18MB/s | 1.18MB/s | 1.18MB/s |
Fast Ethernet* | 11.32MB/s | 11.41MB/s | 11.16MB/s | 11.25MB/s | 11.82MB/s | 11.83MB/s | 11.79MB/s | 11.81MB/s |
Gigabit Ethernet | 113.16MB/s | 114.09MB/s | 111.61MB/s | 112.54MB/s | 118.18MB/s | 118.34MB/s | 117.92MB/s | 118.07MB/s |
注:*表示尚未进行实际测试
经过测试,理论计算与实验结果完全相同,因此我们可以认为:在一般情况下,所有网络设备均达到千兆标准,且没有发生网络拥塞时,数据实际传输速度约为113MB
每秒,此为使用TCP协议在IPv4网络下的结果,大部分网络协议在千兆网络下,例如Samba、rsync、iSCSI等,可以视此结果为极限最大值。基于UDP的其他协议或使用IPv6网络时,可以参考上表的结论;其他速率的网络,可以参考上文的计算方法。实际使用时,由于网络设备可能存在缺陷、发生网络拥塞、发生以太网碰撞,IP协议/TCP协议头部存在其他可选字段等情况,以及应用层协议存在的开销,实际传输速率会存在波动,可能达不到理论最大值。
不难看出,若要提高极限传输速度,那么必须减少网络协议首部的开销,提高数据传输的有效率,即有效数据大小 / 实际消耗的带宽
。一个有效的解决方案便是使用巨型帧,可以使得数据链路层的MTU达到9000B
,理论上传输速率可以提高到118.23MB
每秒,但是由于网络设备的原因,未能测试巨型帧的情况,有待以后补充。