(TCP/IP的特性二)流量控制&阻塞控制

TCP流量控制之滑动窗口协议:

    TCP协议中,发送方和接收方均维护了一份窗口,窗口的大小就是TCP可以发送的数据帧数,在发送端,只有在发送窗口内的数据才允许被发送到接收端,而在接收端,也只有落到接收窗口的数据才允许被接收。这样通过不断滑动窗口实现数据的不断发送,也通过控制窗口的大小实现了流量控制。

    滑动窗口的大小是由接收方数据缓冲区大小决定的,在连接建立时接收端便会将这些信息传送给发送端,然后发送端据此设置自己的滑动窗口大小。当然随着链路网络环境等变化,滑动窗口也是会变化的,以达到最优传输效率。


由上图我们可以总结滑动窗口的处理机制:

①窗口大小为6,最初在窗口内的为1/2/3/4/5/6六段数据报,此时TCP将六段数据报发送至接收端

②1,2,3三段数据报接收到了ack返回,4,5,6暂未收到ack,此时TCP认为1,2,3已被处理完成,则窗口向右滑动三格

③此时7/8/9三段数据报进入滑动窗口范围,则TCP可将7,8,9发送至接收端

④待4,5,6的ack报文收到,窗口将继续向右滑动,TCP根据此滑动窗口机制保证了数据不断发送至接收端,同时又充分考虑了接收端的接收效率,不至于导致不必要的网络堵塞


TCP阻塞控制之阻塞窗口:

    滑动窗口机制用于局域网传输是可以的,但是在广域网中可能存在网络堵塞问题,由于在发送端、接收端中间的网路情况是未知的,我们还需要确定传输双方之间网络的最大吞吐能力,因此TCP维护了一个阻塞窗口。阻塞窗口的实现运用了多种算法,在连接建立初期,使用慢启动方法进行控制:

①慢启动初始阻塞窗口为1,每次经历过一个传输轮次(将当前整个窗口中所有数据报都传输完毕,接收到ACK,称为一个传输轮次)窗口大小翻倍,因此在慢启动初期,窗口大小将呈指数级增长

②TCP给慢启动设置了一个阈值,称为慢启动门限(初始值为16),分为三种情况,当窗口大小小于门限时,采用慢启动方法,当窗口大小大于门限时采用拥塞避免算法(每经过一个传输轮次窗口大小+1),当窗口大小等于门限时, 可采用慢启动算法也可采用拥塞避免算法

通过以上两种算法,tcp逐渐找到了最适合当前网络传输环境的阻塞窗口大小,避免了瞬间大量数据涌入网路导致网络堵塞。我们平时下载的时候,也可以看到下载速度是逐渐增加直到峰值的,便是运用了这两种算法。

异常情况之定时器超时:

当网络传输窗口逐步趋于稳定,传输过程中忽然出现了数据超时,即发送的数据超时仍未收到ACK信息,此时说明网络环境有变,需要重新设置阻塞窗口,TCP将会采用加速递减机制:

①将阻塞窗口门限值设置为当前窗口大小一半,滑动窗口大小设置为1

②执行慢启动机制重新找到合适的窗口大小

异常情况之报文失序返回重复ACK:

当网络丢包导致报文失序时,TCP将会采用快重传&快恢复策略,快重传机制要求接收方每收到一个失序的TCP数据报就立刻发出重复ack确认,而不要等到自己发送数据时才发送确认(TCP在普通情况下,为了减少网络传输资源消耗,ack报文一般随着下一次的返回报文一块发送而不是单独返回ack),而接收方在连续收到3个重复ack后将立即重传未被确认的报文段。

而收到3个重复ACK时,将执行“乘法减小”算法,将慢启动门限减半,但接下去不执行慢启动算法,不将阻塞窗口设置为1,,而是设置为当前慢启动门限大小(即原来的一半),然后执行拥塞避免算法,使阻塞窗口线性增大


总结来说,TCP/IP协议中的滑动窗口主要是根据发送、接收双方的数据缓冲区处理能力设置了一个限制,而阻塞窗口是根据发送、接收双方之间的网络情况设置的阈值限制,并利用多种算法使得能快速找到最适合当前网络情况的阻塞窗口大小。通过两种机制,实现了TCP的流量控制、阻塞控制

   


猜你喜欢

转载自blog.csdn.net/smartValentines/article/details/80719044