⚠️ 自己写:不退让的发送方
本节的拥塞窗口小工具:
cwnd_trace(nrounds, ssthresh, events={}) cwnd 从 1 段起:小于 ssthresh 每轮翻倍(慢启动),否则每轮加 1(拥塞避免);
events[轮] = "timeout":ssthresh = cwnd // 2、cwnd 归 1;"dup"(三个重复 ACK):ssthresh = cwnd // 2、cwnd = ssthresh;交回每轮开始时的 cwnd
effective(cwnd, rwnd) 真正能发的窗口 = 两者里小的链路每轮只能过 cap 段,多出来的丢掉、下一轮重发。补全 greedy(cap, nsegs, wnd):发送方每轮固定发 min(wnd, 剩余),从不因为丢包缩窗;交回 (用了几轮, 一共发了几段)。链路 4、数据 16:窗口 8 和窗口 4 各算一次:
全部评论