当前位置: 首页 > 编程笔记 >

Go-Back-N ARQ

盖马鲁
2023-03-14
本文向大家介绍Go-Back-N ARQ,包括了Go-Back-N ARQ的使用技巧和注意事项,需要的朋友参考一下

Go-Back-N自动重复请求(Go-Back-N ARQ)是一种数据链路层协议,它使用滑动窗口html" target="_blank">方法来可靠且顺序地传递数据帧。在滑动窗口协议的情况下,发送窗口大小为N,接收窗口大小为1。

工作原则

Go – Back – N ARQ使用协议流水线的概念,即在接收到第一个帧的确认之前发送多个帧。帧被顺序编号,并且帧数量有限。可以发送的最大帧数取决于发送窗口的大小。如果在约定的时间段内未收到帧的确认,则将从该帧开始的所有帧重新发送。

发送窗口的大小确定出站帧的序列号。如果帧的序列号是n位字段,则可以分配的序列号范围是0到2 n -1。因此,发送窗口的大小为2 n -1。因此,为了适应2 n -1的发送窗口大小,选择了一个n位序列号。

序列号编号为模n。例如,如果发送窗口大小为4,则序列号将为0、1、2、3、0、1、2、3、0、1,依此类推。序列号中的位数为2,以生成二进制序列00、01、10、11。

接收窗口的大小为1。

Go-Back-N协议的发件人站点算法

begin
   frame s; //s denotes frame to be sent
   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
         //检查窗口是否已满
         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();
         if ( AckNo > SeqFirst && AckNo < SeqN ) then
            while ( SeqFirst <= AckNo )
               Remove_copy_frame(s.seq(SeqFirst));
               SeqFirst = SeqFirst + 1;
         end while
         Stop_Timer(s);
      end if
   end if
   //如果未收到确认,则重新发送所有帧
   if ( Event(Time_Out)) then
      TempSeq = SeqFirst;
      while ( TempSeq < SeqN )
         t = Retrieve_Copy_Frame(s.seq(SeqFirst));
         Send_Frame(t);
         Start_Timer(t);
         TempSeq = TempSeq + 1;
      end while
   end if
end

Go-Back-N协议的接收站点算法

Begin
   frame f;
   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 ( f.SeqNo )
            doNothing();
         else if ( f.SeqNo = RSeqNo ) then
            Extract_Data();
            Deliver_Data_To_Network_Layer();
            RSeqNo = RSeqNo + 1;
            Send_ACK(RSeqNo);
         end if
      end if
   end while
end
 类似资料:
  • 本文向大家介绍使用Go-Back-N的协议,包括了使用Go-Back-N的协议的使用技巧和注意事项,需要的朋友参考一下 Go-Back-N 协议,也称为 Go-Back-N 自动重复请求协议,是一种数据链路层协议,它使用滑动窗口方法实现数据帧的可靠和顺序传递。这是一个滑动窗口协议的情况下,必须发送窗口大小 n 和接收窗口大小为1。 工作原理 Go – Back – N ARQ提供发送多个帧,然后再

  • taiga 是一个项目管理平台,它为做敏捷开发的程序员,设计师及项目管理员提供了界面漂亮且功能强大的工具。taiga 可以方便地任你定制所有项目,操作直观简单,界面漂亮,可个性地定制每个项目。 taiga-back 是用来管理 scrum 项目的 web应用程序,它采用了 Django 和 AngularJS 框架 (后端代码)。

  • Node API boilerplate by nave.rs A boilerplate for building RESTful APIs using Node.js, PostgreSQL, koa, knex, objection. Getting started Installation Install Node.JS LTS version Install PostgreSQL Clo

  • 当你从一个页面切换到另一个页面时,app.js将会有一段你曾经拥有的页面的历史,能够导航到它们。返回是应用程序的概念上的反转,加载在导航栏中返回到前一个页面加载(当导航完成时破坏当前页面)。 // load home // load page2 App.back(function () { // back to home // page2's appDestroy event has be

  • 想要备份你的 Linux 系统吗?或许 Back In Time 就是为你而准备的工具。Back In Time 使用起来很简单,它从 FlyBack 和 TimeVault 身上获得了开发灵感,支持 Snapshot(快照式)备份,能够设定备份计划,让你在指定的时间完成系统备份,并提供有 GNOME 和 KDE 4 界面。 Back In Time 为你准备了 Ubuntu 和 Fedora 源

  • 实现新视图弹出时,之前的视图变淡、缩小(即后退为背景视图)的动画效果。 [Code4App.com]