TCP Reno慢启动低速率发送时cwnd异常增长问题咨询
UDP拥塞避免实现中的异常问题求助
我正在开展一个基于UDP的项目,需要实现拥塞避免机制。研究TCP所使用的算法(参考RFC5681及相关TCP Reno教程)后,实现了一个自认为基本符合TCP Reno慢启动和拥塞避免逻辑的版本,但测试中发现了以下意外行为:
- 发送方建立新连接后,以足够慢的恒定速率发送数据,无数据包或确认报文丢失。慢启动阶段,每收到一个确认报文时,会将cwnd(拥塞窗口)增加新确认的字节数(符合RFC5681第3.1节定义),导致cwnd无限制线性增长。
- 一段时间后,若发送方突然有大量数据需要发送,此时cwnd已远大于实际网络容量,发送方会向网络中发送大量数据包,直接造成网络拥塞。
这显然不符合TCP在拥塞避免上的设计初衷,请问我是否忽略了某些关键机制?
我的两个思路:
- 思路1:空闲状态会导致发送方重启慢启动,但只要发包间隔不超过1个RTO(重传超时)就能避免触发该机制(符合RFC5681第4.1节定义)。此外RTO需向上取整为1秒(符合RFC6298第2节定义),因此每半秒发送一个小包即可绕过该机制。
- 思路2:TCP友好速率控制(TFRC)中提到“数据受限区间”的概念,TFRC的设计目标是模拟TCP行为。我怀疑TCP针对数据受限而非拥塞窗口受限的场景存在特殊处理(上述场景1即为数据受限案例),但尚未找到相关明确定义。
内容的提问来源于stack exchange,提问作者lowq
相关产品推荐
相关产品推荐

