TCP的流量控制
接收方将自己可用的缓存空间告知给发送方,避免过量的发送分组导致缓存被占满从而引起不必要的分组丢失。 发送方通过将发送了但未被确认的分组数量控制在窗口值rwnd内从而避免接收方缓存溢出。
当接收方的缓存为0时,发送方就会停止发送报文且之后会定时发送窗口探测报文,窗口探测报文允许发送方知道此时接收方的缓存空间,从而选择是否继续发送分组
TCP的拥塞控制
TCP的拥塞控制的实现主要依靠下面三个机制实现
1.慢启动
当TCP连接建立成功后,TCP并不会一下次就发送大量数据,而是使用慢启动机制,将拥塞窗口值cwnd设置为一个MSS,当收到ack后成倍的扩大cwnd,直到出现分组的丢失,设置慢启动阈值为拥塞时窗口值的一半,将cwnd重置为1并重新开始慢启动。
2.拥塞避免
当cwnd达到慢启动阈值时,如果再成倍的增长cwnd值很可能再次发生丢包,所以进入拥塞避免状态,拥塞状态下的cwnd每次只增长一个MSS,如果再次发生丢包事件,将重新进入慢启动状态,并执行相同的操作。ssthresh(阈值)= 1/2 cwnd, cwnd = 1。
3.快速恢复
如果在拥塞避免状态未出现丢包事件而是接收到了3个冗余的ACK,则进入快速恢复状态,在这种状态下,对于收到的每个冗余的ack都会使窗口值增加一(因为能收到ack,代表拥塞的情况不是很严重),当接收到对丢失报文的ack后,cwnd设置为原来的一半,然后进入拥塞避免状态。
cwnd拥塞窗口确保发送发未被确认的数据不会超过rwnd(接收窗口)