用于噪声信道的单工停等协议
用于噪声信道的单工停等协议是一种数据链路层协议,用于数据通信,并具有错误控制和流量控制机制。它通常被称为停等自动重传请求(停等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协议进行通信:
广告