TCP的流量控制
TCP传输过程中实际的传输数据单位是字节, 这里为了简化将其称为报文, 并给报文排序号
发送方的窗口值不能大于接收方的接收窗口值, 由接收方的主机进行流量控制. 流量控制方法就是不断减小接收窗口值, 当cwnd=0时, 停止让对方发送数据. 此时对方会根据计时器发送零窗口探测报文段来探测接受窗口的窗口值大小,
TCP的拥塞控制算法
-
慢开始
设置慢开始门限值ssthresh=16
每经历一次传输轮次, 滑动窗口大小 cwnd = cwnd * 2, 呈指数增长
具体实现是发送方每收到一次ACK确认, 就将滑动窗口的大小加一 -
拥塞避免
当滑动窗口增长到慢开始门限ssthresh=16时, 执行拥塞避免算法, 没经历一次
传输轮次 cwnd = cwnd + 1, 呈线性增长, 当发生超时重传时, 将慢开始门限
值降为当前滑动窗口值的一半 ssthresh = cwnd / 2, 将滑动窗口的大小重新置为1
cwnd = 1, 执行慢开始算法, 当cwnd==ssthresh时, 执行拥塞避免算法. -
快重传
现在假设发送发送报文段序列为 [M1, M2, M3, M4], 接收方收到的报文段序列为[M1, M3],
此时接收方只能发送对M1的确认号, 而不能确认M3, 当接受方收到M3时, 本可以什么都不做, 但是快重传算法要求立即重复发送多M1的确认, 表示M2没有收到. 当发送方收到
3次重复确认就应当立即重传对方尚未收到的报文段M2, 而不必等待重传计时器到期 -
快恢复
当发送方收到3个重复确认时, 就将慢开始门限值 ssthresh减半 ssthresh = ssthresh / 2,
然后将活动窗口设置为 减半后的ssthresh, 执行 拥塞避免算法