架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

滑动窗口算法在应用软件系统中的应用

Posted on 2008-12-19 23:18  chen eric  阅读(884)  评论(0编辑  收藏  举报

今天在看USSD相关的资料,对网络传输部分的信息进行了回顾,忍不住又看了一遍通信中用的非常多的滑动窗口算法。滑动窗口算法主要是用来解决系统间通信的时候的流量拥塞及控制问题,一个好的实现既可以提高网络通信的数据流量,同时又能提高通信质量和解决拥塞控制问题。

简要描述一下该算法:

1、将需要传递的信息编码为一个有序的帧序列;

2、发送方设置一个滑动窗口(缓冲区),该窗口大小为最大发送帧数(N)。该缓冲区采用先进先出队列机制,首先发送N帧信息,每帧都有一个定时器,当超时还没有收到接收方的应答帧时,则重发该帧;

3、接收方设置一接收队列,对接收到的每帧入队列。如果该帧是编号最小的帧,则发送该帧收到的应答帧给发送方;

4、发送方如果收到接收方的某帧的应答消息,则判断,如果是队列的第一个帧,则该帧出列。队列空出一位,再发送一帧,否则记录其为可出列标记。

利用滑动窗口算法原理,可以保证一堆数据在有序发送的情况下,顺利的达到接收方。

通过对滑动窗口算法原理的分析,可以将该算法应用在如下场景:

A系统需要给B系统发送大量的资料,这些资料需要拆分为M次才能发送完成,考虑到网络流量问题,不能一次性的就全部把M个数据块发送给B系统。较好的处理方式是设置符合网络流量大小的值N,做为A系统一次发送的数据块个数。N作为滑动窗口的长度。采用滑动窗口算法来完成A、B系统的数据发送,考虑到发送的数据可以是无序(既数据没有先后之分)的情况。需要对该算法略加修改,即发送队列中的任何一个数据块如果收到应答信息,队列都向前滑动一格,并允许立即发送一个新的数据块。就可以很好的解决这个问题。