跳到正文

TCP 拥塞控制

52 分钟

TCP 拥塞控制

本课目标

能从UDP/TCP报文和双向时间线推出端口分用、序号确认、连接状态、可发送窗口与拥塞阶段,并用代码复核字节级结果。

核心机制

拥塞窗口cwnd反映网络承载估计。慢开始每RTT近似翻倍直到ssthresh;拥塞避免每RTT约增加1 MSS。超时通常把ssthresh设为原窗口一半并把cwnd降到初始值;三次重复ACK可快速重传并进入实现规定的快速恢复。流量控制看接收端,拥塞控制看网络,发送窗口取两者较小。

报文与时序推演

初始cwnd=1 MSS、ssthresh=8:无丢包各RTT可为1,2,4,8,9,10。若cwnd=10时超时,典型教材模型令ssthresh=5、cwnd=1。

统一表格记录“方向、标志、seq、数据长度、ack、rwnd、cwnd、在途字节、定时器和连接状态”。两个方向序号空间独立;收到报文后先校验和与序号,再决定交付、累计确认和窗口变化。所有ACK都解释成期望下一个字节。

可运行模型

cwnd=1;ssthresh=8;series=[]
for _ in range(6):
 series.append(cwnd);cwnd=cwnd*2 if cwnd<ssthresh else cwnd+1
print(series);print('timeout',10//2,1)

先手算再运行。修改负载长度、初始序号、窗口、丢包事件或阈值,重画报文和状态。

边界与错因

UDP无连接但保留报文边界;TCP是字节流且SYN/FIN占序号。累计ACK不等于选择确认;rwnd是接收能力,cwnd是网络拥塞估计,实际发送受二者最小值约束。TIME_WAIT属于主动关闭一侧的典型状态,不能因应用close就认为所有状态立即消失。

迁移练习

将第三次握手ACK丢失、数据中间一段丢失、接收窗口归零、超时与三次重复ACK分别加入原时序,逐步更新定时器、重传范围、rwnd/cwnd和连接状态。

课内验收

完成下方两道在线题,并提交完整双向报文表。计算题保留字节序号与窗口单位;选择题指出错误项混淆了哪个方向、状态或控制目标。

Practice

本课练习

2

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

1慢开始 3

初始1、阈值8,无丢包第4轮cwnd?

登录 后答题可以领积分
2超时后 3

cwnd10超时,教材模型ssthresh?

登录 后答题可以领积分