目录
一、网络拥塞
数据在网络中进行传送时,不是直接到达目的地,而是经过若干个路由器在中间进行转发,而路由器的内存是有限的,若同一时间到达某个路由器的数据太多,这个路由器将无法接收所有的数据,只能将一部分丢弃;或者同一台路由器数据太多,后面到达的数据将要等待较长的时间才会被转发。网络中的数据太多,导致某个路由器处理不过来或处理地太慢,这就是网络拥塞。
二、拥塞控制
TCP是面向连接的可靠的传输层协议,使用拥塞控制来保证传输的可靠性
TCP协议通过慢开始、拥塞避免、快重传、快恢复来处理拥塞控制
拥塞窗口cwnd:
在发送方的 TCP 程序会跟踪和维护一个叫做拥塞窗口的变量,用来进行拥塞控制。 拥塞窗口被称为cwnd 。 在 TCP 发送端,所有被发送但是还没收到确认的数据段必须落在这个窗口中。
当网络拥塞时,TCP程序将减小 cwnd ,
当网络通畅时,增大 cwnd ,以此来控制数据发送的速率。
慢开始门限ssthresh:
为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。ssthresh的用法如下:
当cwnd<ssthresh时,使用慢开始算法。
当cwnd>ssthresh时,改用拥塞避免算法。
当cwnd=ssthresh时,慢开始与拥塞避免算法任意
1.慢开始
传输时,发送方在第一次发送会以探测的方式从小到大进行发送数据,发送方的发送窗口从1开始,以指数形式不断增大,直到达到慢开始门限,慢开始停止,执行拥塞避免。
2.拥塞避免
为了防止慢开始过度增长,因此设置了慢开始门限,一旦拥塞窗口值达到慢开始门限,即当 cwnd >= ssthresh 时,进入拥塞避免执行拥塞避免算法。每传输一次数据,门限值加1,直到网络中发生拥塞时,拥塞避免阶段停止,触发重传机制。
3.快重传
接收方每次接收都会对最后一个已收到的有序报文段进行确认,当发送方收到来自接收方发送的3个连续的确认信号时,说明接收方没有收到发送方的某一次发送,即网络中发送数据丢失,此时发送方立即重新发送,并执行快恢复算法。
4.快恢复
当发送方收到三个重复的确认时,把ssthresh设置为cwnd的一半,并让cwnd的值等于新的慢开始门限ssthresh值,从新的门限值开始执行拥塞避免算法,每次传输数据,门限值会加1,直到发送方再次收到三个重复确认,一般快重传和快恢复算法配套使用。