用于噪声信道的单工停等协议


用于噪声信道的单工停等协议是一种数据链路层协议,用于数据通信,并具有错误控制和流量控制机制。它通常被称为停等自动重传请求(停等ARQ)协议。它为停等协议添加了错误控制功能。

此协议考虑了接收器具有有限处理速度以及帧在传输过程中可能损坏的事实。如果数据帧到达接收器端的速率大于其处理速率,则可能会丢弃帧。此外,帧在通过网络信道传输时可能会损坏或完全丢失。因此,接收器会为其接收到的每个有效帧发送确认。发送方仅在其收到接收方发出的确认,确认其可用于进一步数据处理时,才发送下一个帧。否则,它将等待一段时间,然后重新发送帧。

设计

  • 发送方站点 - 在发送方站点,会在帧中添加一个字段以保存序列号。如果有数据可用,数据链路层会创建一个具有特定序列号的帧并发送它。然后,发送方等待确认到达一段时间。如果在规定时间内接收到具有该序列号的帧的肯定确认,则它会发送具有下一个序列号的帧。否则,它会重新发送同一帧。

  • 接收方站点 - 接收方也保留预期到达的帧的序列号。当帧到达时,接收方会处理它并检查它是否有效。如果它有效并且其序列号与预期帧的序列号匹配,则它会提取数据并将其传递给网络层。然后,它会将该帧的确认发送回发送方,以及其序列号。

用于噪声信道的单工停等协议的发送方站点算法

begin
   SeqNo = 0;     // Initialise sequence number of outbound frame
   canSend = True; //Allow the first frame to be sent
   while (true) //check repeatedly
   do
      Wait_For_Event(); //wait for availability of packet
      if ( Event(Request_For_Transfer) AND canSend) then
         Get_Data_From_Network_Layer();
         frame = Make_Frame(SeqNo);
         Store_Copy_Frame(frame.SeqNo);
         Send_Frame_To_Physical_Layer(frame.SeqNo);
         Start_Timer(frame.SeqNo);
         SeqNo = SeqNo + 1;
         canSend = False;
      else if ( Event(Acknowledgement_Arrival)) then
         Receive_ACK();
         if ( ACK_No = SeqNo ) then
            Stop_Timer (frame.SeqNo);
            canSend = True;
         end if
      else if ( Event( Timer > Max_time)) then
Resend_Frame_To_Physical_Layer(frame.SeqNo-1);
Start_Timer(frame.SeqNo-1);
end if
end while
end

用于噪声信道的单工停等协议的接收方站点算法

begin
RSeqNo = 0; // Initialise sequence number of expected frame
while (true) //check repeatedly
do
Wait_For_Event(); //wait for arrival of frame
if ( Event(Frame_Arrival) then
Receive_Frame_From_Physical_Layer();
if ( Corrupted ( frame.SeqNo )
doNothing();
else if ( frame.SeqNo = RSeqNo ) then
Extract_Data();
Deliver_Data_To_Network_Layer();
RSeqNo = RSeqNo + 1;
end if
Send_ACK(ACKframe[RSeqNo]);
end if
end while
end

流程图

以下流程图描述了通过用于噪声信道的单工停等ARQ协议进行通信:

更新于: 2020年6月30日

11K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始
广告