0

我想弄清楚的问题是:

在这个问题中,我们考虑 TCP 慢启动阶段引入的延迟。考虑通过一个速率为 R 的链路直接连接的客户端和 Web 服务器。假设客户端想要检索大小正好等于 15S 的对象,其中 S 是最大段大小 (MSS)。将客户端和服务器之间的往返时间表示为 RTT(假设为常数)。忽略协议头,确定何时检索对象(包括 TCP 连接建立)时

  1. 4S/R > S/R + RTT > 2S/R
  2. 8S/R > S/R + RTT > 4S/R
  3. S/R > RTT

我已经有了解决方案(这是教科书上的问题),但我不明白他们是如何得到答案的。

  1. RTT + RTT + S/R + RTT + S/R + RTT + 12S/R = 4 · RTT + 14 · S/R
  2. RTT + RTT +S/R + RTT +S/R + RTT +S/R + RTT + 8S/R = 5 · RTT + 11 ·S/R
  3. RTT + RTT + S/R + RTT + 14S/R = 3 · RTT + 15 · S/R

这是与答案相关的图像: 客户端-服务器图

哪种对我有意义:每种情况都是 RTT 时间多于或少于传输一定数量段所需时间的情况。因此,对于第一个,每个 RTT 需要 3S/R 到 S/R 秒。从那里我不明白慢启动是如何运作的。我认为它只会增加每个确认数据包的窗口大小。但是,例如在#1 的解决方案中,似乎只有两个数据包被发送和确认,而窗口大小却跳到 12S?我在这里想念什么?

4

2 回答 2

2

是的,答案是正确的,

每次慢启动都会使 MSS 量翻倍,所以从 1 开始,然后 2 开始,然后 4 开始,然后 8 ......

要理解这个数字,可以这样想:每次收到一个 MSS,发送 2 个 MSS。 在您的示例中:当第一个绿色 mss 得到很好的确认时,发送 2 个蓝色 mss,当第二个 mss 得到很好的确认时,再发送 2 个蓝色 mss。

当 mss 的数量增加时,您将不会等待 RTT,因为在发送确认时,其他 MSS 正在同时设置。

于 2015-04-25T11:09:03.983 回答
0

这个技巧是为了理解如果 3R/S > RTT > R/S,那么当服务器忙 4 个数据包(蓝色数据包)时,它会在发送完第 4 个数据包之前收到一个 ACK​​。因此,剩下的时间将是 1RTT 用于(前一个 ack 和)数据包传输,n * R/S 其中 n 是一个接一个地发送的数据包数,无需等待。

现在在我们到达服务器发送 4 个数据包之前,将有 1 个 RTT 进行身份验证,1 个 RTT + R/S 直到客户端发送第 1 个 Ack,1 个 RTT + R/S 直到客户端发送了 2 个 Ack,并且当服务器收到第 2 个 ack(和第 3 个很短的顺序)时,它将一起发送其余的数据包(蓝色和紫色的),因为它不会等待 ACK,因为 RTT < 3R/S。您可以对其他部分进行类似的分析。

于 2020-10-06T19:51:18.993 回答