Go-Back-N 协议,也称为 Go-Back-N 自动重复请求协议,是一种数据链路层协议,它使用滑动窗口方法实现数据帧的可靠和顺序传递。这是一个滑动窗口协议的情况下,必须发送窗口大小 n 和接收窗口大小为1。
Go – Back – N ARQ提供发送多个帧,然后再接收第一个帧的确认。帧被顺序编号,并且帧数量有限。可以发送的最大帧数取决于发送窗口的大小。如果在约定的时间段内未收到帧的确认,则将从该帧开始的所有帧重新发送。
发送窗口的大小确定出站帧的序列号。如果帧的序列号是n位字段,则可以分配的序列号范围是0到2 n -1。因此,发送窗口的大小为2 n -1。因此,为了适应2 n -1的发送窗口大小,选择了一个n位序列号。
序列号被编号为modulo-n。例如,如果发送窗口大小为4,那么序列号将为0、1、2、3、0、1、2、3、0、1,依此类推。序列号中的位数为2,以生成二进制序列00、01、10、11。
接收窗口的大小为1。
begin frame s; //s表示要发送的帧 frame t; //t是临时帧 S_window = power(2,m) – 1; //指定最大窗口大小 SeqFirst = 0; // 窗口中第一帧的序列号 SeqN = 0; //第N帧窗口的序列号 while (true) //重复检查 do Wait_For_Event(); //等待数据包可用 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
Begin frame f; RSeqNo = 0; //初始化预期帧的序列号 while (true) //重复检查 do Wait_For_Event(); //等待帧到达 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 ARQ,包括了Go-Back-N ARQ的使用技巧和注意事项,需要的朋友参考一下 Go-Back-N自动重复请求(Go-Back-N ARQ)是一种数据链路层协议,它使用滑动窗口方法来可靠且顺序地传递数据帧。在滑动窗口协议的情况下,发送窗口大小为N,接收窗口大小为1。 工作原则 Go – Back – N ARQ使用协议流水线的概念,即在接收到第一个帧的确认之前发
在上面的例子中,我们演示了如何通过使用mutex来在多个协程之间共享状态。另外一种方法是使用协程内置的同步机制来实现。这种基于通道的方法和Go的通过消息共享内存,保证每份数据为单独的协程所有的理念是一致的。 package main import ( "fmt" "math/rand" "sync/atomic" "time" ) // 在这个例子中,将有一个单独的
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
我编写了一个服务器(Go)-客户端(Java)程序,并使用protobuf进行通信。定义一个proto文件并在服务器和客户端之间共享。在服务器端: 将共享的proto文件编译为go by Protoc 按proto.marshal序列化对象 将其发送给对其服务提出请求的客户端 在客户端: 通过protoc将共享的proto文件编译成Java 通过HTTP传输获取字节 将字节反序列化为对象。 这里有
成熟稳定的商业软件,开源但不完全免费。个人及非盈利组织可以随意使用; 商业用途只需要支付少量的费用并可以获得我们的技术支持服务。 感谢您选择 Highcharts 系列图表软件,Highcharts 系列软件包含 Highcharts JS,Highstock JS,Highmaps JS 共三款软件,均为纯 JavaScript 编写的 HTML5 图表库,全部源码开放。 1、非商用免费授权 以