计算给定 TCP 连接的吞吐量

网络工程 通讯协议 线鲨
2021-07-17 01:09:16

给定一个 TCP 会话,有没有办法确定发送方的吞吐量?我有一个wireshark嗅探,我看到我可以使用
TCP-Window-Size-in-bits / Latency-in-seconds = Bits-per-second-throughput公式来计算发件人的吞吐量
但是窗口在不断变化(由于tcp协议)。
此外,为什么要考虑 tcp 窗口大小?有时发送方在收到 ack 之前发送了多个段,这不是真的吗?

2个回答

有时发送方在收到 ack 之前发送了多个段,这不是真的吗?

这正是“窗口”的含义。想象一个需要确认但每次只发送一个数据包/段的协议(窗口 = 1 个段)——在每个往返周期中只能有一个段/ACK 对,而不管实际带宽如何。

发送窗口提供到连续发送多个分段的方法之前预期的ACK。每个被确认的段都从发送窗口中删除,并且窗口前进到一个新的段——因此是“滑动窗口”。

使用自适应滑动窗口“并行”发送多个段,您可以利用总带宽。通常,您不能在每个 RTT 周期内传输超过一个完整窗口的数据。

TCP 使用由(不断监控的)RTT 值控制的滑动窗口作为拥塞传感器——从简化的角度来看,当 RTT 上升时,窗口大小会下降,反之亦然。当然,每个值都可能因网络负载和其他变量而随时发生变化。

所有的测量都在变化:吞吐量和延迟也可以是即时测量。

  • 如果您想要平均值,请在很长一段时间内进行测量
  • 是的,发送方经常会在收到确认之前发送段