滑动窗口机制

《深入理解计算机网络》第5章数据链路层,本章主要针对广域网中的数据链路层和局域网体系结构中的逻辑链路控制(LLC)子层的功能及相关技术进行全面、深入的介绍。本节为大家介绍滑动窗口机制。
AD:WOT2015 互联网运维与开发者大会 热销抢票
5.4.2 滑动窗口机制

在上面介绍的XON/XOFF 流量控制方案中,为了实现发送端与接收端的速率匹配,需要往返发送一些特殊的控制字符,这样就会使得信道的利用率大打折扣,其主要是用于与一些低数据处理能力的接收端通信时采用。在实际的数据链路层流量控制中,更多的是采用本节将要介绍的“滑动窗口机制”来进行流量控制的(传输层也有这样的流量控制方案,具体将在第10 章介绍)。

  1. 理解“滑动窗口”机制

“滑动窗口机制”中的“窗口”是指发送端和接收端的缓存空间大小;“滑动”的意思是指缓存空间中存放的未处理帧数是变化的,发送端在收到确认帧后会删除原来保存在缓存中的待重发帧,而接收端向网络层提交一个帧后也会删除原来保存在缓存中的帧。

至于缓存空间大小,采取不同的流量控制方案其会有不同的值,但要明白的是,缓存空间都是非常有限的,就像计算机CPU 中的缓存一样。缓存越大,成本越高。如在5.3.4 节介绍的空闲重发请求方案中,一次只能发送一个帧,发完一个帧后就等待来自接收端的确认帧,收到确认帧后就删除原来保存在缓存空间中的待重发帧,接收端不需要缓存空间,因为它接收到数据后即进行处理,对于有错误的帧直接丢弃。所以在“空闲重发请求”方案中仅发送端需要保存一个帧的缓存空间,也就是它的“缓存空间大小”就是一个帧。

而在前面介绍的“连续重发请求”方案中,发送端一次可以连续发送多个帧,并且在其缓存空间中保存所有已发,但没有接收到来自接收端确认帧的待重发帧,而不用像“空闲重发请求”那样发一帧停下来等待接收端的确认帧;接收端也可以在缓存空间中保存来不及处理的帧,大大提高了数据传输的效率。

同样打个简单的比喻来说。就像一个水缸接了大小两个不同口径的水管,进水管的口径较大,出水管的口径较小。在这样的情况下,进水管肯定不能持续不断地向水缸中加水,否则就会因出水速率不匹配导致水从水缸中流出来了。所以通常是进水管供了一段时间的水后就要停下来,等水缸中的水用得差不多了再加水。这时水缸的容量就相当于上面所说的接收端缓存空间大小了。

这里涉及一个非常重要的问题,那就是到底一次最多连续发多少个帧比较合适呢?这里要考虑两方面的因素,一是要能实现有效的差错控制,二是要与接收端的数据处理能力相匹配,前者我们已介绍,本节仅从后者来考虑,也就是从流量控制角度来考虑。缓存空间大小又与帧编号有关,因为在数据传输时,每个帧都是有序列号的,这在本章前面介绍“差错控制”方案中就已说到。缓存空间越大,用于帧编号的位数就要越多,如1 位可以表示2 个帧(也就是窗口大小为2),2 位可以表示4 个帧(也就是窗口大小为4),3 位可以表示8 个帧(也就是窗口大小为8),……。但用于指示帧序列号的位数越多,帧的无用开销就越大,所以在一般的数据链路层协议中只有2 位用于帧编号。

  1. 滑动窗口实例

在此以1 位帧序列号,也就是窗口大小为2 的示例来介绍“滑动窗口机制”。下面从初始状态开始介绍整个流程(注意,这里仅考虑正常传输情况,不考虑出现差错的情况),如图5-14 所示(各步对应图中的相应序号):

1)在初始状态下,发送端和接收端的缓存空间中均没有保存数据帧。

2)发送端开始发送第一个帧—0 号帧,并把它保存在缓存空间中,并建立一个待重发表,第一个帧号就是“0”。

3)因为是1 个比特位用于帧编号,窗口大小为2,所以发送端还可以继续发送第二个帧—1 号帧。同时把这个帧保存在缓存空间中,并向待重发表中添加第二个帧的序号“1”。此时因为在发送端的缓存空间中已保存了两个帧(0 号帧和1 号帧),达到了窗口大小的值,不能继续发送后面的帧了,先停下来等待来自接收端的确认帧。在等待的过程中,接收端可能收到了0 号帧,然后向发送端返回0 号帧的确认消息。

4)发送端在收到0 号帧的确认帧后,立即从缓存空间中清除原来保存的0 号待重发帧,并在待重发表中清除帧序号“0”;接收端把收到的0 号帧提交给网络层,并清除缓存空间中的0 号帧,此时缓存空间中又为空了。

5)此时发送端继续发送第三个帧—2 号帧,同时也把这个帧保存在缓存空间中,并向待重发表中添加第三个帧的序号“2”。因为此时发送端的缓存空间中又已保存了两个帧(1号帧和2 号帧),又达到了窗口大小的值,不能继续发送后面的帧了,要再先停下来等待来自接收端的确认帧。在等待的过程中,接收端可能又收到了1 号帧,然后向发送端返回1 号帧的确认帧。

6)发送端在收到1 号帧的确认帧后,立即从缓存空间中清除原来保存的1 号待重发帧,并在待重发表中清除帧序号“1”。接收端把收到的1 号帧提交给网络层,清除缓存空间中的1 号帧,此时缓存空间中又为空了。

7)此时发送端继续发送第四个帧—3 号帧,同时也把这个帧保存在缓存空间中,并向待重发表中添加第四个帧的序号“3”。同样,因为此时发送端的缓存空间中又已保存了两个帧(1 号帧和2 号帧),又达到了窗口大小的值,不能继续发送后面的帧了,再要先停下来等待来自接收端的确认帧。在等待的过程中,接收端可能又收到了2 号帧,然后向发送返回2号帧的确认帧。

8)发送端在收到2 号帧的确认帧后,立即从缓存空间中清除原来保存的2 号待重发帧,并在待重发表中清除帧序号“2”。接收端把收到的2 号帧提交给网络层,清除缓存空间中的2 号帧,此时缓存空间中又为空了;

……

后面的步骤按照以上流程类推。

(点击查看大图)图5-14 “滑动窗口机制”工作流程示例
说明 数据链路层中常见的协议可分为两大类:面向字符的链路层协议和面向比特的链路层协议(这些都属于同步传输模式协议)。面向字符的链路层协议主要有IBM BSC(Binary Synchronous Communication,二进制同步通信)协议、DEC DDCMP(Digital DataCommunications Message Protocol, 数字数据通信消息协议)、SLIP(Serial Line InternetProtocol,串行线路网际协议)、PPP(Point-to-Point Protocol,点对点协议)等;面向比特的链路层协议主要有IBM 的SDLC、ANSI 通过修改SDLC 而提出的ADCCP(Advanced DataCommunication Control Procedure,高级数据通信控制规程)、ISO 通过修改SDLC 而提出HDLC(High-level Data Link Control,高级数据链路控制)、CCITT 通过修改HDLC 而提出LAP(Link Access Procedure,链路访问规程)等。下面将介绍几种典型的数据链路层协议。

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