网规知识点:小议RR、REJ的作用

网络工程师真题详解》中讲到:和停止等待相比,出现差错的可能性由ACK损坏变成分别的RR损坏和RE损坏。当接收方检测到一个帧有错误,则放弃该数据帧,并不采取其他行为,如果此时发送方继续发送数据帧,那么接收方就检测到数据帧的帧号次序有错误,发送REJ帧。发送方收到REJ后必须从REJ所指示的帧号后发送所有的数据帧。如果此时发送方没有再继续发送数据。接收方不返回RR,也不返回REJ。当发送超时后会发送RR帧,这个RR帧 中某位被置1,提示接收方必须响应一个RR帧,接收方则发送一个RR帧,其中包括接收方希望收到的下一个数据的帧编号,接收方会把错误的帧号回入REJ。

其中RR、REJ到底是什么?他们又扮演什么角色呢?回退N帧ARQ到底什么时候回用到它们呢?我翻阅多种教材,谢希仁老师的《计算机网络》、潘爱民老师的《计算机网络》、王达老师的《网络工程师必读》等书,从而得到一些有用的结果。

追溯起源,就不得不从HDLC帧结构说起。HDLC的帧可以分为信息帧、监督帧、无编号帧。

HDLC的控制字段有8位。如果第1位为“0”时,表示该帧为信息帧;第1、2位为“10”时,表示该帧为监控帧;第1、2位为“11”时,表示该帧为无编号帧。如图1所示。

                      图1 HDLC帧结构及其控制字段格式

(1)信息帧(Information Frame)用于传送有效信息或数据,通常简称为I帧。

(2)监控帧(Supervisor Frame)用于差错控制和流量控制,通常称为S帧。监控帧以控制字段第0、1位为“10”来标志。

(3)无编号帧U(Unnumbered Frame)用控制字段第1、2位为“11”来标识。
本文涉及的RR、REJ就是监控帧的四种编码中的两种。监控帧控制字段的第3、4位为监控帧类型编码,共有4种不同的编码,如表1所示。

                                                     表1  监控帧的功能及N(R)字段含义

帧类型Type字段功能描述N(R)字段的含义
RR00接收就绪,请求发送下一帧期望接收的下一个I帧的序号
REJ01请求重新发送序号为N(R)的所有帧重发帧的开始序号
RNR10请求暂停发送数据帧N(R)之前各帧已正确接收
SREJ11请求重发指定帧重发帧的顺序号

回退N帧ARQ出现有损帧的情况下,就会使用这个两个帧。具体情况如下:

(1)接收方检测到第i帧出错

这属于帧损坏。该情况下,接收方发送 REJ(i),当发送方接受到该REJ时,发送方重传第i帧以及第i帧后续的所有帧。

(2)第i帧丢失

这属于帧丢失。当出现第i帧丢失的情况,并且发送方发送第 i+1帧之后,当接收方收到第 i+1帧之后,就出现了失序的情况。这个时候,接收方发送 REJ(i),发送方回退到第 i 帧并重传。

(3)第 i 帧丢失,并在此之后无后续帧

这属于帧丢失。接收方没有收到第i帧,并且由于没有后续帧,因此既不回送RR也不回送REJ。

当发送方一直没有收到回应而超时的时候,发送方发送P比特置1的RR帧。这类RR帧就是要求接收方发送含有其期望第 i 帧的RR,即RR(i)。

发送方收到该RR(i)后,然后重传第 i 帧。

(4)接收方收到第 i 帧并发送RR (i+1) ,但该RR丢失

这属于RR帧丢失的情况。由于确认是累积的, 发送方在第 i 帧确认超时之前可能收到下一个确认RR(i+n)。这类情况属于正常的接收。

如果没有累积确认,而发送方又超时,则发送P比特置1的RR帧。

(5)REJ丢失

由于REJ帧和RR帧的相似,则该情况的处理方式与(3)相同。


版权声明:本文为shiyou2010原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。