|
| 1 | +--- |
| 2 | +title: 如何理解计算机网络中的带宽、吞吐量与时延? |
| 3 | +shortTitle: 带宽 VS 吞吐量 VS 时延 |
| 4 | +description: |
| 5 | +head: |
| 6 | + - - meta |
| 7 | + - name: keywords |
| 8 | + content: 带宽, 吞吐量, 时延, 网络性能, 传播时延, 传输时延, 处理时延, 排队时延, 网络拥塞, TCP协议 |
| 9 | +--- |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +## 如何理解计算机网络中的带宽、吞吐量与时延? |
| 14 | + |
| 15 | +大家好,我是小北。 |
| 16 | + |
| 17 | +带宽、吞吐量、时延是网络中经常用来量化的指标,比如我们经常说网速好快、网络好卡、延迟好大等等。 |
| 18 | + |
| 19 | +这几个概念之间有一定关系,但是也经常容易混为一谈。 |
| 20 | + |
| 21 | +今天就让我们一起来理清这些概念。 |
| 22 | + |
| 23 | + |
| 24 | +因为网络其实和道路交通有一定相似性,所以我们就用高速公路来类比网络,这样方便理解。 |
| 25 | + |
| 26 | + |
| 27 | +## 一、带宽(Bandwidth) |
| 28 | + |
| 29 | +**带宽指的是网络的传输能力,表示单位时间内能够传输的最大数据量。** |
| 30 | + |
| 31 | +通常使用比特/秒(b/s)作为单位,常见的还有 Kb/s、Mb/s、Gb/s 等。 |
| 32 | + |
| 33 | + |
| 34 | +带宽呢,就像是高速公路的车道数: |
| 35 | + |
| 36 | +* 2车道的公路(小带宽)一次能通过的车辆少 |
| 37 | +* 8车道的公路(大带宽)一次能通过的车辆多 |
| 38 | + |
| 39 | +举个例子:如果你的网络带宽是 100 Mbps,理论上每秒最多可以传输 100 兆比特的数据。 |
| 40 | + |
| 41 | +> 这里要补充下,我们日常生活经常说办的宽带是 100M、1000M,这里的单位是 bit 比特,而平常 MB/s 则是 Byte |
| 42 | +> 而 1 Byte = 8 bit,所以 100 M 的宽带,1s 最多下载 100/8 = 12.5 MB |
| 43 | +
|
| 44 | + |
| 45 | +但是要注意,**带宽是一个理论上的最大值**,实际中很难达到这个值。 |
| 46 | + |
| 47 | +因为实际速度可能会受到网络拥塞、路由器性能等大打折扣,如同高峰期的八车道高速仍会堵车。 |
| 48 | + |
| 49 | + |
| 50 | +## 二、吞吐量(Throughput) |
| 51 | + |
| 52 | +**吞吐量是指实际单位时间内成功传输的数据量。** |
| 53 | + |
| 54 | +也是使用比特/秒(b/s)作为单位。 |
| 55 | + |
| 56 | +如果说带宽是高速公路的最大通行能力,那么吞吐量就是实际通过的车流量: |
| 57 | + |
| 58 | +即使是8车道高速,如果遇到交通管制、事故,实际通过的车辆数量也会减少。 |
| 59 | + |
| 60 | +同样,即使网络带宽很大,但受到网络拥塞、服务器性能、路由器处理能力等因素影响,实际吞吐量往往小于带宽 |
| 61 | + |
| 62 | +吞吐量 ≤ 带宽,在理想情况下,吞吐量可以接近带宽,但实际中通常会小于带宽。 |
| 63 | + |
| 64 | +举个例子,大家平常用百度网盘下载的时候,刚开始速度非常快,10MB/s,但是如果你没有充值会员,速度将会逐渐降低到 几十 KB/s。 |
| 65 | + |
| 66 | +下载文件时速度从10MB/s掉到 几十 KB/s 就是吞吐量下降。 |
| 67 | + |
| 68 | +一般原因可能是:路由器过热、ISP限速、服务器过载... |
| 69 | + |
| 70 | +也可能是你没充值。。。。。 |
| 71 | + |
| 72 | + |
| 73 | +## 三、时延(Delay/Latency) |
| 74 | + |
| 75 | +**时延是指数据从源主机传输到目标主机所需的时间,通常以毫秒(ms)为单位。** |
| 76 | + |
| 77 | +比如我们用一些网络工具的时候就特别在意它的时延: |
| 78 | + |
| 79 | + |
| 80 | + |
| 81 | + |
| 82 | + |
| 83 | +时延并不是一个单独的指标,在《计算机网络: 自顶向下》 这本书中,提到时延由以下几部分组成: |
| 84 | + |
| 85 | +* **1. 发送时延:主机将数据包的所有比特推向传输介质所需的时间** |
| 86 | + |
| 87 | +计算公式:发送时延 = 数据帧长度(bit) / 发送速率(bit/s) |
| 88 | + |
| 89 | + |
| 90 | +* **2. 传播时延:电磁信号在链路上传播所需的时间** |
| 91 | + |
| 92 | +计算公式:传播时延 = 链路长度 / 信号传播速度 |
| 93 | +电磁波在真空中的传播速度约为3×10^8 m/s,在铜线或光纤中会略慢 |
| 94 | + |
| 95 | +* **3. 处理时延:路由器或交换机等设备处理数据包所需的时间,包括检查头部、查找路由表等** |
| 96 | + |
| 97 | + |
| 98 | +* **4. 排队时延:数据包在网络设备缓冲区中等待被处理的时间** |
| 99 | + |
| 100 | + |
| 101 | +> 总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延 |
| 102 | +
|
| 103 | + |
| 104 | +反正就是数据包在整个网络设备中,每一步都有对应的耗时,总结起来大概是这么几块。 |
| 105 | + |
| 106 | + |
| 107 | +我们还是用高速路来类比: |
| 108 | + |
| 109 | +| 时延类型 | 类比 | 影响因素 | |
| 110 | +| --- | --- | --- | |
| 111 | +| 传输时延 | 装车时间(数据发到链路上) | 数据大小/带宽 | |
| 112 | +| 传播时延 | 卡车行驶时间 | 物理距离/介质速度 | |
| 113 | +| 处理时延 | 分拣中心处理时间 | 路由器/交换机的性能 | |
| 114 | +| 排队时延 | 高速收费站堵车时间 | 网络拥塞程度 | |
| 115 | + |
| 116 | + |
| 117 | +### RTT(往返时延) |
| 118 | + |
| 119 | +RTT(Round-Trip Time)是指数据包从源主机发送到目标主机,再返回到源主机所需的总时间。 |
| 120 | + |
| 121 | +因为日常生成中打开网页、视频通话等应用都是给对方发送请求,然后服务器处理后返回响应,所以 RTT 在实际中应用更加广泛。 |
| 122 | + |
| 123 | +比如我们经常用ping命令测试的就是RTT。 |
| 124 | + |
| 125 | +### 延迟带宽积(BDP) |
| 126 | + |
| 127 | +为了后面更好理解这三者的关系,这里再引入一个**延迟带宽积**的概念 |
| 128 | + |
| 129 | +延迟带宽积(Bandwidth-Delay Product,简称BDP),顾名思义,是指链路的传播时延与带宽的乘积。 |
| 130 | + |
| 131 | + |
| 132 | +那这个指标到底是啥意思呢? |
| 133 | + |
| 134 | +其实很好理解,想象一条横跨大洋的光缆: |
| 135 | + |
| 136 | +带宽:光缆的粗细(每秒能传输多少数据) |
| 137 | + |
| 138 | +往返时延(RTT):数据从一端到另一端再回来的时间 |
| 139 | + |
| 140 | +延迟带宽积(BDP):BDP = 带宽 × RTT也就是这条光缆能同时容纳多少 **“在途中的数据”** |
| 141 | + |
| 142 | +所以 带宽 × 时延也就等于网络管道的「容积」。 |
| 143 | + |
| 144 | +就好像水管总容量 = 水流速度(升/秒) × 水流循环时间(秒) |
| 145 | + |
| 146 | +若水流速度是10升/秒,水流循环一周需5秒 → 水管总容量 = 50升 |
| 147 | + |
| 148 | +那这个有啥实际应用呢? |
| 149 | + |
| 150 | +**传输窗口设计:** |
| 151 | + |
| 152 | + |
| 153 | +在TCP协议中,发送窗口其实就是允许最大未确认(在途)的数据包,那么这个窗口也应该至少等于延迟带宽积。 |
| 154 | + |
| 155 | +否则,如果窗口小于延迟带宽积,会造成带宽浪费(在途数据包填不满链路,发送方就暂停发送了) |
| 156 | + |
| 157 | +而如果窗口过大,则可能导致网络拥塞。 |
| 158 | + |
| 159 | + |
| 160 | + |
| 161 | +## 四、这些指标之间的关系 |
| 162 | + |
| 163 | +1. **带宽与吞吐量** |
| 164 | + |
| 165 | +* 高带宽为吞吐量提供了上限保证,提高带宽可能会提升吞吐量,但不一定成正比,因为实际吞吐量受时延和丢包制约。 |
| 166 | + |
| 167 | +2 **带宽与时延** |
| 168 | + |
| 169 | +* 带宽的增加不一定会减少时延(比如深圳开车回四川,在都不堵车的情况下,你即便是把高速路扩容到 20 车道,也不会降低回家的耗时) |
| 170 | +* 对于小数据包,时延主要受传播时延和处理时延影响,与带宽关系不大(毕竟你都填不满网络) |
| 171 | +* 对于大文件传输,带宽越大,发送时延越小(可以想象高速路收费站,入口越多,把同样的车辆送上高速路也就越快) |
| 172 | + |
| 173 | +3. **时延与吞吐量** |
| 174 | + |
| 175 | +* 在某些协议下,较高的时延可能导致吞吐量下降 |
| 176 | +* 例如在 TCP 协议中,较高的 RTT 会降低传输效率 |
| 177 | + |
| 178 | + |
| 179 | +## 总结 |
| 180 | + |
| 181 | +用图片来总结下: |
| 182 | + |
| 183 | + |
0 commit comments