TCP流量控制与拥塞控制总结
TCP流量控制
要点:
- 发送方的发送窗口不能超过接收方的接收窗口。
- rwnd窗口字段占2bytes,指出的是发送方的接收窗口。
- rwnd单位字节。
- 在一方接收到0窗口的情况时,会设置一个持续计时器,防止发送方发送非零窗口的包丢失导致一直处于零窗口的状态,在计时器到时后,发送方会发送一个1byte的探测报文段;对方在接收到这个探测报文段时会把当前的窗口值发送出去这样另一方就可以改变窗口了。当然如果还是零窗口,持续计时器会重置,再次重复这个过程。
TCP拥塞控制
一种全局性行为,解决的是整个网络的拥塞情况。
控制方法:
- 慢启动
- 拥塞避免
- 快速重传
- 快速恢复
变量:
cwnd:拥塞窗口大小(方便讨论我们以报文段个数作为单位,实际TCP都是字节为单位)
ssthresh:满开始门限,可以理解为拥塞窗口增长的一个参考阈值。
文字描述
刚开始cwnd = 1,ssthresh = m
每次RTT下(即一个传播轮次),cwnd = cwnd * 2。
- 当cwnd > ssthresh,令cwnd = ssthresh,并进入拥塞避免状态。
- 当超时,另ssthresh = cwnd / 2,cwnd = 1,相当于调整门限并重新开始慢启动。
- 当收到3个冗余确认,(对冗余确认的下一个包快速重传、立即重传)ssthresh = cwnd / 2, cwnd = ssthresh,(快速回复)并进入拥塞避免状态。
参考图
发送方窗口上限 = m i n ( r w n d , c w n d ) min(rwnd, cwnd) min(rwnd,cwnd)