在数据通信中,要求发送方的发送数据速率必须不能超过接收方的接收和处理数据的速率。
当接收方来不及接收和处理数据时,就必须采取相应的措施来控制发送方发送数据的速率。
一般流量控制是由接收方主动控制实现的。

流量控制方法:

1、开关式流量控制: XON/XOFF, 硬件
           2、协议式流量控制: ARQ自动重发请求
                   停止等待协议(Stop-and-Wait Protocol)
                   滑动窗口协议(Slide Window Protocol)
                   (1)连续ARQ协议
                   (2)选择重传ARQ协议

流量控制的基本原理:

1、完全理想化的数据传输
           2、最简单流量控制的数据链路层协议
           3、实用的停止等待协议
           4、连续ARQ协议
           5、选择重传ARQ协议

1、完全理想化的数据传输

完全理想化的数据传输所基于的两个假定:
           假定1:链路是理想的传输信道,所传送的任何数据既不会出差错也不会丢失。
           假定2:不管发送方以多快的速率发送数据,接收方总是来得及收下,并及时上交主机。

2、最简单流量控制的数据链路层协议

流量控制的目的:现代数据通信的交换方式,采用了存储转发的分组交换技术,当接收方的处理能力小于发送方的发送量时,必须采用流量控制。
保留上述的第一个假定,即主机A向主机B传输数据的信道仍然是无差错的理想信道。但现在不能保证接收端向主机交付数据的速率永远不低于发送端发送数据的速率,需要流量控制。
由收方控制发方的数据流,是计算机网络中流量控制的一个基本方法。

在发送结点:

(1) 从主机取一个数据帧;
           (2) 将数据帧送到数据链路层的发送缓存;
           (3) 将发送缓存中的数据帧发送出去;
           (4) 等待;
           (5) 若收到由接收结点发过来的确认应答信息,则从主机取一个新的数据帧,然后转到(2)。

在接收结点:

(1) 等待;
           (2) 若收到由发送结点发过来的数据帧,则将其放入数据链路层的接收缓存;
           (3) 将接收缓存中的数据帧上交主机;
           (4) 向发送结点发送一个确认信息,表示数据帧已经上交给主机;
           (5) 转到(1)。

两种情况的对比(传输均无差错)

3、实用的停止等待协议

在实际的数据传输过程中,由于传输信道特性的不理想和外界干扰的存在,出现传输差错是不可避免的。
传输差错导致接收的数据帧错误,接收方要求发送方重发数据帧。
严重的传输差错还导致数据帧或应答帧丢失,使发送操作不能继续进行,或接收方重复接收数据。

超时重发技术:

结点A发送完一个数据帧时,就启动一个超时计时器。此计时器又称为定时器。
           若到了超时计时器所设置的重传时间 tout而仍收不到结点 B 的任何确认帧,则结点 A 就重传前面所发送的这一数据帧。
           一般可将重传时间选为略大于“从发完数据帧到收到确认帧所需的平均时间”。
           重传若干次后仍不能成功,则报告差错。

重复帧问题:

如果是接收方的应答帧丢失,会导致发送方重复发送,出现重复帧。
           每个数据帧带上不同的发送序号。每发送一个新的数据帧就把它的发送序号加 1。
           若结点 B 收到发送序号相同的数据帧,就表明出现了重复帧。这时应丢弃重复帧,因为已经收到过同样的数据帧。
           但此时结点 B 还必须向 A 发送确认帧ACK,以保证协议正常执行。

帧的编号问题:

任何一个编号系统的序号所占用的比特数一定是有限的。因此,经过一段时间后,发送序号就会重复。
           序号占用的比特数越少,数据传输的额外开销就越小。
           对于停止等待协议,由于每发送一个数据帧就停止等待应答,因此用一个比特来编号就够了。

帧的发送序号:

一个比特可表示0和1两种不同的序号。数据帧中的发送序号 N(S) 以 0 和 1 交替的方式出现在数据帧中。
           每发一个新的数据帧,发送序号就和上次发送的不一样。用这样的方法就可以使收方能够区分开新的数据帧和重传的数据帧了。

停止等待方式的性能分析 :

由于发送端口或传输信道的速率限制,发送一帧需要一定的时间:“发送时延”。
           接收一帧的时间和发送一帧的时间相同。发送应答帧,也有“发送时延”。
           由于电磁波传输速率的存在,帧在信道中的传送,具有“传播时延”。
           接收方收到帧后,差错检验、转交处理,发送方收到应答后,准备发送下一帧,都需要“处理时延” 。
t P = t2 – t0 = t3 – t1 = L / v         传播时延
           t F = t1 – t0 = t3 - t2 = F / C         发送时延
           t A = t5 – t4 = A / C                          应答帧发送时延
           t proc= t4 - t3                                        处理时延
                   L 节点A 与 B 之间的距离
                   v 信号传播速率 (3× 108 m / s)
                   F 数据帧长度 = H + D (帧头+数据)
                   A 应答帧长度
                   C 数据发送速率 bits/s

正常情况信道利用率

U = t D / (tF + tA + 2tP + 2tproc)
           t D = D/C ,t F = F/C, t A = A/C
           U = D /(F+A+2C( tP + tproc ))
           不考虑处理时延和传播时延,及应答帧的开销,则U仅与帧结构相关;当传播时延较大时,信道利用率很低。

非正常情况

忽略应答时延和处理时延,则重传时间为
           tout > = 2tP
           则成功发送一帧的间隔为 tT = tF + 2tP
           考虑传输可能出现差错的情况,则正确传送一个数据帧的平均时间为tav = tT(1 + 1个帧的平均传送次数)
           设数据帧出错的概率为p,则tav = tT+(1-p) Σ ipi tT = tT (1-p)
           设每帧平均重发次数为 R = p/(1-p)
           发送一个帧所需要的信道容量为Q0=R(F+CT)+(F+A+2CI)
           有传输差错影响时,信道利用率为
以上公式说明,信道利用率与控制信息长度、信道误码率、控制开销有关。

停止等待协议的优缺点:

优点:比较简单 。
           缺点:通信信道的利用率不高,也就是说,信道还远远没有被数据比特填满。
           虽然物理层在传输比特时会出现差错,但由于数据链路层的停止等待协议采用了有效的检错重传机制,数据链路层对上面的网络层可以提供可靠传输服务。

4、连续ARQ协议

滑动窗口流量控制方法:

为了克服停止等待协议信道利用率低的问题,可以采用滑动窗口控制方法。
           当发送完一个数据帧后,不是停下来等待确认帧,而是继续发送若干数据帧。由于在等待确认时可以继续发送数据,减少了信道空闲时间,因而提高了整个通信过程的吞吐量。
           “滑动窗口”机制是实现数据帧传输控制的逻辑过程,它要求通信两端节点设置发送存储单元,用于保存已发送但尚未被确认的帧,这些帧对应着一张连续序号列表,即发送窗口。接收方则有一张接收序号列表,即接收窗口。

滑动窗口图形表示方法:

窗口尺寸 W=6
           H(W) = L(W) + W-1 mod 2n
           发送窗口:发送端允许连续发送的帧的序号表
           接收窗口:接收端允许连续接收的帧的序号表

发送窗口:

发送窗口尺寸WT:发送端可以不等待应答而连续发送的最大帧数;
           发送窗口后沿L(W):发端最先发出而尚未收到应答的帧序号;
           发送窗口前沿H(W):发端最后发出而尚未收到应答的帧序号;考虑出现差错的可能,WT不能过大。

接收窗口:

接收窗口尺寸:接收端允许接收的帧数;
           在接收端只有当收到的数据帧的发送序号落入接收窗口内才允许将该数据帧收下。
           若接收到的数据帧落在接收窗口之外,则一律将其丢弃。

窗口滑动规则:

发送窗口:
               每发送一帧数据,窗口后沿移动一格;
               每接收一帧应答,窗口前沿移动一格;
           接收窗口:
               每接收一帧数据,窗口后沿移动一格;
               每发送一帧应答,窗口前沿移动一格;

滑动窗口流量控制方法:

只有接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。
           收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。
           当发送窗口和接收窗口的大小都等于 1时,就是停止等待协议。
           当发送完一个数据帧后,不是停下来等待确认帧,而是继续发送若干数据帧;
           如果收到了接收方发来的确认帧,则发送方可以继续发送数据帧;
           如果出现差错,则从出现差错的数据帧开始全部重发。

连续ARQ工作原理 :

(1) 接收端只按序接收数据帧。虽然在有差错的 2号帧之后接着又收到了正确的 3 个数据帧,但接收端都必须将这些帧丢弃,因为在这些帧前面有一个 2 号帧还没有收到。虽然丢弃了这些不按序的无差错帧,但应重复发送已发送过的最后一个确认帧(防止确认帧丢失)。
(2) ACK1 表示确认 0 号帧 DATA0,并期望下次收到 1 号帧;ACK2 表示确认 1 号帧 DATA1,并期望下次收到 2 号帧;依此类推。
在协议式流量控制方式中,确认序号 N(R) 一般表示接收方希望接收的下一帧序号为 N(R) ,实际上也表示了对 N(R) -1 帧及其以前各帧的确认。
(3) 结点 A 在每发送完一个数据帧时都要设置该帧的超时计时器。如果在超时时间内收到确认帧,就立即将超时计时器清零,继续发送后续的数据帧。但若在所设置的超时时间到了而未收到确认帧,就要重传相应的数据帧(仍需重新设置超时计时器)。
(4) 在重传 2 号数据帧时,虽然结点 A 已经发完了 5 号帧,但仍必须将 2号帧及其以后的各帧全部进行重传。连续 ARQ 又称为Go-back-N ARQ,即 “返回N帧的ARQ”,意思是当出现差错必须重传时,要向回走 N 个帧,然后再开始重传。

发送端设置发送窗口:

发送端和接收端分别设定发送窗口和接收窗口 。
           发送窗口用来对发送端进行流量控制。
           发送窗口的大小 WT 代表在还没有收到对方确认信息的情况下发送端最多可以发送多少个数据帧。

接收端设置接收窗口:

在连续 ARQ 协议中,接收窗口的大小 WR = 1。
           只有当收到的帧的序号与接收窗口一致时才能接收该帧。否则,就丢弃它。
           每收到一个序号正确的帧,接收窗口就向前(即向右方)滑动一个帧的位置。同时发送对该帧的确认。
           连续ARQ可以采用累积确认方法。

滑动窗口的重要特性:

只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。
           收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。
           当发送窗口和接收窗口的大小都等于 1时,就是停止等待协议。

发送窗口的最大值:

当用 n 个比特进行编号时,则只有在发送窗口的大小 WT <= 2n -1时,连续 ARQ 协议才能正确运行。
           例如,当采用 3 bit 编码时,发送窗口的最大值是 7 而不是 8。
           在实际应用中,有模8和模128两种编码方式。模8采用3位编码,一般用于地面链路通信;模128采用7位编码,一般用于卫星链路通信。

5、选择ARQ 方式

在连续ARQ中,如果某个数据帧发生差错,后续的数据帧即使被正确地接收到,也要被丢弃,造成网络资源浪费;
           为进一步提高信道的利用率,可设法只重传出错的数据帧或计时器超时的数据帧。
           可加大接收窗口,先收下发送序号不连续但仍处在接收窗口中的那些数据帧。等到所缺序号的数据帧收到后再一并送交主机。
           选择重传 ARQ 协议可避免重复传送那些本来已经正确到达接收端的数据帧。
           我们付出的代价是在接收端要设置具有相当容量的缓存空间。
           选择 ARQ 方式,若用 n 比特进行编号,则接收窗口的最大值受下式的约束 WR <=2n/2
           当接收窗口为最大值WR = 2n/2时,选择ARQ方式发送窗口WT = 2n/2