对于Go-Back-NARQ协议,如果4,5,6帧已经正常接受,接受方将向发送方发送ACK()

2022-03-25 科技 204阅读
你好,在Gobackn中,是要规定窗口的帧数的,不知道您的帧数是多少,反正发送一次ack就是对以前的所有帧进行确认,自己整理的Gobackn协议如下,希望对你有用
Gobackn传输协议
(1)初始化。
开网络层允许;
ack_expected=0(此时处于发送窗口的下沿);
next_frame_to_send=0,frame_expected=0(初始化正在发送的帧和期待的帧序号);
nbuffered=0(进行发送窗口大小初始化);
(2)等待事件发生(网络层准备好,帧到达,收到坏帧,超时)。
(3)如果事件为网络层准备好,则执行以下步骤。
从网络层接收一个分组,放入相应的缓冲区;
发送窗口大小加1;
使用缓冲区中的数据分组、next_frame_to_send和frame_expected构造帧,继续发送;
next_frame_to_send加1;
跳转(7);
(4)如果事件为帧到达,则从物理层接收一个帧,则执行以下步骤。
首先检查帧的seq域,若正是期待接收的帧(seq=frame_expected),将帧中携带的分组交给网络层,frame_expected加1;
然后检查帧的ack域,若ack落于发送窗口内,表明该序号及其之前所有序号的帧均已正确收到,因此终止这些帧的计时器,修改发送窗口大小及发送窗口下沿值将这些帧去掉,继续执行步骤(7);
(5)如果事件是收到坏帧,继续执行步骤(7)。
(6)如果事件是超时,即:next_frame_to_send=ack_expected,从发生超时的帧开始重发发送窗口内的所有帧,然后继续执行步骤(7)。
(7)若发送窗口大小小于所允许的最大值(MAX-SEQ),则可继续向网络层发送,否则则暂停继续向网络层发送,同时返回互步骤(2)等待。
注:在这个协议中有一个问题,没有考虑到当某个方向上没有数据要发送时,要对收到的帧进行单独确认。在收到期待的帧后应该启动一个ACK超时计时器,当发生超时事件时,判断哪个计时器超时,若是ACK计时器超时,应该单独发送一个确认帧。而当发送了一个数据包时,应将被捎带确认的帧的ACK计时器终止。另外,在使用GO-BACK-N协议时,发送窗口的大小不能超过2n-1。

Go-Back-NARQ的主要缺陷是,当一个数据块被检验有误时其后的N-1个数据块都会被抛弃,即使这N-1个数据块中有无误传输的数据块。因此,这些无误传输的数据块还需要被重传。这是一种对有用数据块的浪费,当较大的时延周期被采用时,系统的吞吐量会急剧降低。例如,在卫星通信系统中,假设每次传输的数据块长度为1000bit,传输速率为1Mbps,时延周期为700ms,即N=700。当有一数据块被检验有误时,700个数据块就被抛掉。如果信道比较恶劣,数据传输被检验有误比较频繁,系统吞吐量会迅速下降。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com