在计算机网络中,吞吐量(Throughput)是衡量数据传输效率的关键指标。不同协议与网络条件下的吞吐量计算方式不同,以下将对TCP不考虑丢包时的吞吐量、考虑丢包时的TCP吞吐量、停止等待协议(Stop-and-Wait)的吞吐量以及滑动窗口协议(Sliding Window)的吞吐量进行详细总结与比较。
一、TCP在不考虑丢包时的吞吐量计算
在理想情况下,如果网络中没有丢包、没有拥塞控制限制,TCP可以近似达到其理论最大吞吐量。其吞吐量主要受限于接收窗口大小(rwnd)和往返时延(RTT)。此时的吞吐量公式如下:
$$
\text{Throughput} = \frac{\text{窗口大小(Bytes)}}{\text{RTT(Seconds)}}
$$
这个吞吐量计算等价于“带宽-时延积(Bandwidth-Delay Product)”,反映了在一个RTT内可以“在路上”的最大字节数。此时,TCP的传输效率非常高,且吞吐量与窗口大小成正比,与RTT成反比。
二、TCP在考虑丢包时的吞吐量计算(简化模型)
当存在丢包时,TCP的拥塞控制机制(如慢启动、拥塞避免、快速重传和快速恢复)会显著影响其吞吐量。基于TCP Reno的模型,Mathis等人提出的经典近似公式如下:
$$
\text{Throughput} \approx \frac{\text{MSS}}{\text{RTT} \cdot \sqrt{p}}
$$
其中:
- MSS:最大报文段长度
- RTT:往返时延
- p:丢包率
该公式表明,吞吐量与丢包率的平方根成反比,这也揭示了TCP在高丢包率环境下性能下降迅速的原因。例如,丢包率从0.01变为0.04,吞吐量将减半。这一模型揭示了拥塞控制的保守性如何对TCP性能产生重大影响。
三、停止等待协议的吞吐量计算
停止等待协议是一种简单但效率较低的可靠传输协议。它要求发送方在每发送一个数据包后必须等待确认(ACK),再发送下一个包。其吞吐量计算公式为:
$$
\text{Throughput} = \frac{L}{RTT + T_{\text{trans}}}
$$
其中:
- LL:每个数据包的数据大小(bits)
- $T_{\text{trans}}$:数据包的发送时间 =$\frac{L}{\text{带宽}}$
- RTT:往返时延
在高带宽高延迟环境下,$Ttrans≪RTTT_{\text{trans}} \ll RTT$,此时可以近似为:
$$
\text{Throughput} \approx \frac{L}{RTT}
$$
其效率(信道利用率)为:
$$
\eta = \frac{T_{\text{trans}}}{RTT + T_{\text{trans}}}
$$
这表明,停止等待协议在高RTT场景下会导致大量带宽浪费,吞吐量很低。
四、滑动窗口协议的吞吐量计算
滑动窗口协议(如Go-Back-N或Selective Repeat)通过允许发送多个未确认的数据包,极大提高了信道利用率。在理想情况下(无丢包、无误码),其吞吐量计算为:
$$
\text{Throughput} = \min\left( \frac{W \cdot L}{RTT + T_{\text{trans}}}, \text{带宽} \right)
$$
其中:
- W:窗口大小(以帧为单位)
- L:每帧数据大小(bits)
- RTT:往返时延
- $T_{\text{trans}}$:一帧的发送时间
若信道足够好且带宽充足,滑动窗口协议能够接近理论最大吞吐量,其最大吞吐量受限于窗口大小和RTT,即吞吐量 ≈ 带宽时延积。相较于停止等待协议,它更能充分利用信道资源。
五、小结与对比
协议或场景 | 吞吐量公式 | 主要影响因素 | 优缺点 |
---|---|---|---|
TCP(无丢包) | $\frac{\text{窗口大小}}{\text{RTT}}$ | RTT、窗口大小 | 高效,理想状态,带宽利用率高 |
TCP(有丢包) | $\frac{\text{MSS}}{\text{RTT} \cdot \sqrt{p}}$ | 丢包率p、RTT、MSS | 拥塞控制影响大,吞吐量下降快 |
停止等待 | $\frac{L}{RTT + T_{\text{trans}}}$ | RTT、发送时间 | 简单但效率低,RTT大时浪费严重 |
滑动窗口 | $\min\left( \frac{W \cdot L}{RTT + T_{\text{trans}}}, \text{带宽} \right)$ | 窗口大小、RTT、带宽 | 利用率高,适用于高带宽延迟产品环境 |