计算机网络-运输层-TCP拥塞控制

1 慢开始

基于窗口的拥塞控制,发送方维持一个拥塞窗口cwnd,拥塞窗口的大小取决于网络的拥塞程度,并且动态变化,发送方使自己的发送窗口小于等于拥塞窗口,实现拥塞控制。

拥塞窗口cwnd的变化:

  1. 主机开始发送数据时,现将cwnd设置为1-4个发送方的最大报文段SMSS。
  2. 每收到一个对新的报文段的确认,就把拥塞窗口增大最多一个SMSS的数值。
  3. 每经过一个传输轮次,cwnd大小就加倍。
  4. 为防止cwnd增长过大,需要设置一个慢开始门限ssthresh,cwnd超过ssthresh时就不再使用慢开始算法,改用拥塞避免算法。

2 拥塞避免

拥塞避免算法:

  1. 拥塞避免算法让cwnd缓慢地增大,没经过一个传输伦次,cwnd+1,也就是加法增大
  2. 如果出现超时,就把ssthresh=cwnd/2,cwnd=1。重新开始慢开始算法
  3. 如果连续收到三个重复确认,就立即进行重传。ssthresh=cwnd/2,cwnd=ssthresh,进行拥塞控制算法。这称为乘法减小,二者合在一起就是所谓的AIMD算法。

从流量控制考虑,发送方的窗口不能超过接收方给出的接受窗口值。
从拥塞控制考虑,发送方的窗口不能超过拥塞窗口。
实际上发送方的窗口上限值=min(rwnd,cwnd)。

3 主动队列管理AQM

在路由器中,队列通常按先进先出的顺序转发,当队列已满时,就会把后来的分组丢弃。因此就会产生超时重传。
在实际使用中,通常有很多TCP连接的报文段是复用在网络层的IP数据报中发送,因此一旦产生尾部丢弃,就或有多个TCP连接在同一时间进入到慢开始状态,这称为全局同步。而网络恢复后,通信量又会变大很多。

为了避免全局同步现象,提出了主动队列管理,也就是不等到队列满再丢弃尾部,而是稍微提前一些丢弃一些分组,使一些TCP连接提前进入慢开始,从而消除全局同步。其中就有流行多年的早期随机检测RED,其规则如下:

  1. 路由器维持两个参数,即队列最大门限和最小门限,当新到达一个分组时,如果当前队列大小小于最小门限,就将新分组加入队列。
  2. 如果当前队列大小大于最大门限,就丢弃新分组。
  3. 如果当前队列大小介于最小门限和最大门限之间,就以一定概率p丢弃新分组。

你可能感兴趣的:(计算机网络)