TCP阻塞控制

来源:互联网 发布:手机原创歌曲软件 编辑:程序博客网 时间:2024/06/03 21:35

1.概述
2.慢启动
3.阻塞避免
4.快速重传与快速恢复

1.概述

  TCP拥塞控制能够提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。拥塞控制主要有几种:慢启动,阻塞避免,快速重传 以及快速恢复。
  拥塞控制的最终受控变量是发送端向网络一次连续写入的数据量(即收到其中第一个数据的确认应答之前的所有数据),称为发送窗口(send window, SWND)。但是发送端往往最终已TCP报文段来发送数据,所以SWND限定了发送端能够连续发送TCP报文段的数量。发送端应该合理地选择SWND的大小,若该值太小,会引起网络延迟,若太大,则容易导致网络拥塞。前面中我们知道,接收端可通过其接收通过窗口(RWND)来控制发送端SWND大小,但是发送端应该引入一个拥塞端口(Congestion Window, CWND)的状态量。实际的SWND值就是RWND和CWND的较小值。

这里写图片描述

2.慢启动

  为了防止网络拥塞,TCP采用可一种慢启动算法,对发送数据量进行控制,为了调节发送端的数据发送量,引入了拥塞窗口,在慢启动时,将这个拥塞窗口设为1个报文段发送数据。之后每收到一次确认应答,拥塞窗口就加1和报文段。在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小进行比较,然后选择较小的值来控制数据量的发送。拥塞窗口是发送端使用的流量控制,而通告窗口则是接收端使用的流量控制。
  慢启动算法的步骤如下(cwnd全程Congestion Window):
  1.初始化cwnd=1,表示可以传一个MSS大小的数据;
  2.每收到一个ACK,cwnd++,即增加1,呈线性上升;
  3.每当过了一个RTT,cwnd = cwnd * 2,呈指数上升;
  4.ssthresh(slow start threshold 慢开始门限),是一个上限,当cwnd>=ssthresh时,就会进入拥塞避免算法。

3.拥塞避免

  拥塞避免算法是让拥塞窗口缓慢地增大,收到每一轮的确认后,将拥塞窗口的值加1,而不是加倍,这样拥塞窗口的值按照线性规律缓慢增长。在慢启动中,当cwnd>=ssthresh时,就会进入“拥塞避免算法”。一般来说ssthresh的值是65535,单位是字节,当cwnd达到这个值后,算法如下:
  1.收到一个ACK时,cwnd=cwnd+ 1/cwnd;
  2.当没过一个RTT时,cwnd=cwnd+1;

4.快速重传与快速恢复

  块重传算法要求接收方每收到一个失序的报文段后就立即发出重复确认(重复发送对前面有序部分的确认),而不是等到自己发送数据时才进行捎带确认,也不是累计收到的报文发送累计确认,如果发送方连续收到三个重复确认,就应该立即重传对方未收到的报文段(有收到重复确认,说明后面的报文段都到达了,只有中间丢失的报文段没送达)。

  快恢复算法与快重传算法配合使用:

  1.当发送方连续收到三个重复确认时,就把慢开始门限ssthresh设置为当前拥塞窗口cwnd的一半,重传丢失的报文段。设置cwnd为ssthresh加上三倍的报文段大小;
  2.每次收到另一个重复的ACK时,cwnd增加1个报文段大小并发送1个分组;
  3.当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(跟第1步一样设置方法)。这个ACK应该是在进行重传之后的一个往返时间内对步骤1中重传的确认。另外,这个ACK也应该是对丢失的分组和收到额第一个重复的ACK之间的中间报文段的确认。这一步采用的是拥塞避免算法。

0 0
原创粉丝点击