前言
本文为个人学习笔记的整理,其中很多借鉴了小林coding的图解网络。
为了避免发送方无节制地发送数据,从而造成网络拥堵,所以 TCP 设计了拥塞控制。
流量控制和拥塞控制的区别
-
流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。
-
拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况。
拥塞窗口
拥塞窗口 cwnd(congestion window)是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。拥塞控制的本质就是使用算法控制拥塞窗口,从而避免过多的数据注入到网络。
但是其实真正决定传输速率的是发送方的滑动窗口大小,发送窗口 = min(拥塞窗口,接收窗口)
当发生了重传,就会认为网络出现了拥塞,拥塞窗口减小;否则拥塞窗口增大。
拥塞控制算法
拥塞控制算法:慢启动、拥塞避免、快速重传、快速恢复(这是官方定义的四大算法,但是个人认为不方便记忆和理解)。整体过程大约如下:
- 在 TCP 连接建立完毕后,会先使用慢启动算法