一位滑动窗口协议
滑动窗口协议是数据链路层协议,用于可靠且顺序地交付数据帧。滑动窗口也用于传输控制协议。在这些协议中,发送方有一个称为发送窗口的缓冲区,接收方有一个称为接收窗口的缓冲区。
在一比特滑动窗口协议中,窗口大小为1。因此,发送方发送一个帧,等待其确认,然后发送下一个帧。因此,它使用了停止等待协议的概念。此协议提供全双工通信。因此,确认信息通过捎带附加到要发送的下一个数据帧中。
工作原理
要传输的数据帧还具有一个确认字段,即 *ack* 字段,其长度为几位。*ack* 字段包含最后接收到的无错误帧的序号。如果此序号与要发送的帧的序号匹配,则可以推断没有错误并且帧已传输。否则,可以推断帧中存在错误,并且重新传输前一个帧。
由于这是一个双向协议,因此相同的算法适用于两个通信方。
一位滑动窗口协议的算法
begin frame s, r; //s and r denotes frames to be sent and received SeqNo = 0; // Initialise sequence number of outbound frame RSeqNo = 0; // Initialise sequence number of expected frame 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(); s = Make_Frame(SeqNo); Store_Copy_Frame(s); Start_Timer(s); SeqNo = SeqNo + 1; end if; Wait_For_Event(); //wait for arrival of frame if ( Event(Frame_Arrival) then r = Receive_Frame_From_Physical_Layer(); if ( r.SeqNo = RSeqNo ) then Extract_Data(r); Deliver_Data_To_Network_Layer(r); Stop_Timer(r); RSeqNo = RSeqNo + 1; end if end if s.ack = r.SeqNo; Send_Frame_To_Physical_Layer(s); Start_Timer(s); SeqNo = SeqNo + 1; end while end
示例
下图描述了一个序列号为 0、1、2、3、0、1、2 等等的场景。它描述了帧传输过程中发送站和接收站中的滑动窗口。
广告