在 TCP 中,接收方会不时确认已收到发送的数据包。因此,要实现特定的下行带宽,始终需要最低的上行带宽。
我正在寻找一个因素来计算给定下行带宽所需的上行带宽。我知道 TCP 中存在不同的窗口大小,可能还有其他因素使此计算变得更加困难。但也许存在一个默认场景,至少可以从中得到一个近似值。
答案1
这个问题很难回答,因为它取决于很多其他因素。想要得到一个非常具体的答案会很困难,甚至更难解释,至少对我来说是这样。
假设端到端链路足够稳定,窗口可以扩展到最大,我们可以说每个最大窗口大小都需要一个 ACK。典型的最大窗口大小为 64KB,至少我认为这是 Windows 的默认设置...它由注册表项设置。
知道了这一点,我们现在需要知道往返时间是多少,因为您每个 RTT 只会收到一个最大窗口大小的数据;数据到达您的方式只有一种,确认的方式也只有一种。现在我们将尝试计算卫星上一个 TCP 套接字所需的上行流量。
RTT = ~500ms
最大窗口大小 = 64KB
(64KB * 8)/.5 = 最大下载速度为 1Mbps。乘以 8 当然是为了将字节值转换为位。
顺便说一句,很多时候您会看到窗口大小被称为缓冲区,并且您会看到 TCP 吞吐量计算为 (RxBuffer/RTT = Througput)。现在我们需要计算上游。希望上面的所有内容答案都是显而易见的,我们每秒需要两个 ACK 才能返回给发送方。这些 ACK 是 20Bs + 20Bs * 8(IP + TCP 标头),每个 320bps。因此,对于具有 500ms RTT 和最大 RxBuffer 为 64KB 的连接,我们预计下载速度不超过 1Mbps,上传速度不超过 640bps。
我希望这能让你走上正确的道路。读完后我感到很困惑……