1.TCP发送方变量
- cwnd
cwnd(拥塞窗口)变量,即发送方一次想发多少字节的数据
cwnd 有一个初始值,RFC 2581 规定,它的大小不超过 2MSS
cwnd 是一个动态变化的值,它会根据网络的情况实时的调整自己,最后,cwnd 就会适应网络的情况,以保证发送 cwnd 字节的数据而网络不会拥塞
- ssthresh
慢启动门限,这是一个阈值,当 cwnd 超过这个值的时候,慢启动算法结束,进入拥塞避免算法
2.慢启动过程
- 从前面我们了解到cwnd会变化的,那么cwnd拥塞窗口是怎么控制的
假设cwnd的窗口的单位为MSS,并初始为1,发送后每次收到对方的确认后,cwnd逐渐加1,直到当cwnd大于慢启动门限值ssthresh,将cwmd重新设置为1,并ssthresh减半,并慢启动过程结束,进入拥塞避免
3.拥塞避免过程
- 当 cwnd > ssthresh 时
无论是在慢启动阶段,还是在拥塞避免阶段,只要发送方判断网络出现拥塞(依据就是没有按照收到确认),就要把 ssthresh 设置为出现拥塞时的 cwnd 值的一半(这里只是举例)
更新了 ssthresh 后,同时将 cwnd 重新设置为 1,又开始执行慢启动算法。这样做的目的是要迅速减少主机发送到网络中的分组数,使得发生拥塞的中间设备有足够的时间把缓冲区中积压的分组处理完毕
来源:https://blog.csdn.net/Hh20161314/article/details/100133629