TCP 流量控制
作用:用以消除发送方使接收方缓存溢出的可能性
本质上流量控制是一个速度匹配服务
原理:
接收方根据自己接受缓存的大小,动态地调整发送方的发送窗口发小。发送方通过设置确认报文首部的窗口字段。
TCP拥塞控制
作用:防止过多的数据注入网络中造成网络路由器和链路过载
TCP要求发送方维护两个窗口
- 接受窗口 rwnd。接收方根据目前接受缓存大小所许诺的最新的窗口值。由发送方控制。
- 拥塞窗口 cwnd。发送发根据自己估算的网络拥塞程度而设置窗口值。由发送方根据链路状态估算。
$$ 发送窗口的上限值 = Min[rwnd,cwnd] $$
窗口的值指的是最大报文长度(MSS)。MSS的默认值为536字节。所以所有主机都能接受的报文长度为556字节(加上TCP固定首部商都)
维护拥塞窗口的算法
慢开始、拥塞避免、快重传、快恢复
- 一开始使用慢开始算法。发送时 cwnd = 1,每收到一个确认报文后加倍。直到到达一个阈值(ssthresh)。此时cwnd是呈指数增长的
- 达到阈值以后,使用拥塞避免算法。每经过一个往返时延,就cwnd + 1。此时cwnd的大小时线性增长的。
- 当出现第一次超时(网络拥塞)出现时。再使用慢开始算法,同时阈值调整为超时的cwnd大小的一半
- 快重传:当连续收到3个重复的ACK的时候,直接重传未收到的报文,不必等待报文段设置重传计时器超时
- 快恢复:当连续收到3个重复的ACK的时候,执行快恢复算法。将cwnd的大小设置为超时的cwnd的大小的一半,之后就执行拥塞避免算法。(不执行慢开始算法)