【发布时间】:2022-01-19 22:16:13
【问题描述】:
我从学院收到了一项任务,我必须通过 UDP 又名实现可靠传输。 TCP Over UDP(我知道,重新发明轮子,因为这已经在 TCP 上实现了)以深入了解 TCP 的工作原理。其中一些要求是:3 次握手、拥塞控制(尤其是 TCP Tahoe)和挥手。我考虑用 Java 或 Python 来做这件事。
一些更具体的要求是:
收到每个 ACK 后:
- (慢启动)如果
CWND < SS-THRESH: CWND += 512 - (拥塞避免)
If CWND >= SS-THRESH: CWND += (512 * 512) / CWND - 超时后,设置
SS-THRESH -> CWND / 2,CWND -> 512,在最后一个确认字节后重传数据。
我找不到有关 TCP Tahoe 实施的更多具体信息。但是据我了解,TCP Tahoe 是基于 Go-Back-N 的,所以我发现了以下发送方和接收方的伪算法:
我的问题是慢启动和拥塞避免阶段应该在if sendbase == nextseqnum 之后发生吗?也就是说,在确认收到预期的 ACK 之后?
我的另一个问题是关于窗口大小,Go-Back-N 使用固定窗口,而 TCP Tahoe 使用动态窗口。如何根据 cwnd 计算窗口大小?
【问题讨论】:
标签: networking tcp udp