数据链路控制(有噪声通道) Stop-and-Wait ARQ协议

版权声明:转载请附上文章地址 https://blog.csdn.net/weixin_38134491/article/details/84672883

有噪声通道主要谈到三个协议

  • 停止等待自动重复请求协议, Stop-and-Wait ARQ 
  • 回退N帧自动重发请求协议, Go-Back-N Automatic Repeat Request
  • 选择性重复ARQ,  Selective Repeat ARQ

First, we will talk about the Stop-and-Wait ARQ. The difference between Stop-and Wait  protocol and Stop-and-Wait ARQ is that

only add a error control function basing on the Stop-and-Wait protocol.  

此协议中差错检测由接收方的静音来证明,

It is more difficult to deal with the lost frame than dealing with damaged frame.

当有差错时,如果接收方没有响应,那么发送方如何知道要重发哪个帧呢?

为了解决这个问题,发送方保留已发送帧的副本,与此同时启动一个定时器,如果定时器到时没有收到已发送帧的ACK,就要重发该帧

在停止等待自动重复请求协议中,差错的检测由保留已发送的副本并当定时器到时时重传这个帧来实现

我们讲一个协议的时候都是从序列号、确认号、设计、算法、效率、流水线操作6个顺序进行分析

序列号

此协议要求对帧进行编号,就是我们说的 序列号 sequence number, 数据帧要增加一个字段来容纳帧的序列号,

我们希望帧的长度越小越好,例如,我们决定字段m位长,序列号从0开始,到2^m -1 ,再开始重复。

在停止等待ARQ中,我们使用序列号给帧编号,该序列号基于模2运算

确认号

sequence number must be suitble to Data Frame also should be suitable to ACK Frame, 

所以规定 确认号总是告知接收方期待的下一个帧的序列号,

在停止等待ARQ中,确认号总是以模2运算宣布期待收到的下一个帧的编号

设计

一个数据帧使用序列号,一个ACK帧使用一个确认号

  • 发送方有一个控制变量Sn,它保存下一个要被发送帧的序号0或1,
  • 接收方有一个控制变量Rn,它保存下一个期待接收到帧的编号

当一个帧被发送,Sn递增(模2),也就是如果它是0,它会变成1,如果是1那么会变成0.

发送方站点将有3个时间发生,接收方站点发生一个事件

算法

/*Stop-and-Wait ARQ 协议中发送方站点的算法*/

Sn=0;                        //帧0被最先发出
canSend=true;                //允许最初请求
while(true){                //无休止重发

    WaitForEvent();            //当一个事件发生时,唤醒它
    if(Event(RequestToSend) AND canSend){
        GetData();
        MakeFrame(Sn);          //顺序号为Sn
        StoreFrame(Sn);        //保留副本
        sendFrame(Sn);
        StartTimer();
        Sn=Sn+1;
        canSend=false;
    }

    
    WaitForEvent();        //休眠
    if(Event(ArrivalNotification)){   //ACK帧到达
        ReceiveFrame(ackNo);             //接收ACK帧
        if(not corrupted AND ackNo==Sn){        //有效ACK帧
            Stoptimer();                 
            PurgeFrame(Sn-1);         //不需要的副本
            canSend=true;
        }
    }


    if(Event(TimeOut)){              //超时
        StartTimer();                
        ResendFrame(Sn-1);            //发送副本检查
    }


}

效率

如果通道有很大的带宽,且往返延迟较长,这两者的乘积称为带宽延迟乘积 Bandwidth-delay product

带宽延迟的乘积就是以位为单位的管道容量

举个例子:

在一个等待ARQ系统中,带宽是1Mbps,且一个位往返一次是20微秒,那么带宽延迟乘积是多少?如果系统的数据帧长度是1000位,那么链路的利用率是多少?

解:带宽延迟乘积是 (1*10^6)*(20*10^-3)=20000位

往返能发送20000位但系统只能发送1000位,因此链路的利用率 1000/20000=0.05 即5%,

根据上面例子可知,如果链路有高带宽或者长延迟的话使用Stop-and-Wait ARQ 是对链路能效的浪费。

流水线操作  pipelining

这个定义意思是:一项任务通常在前一项任务完成后开始

在停止等待ARQ协议中没有流水线操作,因为我们必须等待一个帧到达目的地并被确认号才能发送下一个帧

猜你喜欢

转载自blog.csdn.net/weixin_38134491/article/details/84672883
今日推荐