端到端--流量控制、可靠传输和滑动窗口机制学习资料整合

1、王道书上的:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.伪代码:

2.1后退N帧协议伪代码:

来源:https://en.wikipedia.org/wiki/Go-Back-N_ARQ

These examples assume an infinite number of sequence and request numbers.
这些例子假定帧序列和请求号的数量是无限的。

N  := window size  //窗口大小
Rn := request number //接收方要求的接收的帧的序号(王道上说期待的序号 expectedSequentNumber
Sn := sequence number //发送方在一个发送周期内正在发送的帧的序号
Sb := sequence base  //发送方窗口的基
Sm := sequence max  //帧序列序号最大值


function receiver is   //接收方程序
    Rn := 0
    Do the following forever: // while(true)
        if the packet received = Rn and the packet is error free then //error free没错
            Accept the packet and send it to a higher layer //接收个上一层
            Rn := Rn + 1
        else
            Refuse packet
        Send a Request for Rn


function sender is  //发送方程序
    Sb := 0
    Sm := N + 1
    Repeat the following steps forever: // while(true)
        if you receive a request number where Rn > Sb then
            Sm := (Sm − Sb) + Rn
            Sb := Rn
        if no packet is in transmission then
            Transmit a packet where Sb ≤ Sn ≤ Sm.  
            Packets are transmitted in order.

2.2 选择性重复协议伪代码:

来源:https://www.tutorialspoint.com/a-protocol-using-selective-repeat

在这里插入图片描述

选择性重复协议的发件人站点算法

begin
   frame s; //s denotes frame to be sent //s 指向要发送的帧
   frame t; //t is temporary frame
   S_window = power(2,m-1); //Assign maximum window size
   SeqFirst = 0; // Sequence number of first frame in window
   SeqN = 0; // Sequence number of Nth frame window
   while (true) //check repeatedly
      do
         Wait_For_Event(); //wait for availability of packet
         if ( Event(Request_For_Transfer)) then
            //check if window is full
            if (SeqN–SeqFirst >= S_window) then
               doNothing();
            end if;
            Get_Data_From_Network_Layer();
            s = Make_Frame();
            s.seq = SeqN;
            Store_Copy_Frame(s);
            Send_Frame(s);
            Start_Timer(s);
            SeqN = SeqN + 1;
         end if;
         if ( Event(Frame_Arrival) then
            r = Receive_Acknowledgement();
            //Resend frame whose sequence number is with ACK
            if ( r.type = NAK) then
            {
	             if ( NAK_No > SeqFirst && NAK_No < SeqN ) then
	                 Retransmit( s.seq(NAK_No));
	                 Start_Timer(s);
	              end if
             }
                  //Remove frames from sending window with positive ACK
           	else if ( r.type = ACK ) then
               Remove_Frame(s.seq(SeqFirst));
               Stop_Timer(s);
               SeqFirst = SeqFirst + 1;
            end if
         end if
         // Resend frame if acknowledgement haven’t been received
         if ( Event(Time_Out)) then
            Start_Timer(s);
            Retransmit_Frame(s);
         end if
end

选择性重复协议的接收者站点算法

Begin
   frame f;
   
   RSeqNo = 0; // Initialise sequence number of expected frame //接收窗口最小待接收帧的序号
   NAKsent = false;
   ACK = false;
   For each slot in receive_window
   Mark(slot)=false;
   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 ( f.SeqNo ) AND NAKsent = false) then
               SendNAK(f.SeqNo);
               NAKsent = true;
            end if
            if ( f.SeqNo != RSeqNo AND NAKsent = false ) then
               SendNAK(f.SeqNo);
               NAKsent = true;
               if ( f.SeqNo is in receive_window ) then
                  if ( Mark(RSeqNo) = false ) then
                     Store_frame(f.SeqNo);
                     Mark(RSeqNo) = true;
                  end if
               end if
               else
               while ( Mark(RSeqNo))
                  Extract_Data(RSeqNo);
                  Deliver_Data_To_Network_Layer();
                  RSeqNo = RSeqNo + 1;
                  Send_ACK(RSeqNo);
               end while
            end if
         end if
   end while
end

在这里插入图片描述

3 其他资料:

https://www.bilibili.com/video/av70228743?p=25
https://www.geeksforgeeks.org/sliding-window-protocol-set-1/
https://www.geeksforgeeks.org/sliding-window-protocol-set-2-receiver-side/
https://www.geeksforgeeks.org/sliding-window-protocol-set-3-selective-repeat/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

动画网站:这个网站的动画模拟的帧都连续收到的,而且GNB使用的对立确认而不是累计确认。

在这里插入图片描述
https://www.ccs-labs.org/teaching/rn/animations/gbn_sr/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值