这可能是一个愚蠢的问题,但据我所知,CNWD 决定了 TCP 流的速率。
我创建了一个“负载平衡器”,它在两条 10Mb/s 的路径上拆分单个数据包。这引入了一些防止拥塞窗口增长的重新排序。当我测量单个路径的 CWND(通过 captcp)时,它大约为 600KB,最终的吞吐量(使用 iperf3)约为 9Mb/s,如果我使用组合路径进行测量,CNWD 大约为 200KB,但最终的吞吐量是~17Mb/s!
那么,即使 cwnd 仅限制网络中未完成的 200kb,吞吐量为何会更高?
这可能是一个愚蠢的问题,但据我所知,CNWD 决定了 TCP 流的速率。
我创建了一个“负载平衡器”,它在两条 10Mb/s 的路径上拆分单个数据包。这引入了一些防止拥塞窗口增长的重新排序。当我测量单个路径的 CWND(通过 captcp)时,它大约为 600KB,最终的吞吐量(使用 iperf3)约为 9Mb/s,如果我使用组合路径进行测量,CNWD 大约为 200KB,但最终的吞吐量是~17Mb/s!
那么,即使 cwnd 仅限制网络中未完成的 200kb,吞吐量为何会更高?
对于 TCP 吞吐量,有很多因素会起作用。例如,当单个链路上的窗口较大时,链路上的拥塞可能是一个更大的因素。由于单个链路上的拥塞,IP 数据包可能会被丢弃,导致 TCP 重新发送段,从而减慢传输速度。还有一种称为 RED(随机早期检测)的 QoS 功能,它随机丢弃 IP 数据包以防止队列变满。这迫使 TCP 放慢速度并重新发送段。
窗口只是在需要等待 ACK 之前可以发送的流量。如果发送回 ACK 的时间不长(接收方发送 ACK 需要多快,以及两台主机之间的延迟时间有多长),则您的传输速度可能不会太慢。
决定流量速度的真正方法是使用 QoS 根据您确定的标准(例如 DSCP 标记)为流量建立队列和带宽。
CNWD 不直接决定速度,它与其他因素(至少 RTT)一起影响速度。