精华内容
下载资源
问答
  • 数据链路层的差错控制ARQ

    千次阅读 2018-01-09 15:27:13
     差错控制链路层一个非常重要的功能,链路层需要在不太可靠的物理层来尽量实现可靠的链路层传输,靠的就是差错控制。所谓差错控制,就是对传输的数据信息进行错误检测,并加以恰当的处理。这其中就包含了多个方面...

            本文重点介绍了差错控制以及自动重发检错ARQ。

            差错控制时链路层一个非常重要的功能,链路层需要在不太可靠的物理层来尽量实现可靠的链路层传输,靠的就是差错控制。所谓差错控制,就是对传输的数据信息进行错误检测,并加以恰当的处理。这其中就包含了多个方面,比如说正确接收数据,检错能力和纠错能力等等。检错能力是指接收方通过各种方法能发现数据中的错误并且通知发送方进行重传该信息,纠错是指当发现错误地时候直接能够改正,而不是通过反馈给发送方进行重发。

            传输出错分下面几种情况:数据丢失,数据出错,以及确认的丢失和损坏等等,如下图所示:



            那么和上面错误对应的就是差错控制的功能:1.肯定确认,这个是最基本的情况,只要接收端认为自己收到数据是对的,就发送一个ACK告知发送方。2.超时重发 这个对应的是发送数据和确认丢失的情况。3.否定确认 这个用于数据错误之后的重发   通过以上情况考虑,设计出来的协议就是差错控制的基本方法,也就是大名鼎鼎的ARQ(自动重发检测)。

            那么ARQ的原理是:发送方根据被传送的数据信息,按一定规律加入一些校验码位,使数据信息和校验码有某种相关性,然后一起发送到接收方。接收方根据数据信息与校验码之间的相关规律进行检验,从而确定接收的信息是否出错,并通过反馈信息把检测结果反馈给发送方。接收方正是通过加入的校验码来发现是不是有错误,从而具备检错能力。

            校验码有很多种,比如说汉明校验码,以及CRC循环校验码,网上这类的资料很多,所以在这里就不再赘述了。校验码是检测出帧有没有错误,而整个ARQ不仅包含了检错,还有错误处理等一些列过程,这个不能混淆了。

            ARQ一共分成三种,停等式ARQ,回退n-ARQ以及选择重传ARQ。

            1.停等式ARQ:发送方仅仅收到当前帧的肯定确认之后才能发送下一帧。在正常情况下,停等式ARQ只需要给帧编号为0和1即可,接收方接收到F0之后,如果无误则发送ACK 1表示准备好接收F1了,如果接收到F1且校验无误则发送ACK0表示准备好接收F0了。这是无错的情况,有错误地情况如下:

            ①数据帧丢失:数据帧丢失,那么发送方发送之后接受方收不到数据,自然也不会有回应。发送方发送之后就启动计时器,当计时器超时,那么它就要重发。所以对于停等式协议,他一定要有缓存区存放自己发送的消息。

            ②数据帧错误:假设F0错了,那么接受方通过CRC校验发现数据帧有误,那么就丢弃该帧。发送方超时之后,就重新发送这一帧。


            ③确认帧丢失/损坏:发送方如果没有收到确认帧,超时之后同样再次发送刚才发送的帧,因为他会认为自己的帧丢失了。损坏的处理方式相同,因为发送方不知道接收方是不是正确接收了,所以仍然重发。如下图:


            停等式ARQ,就像我之前文章分析的停等式流量控制,优点是操作简单,但是存在的问题是效率低。因为任何时候都只能有一个帧再信道发送,所以信道存在大量空闲,在当前网络情况下,效率那么低下是不可以忍受的,所以同样也借用了滑动窗,也就是回退nARQ和选择重传ARQ。

            既然一次只发送一个,那么不用序号行不行?答案是不行。我们可以考虑这样一种情况,0帧成功发送,成功接收,发送方发送了ACK1.但是这个肯定确认ACK1却丢失了,发送方超时再次发送了0帧,但是接收方因为没有序号,只能认为这个是下一个帧,即帧1,因为他不知道自己确认帧丢了导致发送方重发,所以就造成错误了。

            2.回退nARQ

            发送方连续发出N个帧,接收方以流水线方式按照序号顺序接收各个帧,并进行差错检测。一旦某个帧有错,则丢弃该帧和它之后所收到的所有帧。这里要注意的是,接收方只能按照序号顺序接收帧,这与之后的选择重传ARQ不太一样,选择重传ARQ的性质就决定了自己一定有能力接收乱序的帧,这个一会再说。回退nARQ的原理图如下所示:


            他对于不同情况的处理如下:

            ①对于正确的数据帧,假设前i-1帧都对了,接收方发送RRi表示前i-1帧都对了,准备接收第i帧和之后的帧。

            ②数据帧损坏:接收方发回REJi,表示第i帧损坏,要求重传i帧以及之后的帧。发送方收到REJi,回退到第i帧,重新发送这一帧和之后的帧。

            ③数据帧丢失:(1)只有i帧丢失,i+1之后都没丢:那么接受方发现顺序错误了(回退nARQ只能按顺序接收),那么返回REJi,要求重传第i帧。

                                      (2)i帧是最后的帧:那么接受方首先超时,发回一个RR帧,要求重发第i帧。

            ④肯定确认帧丢失/损坏:假设i-1帧收到之后,收方发送RRi要求发第i帧,结果这个RRi丢失或者损坏了,那么发方会超时,发方会向收方发送一个RR表示询问,确认是不是已经收到了。如果接收方接到RR那么就会重发RRi。但是如果发方的RR也丢失了或者损坏,收方收不到,那么发方超时,发送方再次发送RR,循环到一定次数,就重启整个发送过程。

            ⑤REJ否定确认损坏:和④相同,把RRi换成REJI就可以了。

            回退n协议特点是:接收方只存放一帧大小的缓冲区(可以理解为接收窗的窗口大小为1;并且发送方必须有能存放着n个帧大小的缓存,以便重发。它的优点是消除了停等协议ARQ的等待应答时间,效率变高。但是它的缺点非常明显:即使只有某一帧出错,但是这一帧和之后的帧全都需要重发,尤其是假设第一帧出错了,后面n-1帧全部“连坐”。这也会造成低效率与信道浪费,所以解决办法就是选择重传ARQ.

            3. 选择重传ARQ:一次连续发送N个帧,当接收方发现其中有错帧时就给发送方反馈要求重发帧的序号,其余(N-1)个正确帧被接收方存储起来。它要求接收方必须有能力缓存n个帧,并且它可以接收乱序的帧。它的优点就是不需要重传其他的帧,信道利用率高,但是缺点就是实现复杂,要求接收方有足够的空间。我们看这张图:



            发送方按照顺序发送帧序列,对于没有错的帧,接收端反馈ACKi。那么对于有错误的帧,假设第j帧出错,那么收端反馈NAKj表示第j帧出错,那么发端就只是重发第j帧。收方于是也照常接收其他帧,当收到其他帧之后可能又收到第j帧,这时他意识到这时重传的,所以他就接收了这个帧,并且按照正确的顺序排好了。

            从上面三种ARQ的原理可以知道,越精确,越复杂。想设计出一个协议,需要全方面考虑到各种可能出现的情况,确保万无一失才行啊。

            至于怎么看出来一个帧有没有错,目前最常见的方法是CRC循环校验码,这部分就不说了,网上资料很多。但是我觉得我这篇文章可以和我的上一篇文章一起来看,方便理解,就是《数据链路层的流量控制》那一篇,因为两者是相通的,都涉及到停等,滑动窗等思想。


    展开全文
  • 数据链路层在网络层提供服务的...对网络层而言,数据链路层的基本任务是将源机器中来自网络层的数据传输到目标机器的网络层。数据链路层通常可为网络层提供如下服务: 1.1、无确认的无连接服务 源机器发送数据帧时...

    目录

    1、为网络层提供服务

    1.1、无确认的无连接服务

    1.2、有确认的无连接服务

    1.3、有确认的面向连接服务

    2、链路管理

    3、帧定界、帧同步与透明传输

    4、流量控制


    数据链路层在网络层提供服务的基础上向网络层提供服务,其主要作用是在加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无错差的数据链路,使之对网络层表现为一条无差错的链路。

    1、为网络层提供服务

    对网络层而言,数据链路层的基本任务是将源机器中来自网络层的数据传输到目标机器的网络层。数据链路层通常可为网络层提供如下服务:

    1.1、无确认的无连接服务

    源机器发送数据帧时不需要先建立链路连接,目的机器收到数据帧时不需要发挥确定。对丢失的帧,数据链路层不负责重发而交给上层处理。适用于实时通信或误码率较低的通信信道,比如以太网。

    1.2、有确认的无连接服务

    源机器发送数据帧时不需要先建立链路连接,但目的机器收到帧时必须发回确认。源机器在所规定的时间内未收到确定信号时,就重传丢失的帧,以提高传输的可靠性。该服务适用于误码率较高的通信信道,如无线通信。

    1.3、有确认的面向连接服务

    帧传输过程分为三个阶段:减六数据链路、传输帧、释放数据链路。目的机器对收到的每一帧都要给出确认,源机器收到确认后才能发送下一帧,因而该服务的可靠性最高。该服务适用于通信要求(可靠性、实时性)较高的场合。

    注: 有连接一定要有确认,即不存在无确认的面向连接服务

    2、链路管理

    数据链路层连接的建立、维持和释放过程称为链路管理,它主要用于面向连接的服务。链路两端的结点要进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息对帧序号初始化,然后才能建立连接,在传输过程中则要能维持连接,而在传输完毕后要释放该连接。

    在多个站点共享同一物理信道的情况下(例如在局域网中)如何在要求通信的站点间分配和管理信道也属于数据链路层管理的范畴。

    3、帧定界、帧同步与透明传输

    两个工作站之间传输信息时,必须将网络层的分组封装成帧,以帧的格式进行传送。将一段数据的前后分别添加首部和尾部,就构成了帧。首部和尾部含有很多控制信息,他们的一个重要作用是确定帧的界限,即帧定界。而帧同步指的是接收方应能从接收到的二进制比特流中区分出帧的起始和中止。

    如在HDLC通信规程中,用表示位F(01111110)来标识帧的开始和结束。通信过程中,检测到帧标识位F即认为是帧的开始,然后一旦检测到帧标识位F即表示帧的结束。HDLC标准帧格式如图16.1所示

                                      图16.1、HDLC标准帧格式

    如果在数据中恰好出现于帧定界符相同的比特组合(会误认为”传输结束“而丢弃后面的数据),那么就要采取有效的措施解决这个问题,即透明传输。更确切地说,透明传输就是不管所传数据是什么样的比特组合,都应当能在链路上传送。

    4、流量控制

    由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接收能力的现象,如果不适当限制发送方的发送速率(即链路上的信息流量),前面来不及接收到额帧会被后面不断发送来的帧“淹没”,造成帧丢失而出错。因此,流量控制实际上就是限制发送方对的数据流量,使其发送速率不超过接收方的接收能力。

    这个过程需要某种反馈机制使发送方能够知道接收方是否能跟上自己,即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到反馈信息后继续发送

    流量控制并不是数据链路层特有的功能,许多高层协议中也提供此功能,只不过控制的对象不同而已。对数据链路层而言,控制的是相邻结点之间数据链路上的流量,而对运输层而言,控制的则是源端到目的端之间的流量

                                                     图16.2  数据链路层的流量控制

     

     

    人,总是要有一点精神的,不是吗

     

     

     

     

     

     

     

    展开全文
  • BLE 链路层(LL)的数据结构

    千次阅读 2021-12-16 10:53:04
    链路层上传输的数据格式如下图所示: 广播报文和数据报文都包含 Preamble(前导码), AccessAddress(接入地址),PDU(数据),CRC。其中Constant Tone Extension是可选的。 前导码 接入地址 PDU Header Length MIC...

    一 链路层的数据结构

    在链路层上传输的数据格式如下图所示:
    在这里插入图片描述
    广播报文和数据报文都包含 Preamble(前导码), AccessAddress(接入地址),PDU(数据),CRC。其中Constant Tone Extension是可选的。

    • 前导码
    • 接入地址
    • PDU
      • Header
      • Length
      • payload
      • MIC(可选)
    • CRC
    • Constant Tone Extension(可选)

    1 前导码

    报文最开始的8bit是01010101(0x55)或者10101010(0xAA)。这是很简单的交替序列。接收机可以用它来配置自动增益控制,以及确定 “0”、"1"比特所使用的的频率。

    这段序列之所以非常重要,是因为芯片必须能够应对输入信号强度的可能范围。接收机需要应付 -10dBm到-90dBm的信号强度,也就是80dB的动态范围。从接收机的角度讲,也就是1pW到0.1pW的能量。自动增益控制器必须检测出输入信号的能量等级,并调整增益,使得信号刚好处于接收机能够轻容工作的范围之中。

    2M PHY的前导码为2个字节

    2 接入地址(Access Address)

    接入地址的第一个比特决定了前导是01010101还是10101010。如果接入地址的第一个比特为0,则使用01010101序列;如果是1则使用10101010序列。这保证了任一报文的前9个比特都是交替的,即要么为101010101要么为010101010。

    LL层使用接入地址来区分当前发送的数据是广播包还是数据包,广播包接入地址固定为0x8E89BED6,数据包使用是在连接时生成的接入地址。

    • 连接时主设备分配一个32位的随机数并发送给从设备,这就是接入地址。
    • 接入地址被用来表示一个连接,在连接期间保持不变。
    • 对于同一个从设备,断开从新连接接入地址也会重新生成。

    3 数据(PDU)

    根据使用的通道不同可以分为广播报文数据报文。广播报文在广播通道上传输(37, 38, 39), 数据报文在数据通道上传输(0到36)。

    二 广播通道上的PDU

    广播通道上的PDU格式:
    在这里插入图片描述

    • 两个字节的header
    • 1到255字节数据

    广播通道上的Header格式
    在这里插入图片描述

    • PDU Type(4bit) 广播报文类型
    • RFU(1bit) 未使用
    • ChSel(1bit) 未使用
    • TxAdd(1bit) 发送地址类型
      • 0: public地址
      • 1: 随机地址
        • 静态随机地址,地址最高两位为11
        • 私有随机地址
          • 不可解析私有随机地址,地址的最高两位为00
          • 可解析私有随机地址,地址的最高两位为1(最高位)0(次高位)
    • RxAdd(1bit) 接收地址类型,规则和TxAdd一样
    • length(8bit),长度,取值范围1到255

    1 广播报文的类型

    在这里插入图片描述

    • ADV_IND,通用广播,外设发出的一般称为通用广播,广播中包含mac地址设备名字等信息。
    • ADV_DERECT_IND,定向广播,某个外设在工作的时候就希望某个主设备来连接它,就可以向这个中央设备发起一个定向广播。
    • ADV_NONCONN_IND,不可连接的广播,比如货架上的广告机,会不断的向外发送广播信息。
    • ADV_SCAN_IND,可发现广播,包含了比通用广播更加丰富的信息。
    • SCAN_REQ,扫描请求,当中央设备发现通用广播中包含的信息并不全,这个时候主设备可以发一个扫描请求。
    • SCAN_RSP,外设响应主设备的扫描请求,返回给中央设备更多的信息。
    • CONNECT_REQ,连接请求,当主设备得到足够的信息之后就可以发送一个连接请求。来建立连接。
    • ADV_EXT_IND, 通用扩展广播
    • AUX 开头的广播类型和ADV_EXT_IND是蓝牙5.0新引入的,暂且不表。

    2 广播通道上的报文

    2.1 ADV_IND 通用广播

    在这里插入图片描述

    • AdvA, 6个字节广播者的mac地址
    • 最多31个字节的广播数据, AdvData来自上层

    通用广播是用途最广的广播方式。进行通用广播的设备能够被扫描设备扫描到,或者在接收到连接请求时作为从设备进入连接态。

    2.2 ADV_DERECT_IND 定向广播

    在这里插入图片描述

    • AdvA, 6字节的广播者地址
    • TargetA,接收广播者的地址

    有时候,设备间需要快速建立连接。如果从设备想这么做,就需要进行广播。定向广播事件就是为了尽可能快的建立连接。这种报文只能包含两个地址,广播者和发起者的地址。发起设备收到发给自己的定向广播报文后,可以立即发送连接请求作为回应。
    定向广播有特殊的时序要求。完整的广播事件必须每3.75ms重发一次。这一要求使得扫描设备只需要扫描3.75ms便可收到定向广播设备的消息。定向广播不可以持续1.28s以上的时间。
    当使用定向广播时,设备不能被主动发现。

    该报文不包含任何上层数据

    2.3 ADV_NONCONN_IND 不可连接的广播

    在这里插入图片描述

    • AdvA, 6个字节广播者的mac地址
    • 最多31个字节的广播数据, AdvData来自上层

    不想被连接的设备使用不可连接广播。这种广播的典型应用包括设备只想广播数据,而不想被扫描或者连接。不可连接广播不会进入连接态,只能在就绪态和广播态之间进行切换。

    2.4 ADV_SCAN_IND 可发现广播

    在这里插入图片描述

    • AdvA, 6个字节广播者的mac地址
    • 最多31个字节的广播数据, AdvData来自上层

    可发现广播允许其他设备扫描该设备,但是不能进入连接态。这意味着该设备可以被发现,既可以广播数据,又可以响应扫描,但不能建立连接。这是一种适用于广播数据的广播形式,动态数据可以包含在广播数据中,而静态数据可以包含于扫描响应数据中。

    2.5 SCAN_REQ 扫描请求

    在这里插入图片描述

    • ScanA, 请求者的地址
    • AdvA, 广播者地址

    2.6 SCAN_RSP 扫描响应

    在这里插入图片描述

    • AdvA, 广播者的地址
    • ScanRspData, 来自上层的扫描数据

    2.7 CONNECT_REQ 连接请求

    连接过程
    在这里插入图片描述

    连接请求的数据包
    在这里插入图片描述
    在这里插入图片描述

    • InitA: 发起连接者的mac地址,BLE的MAC地址,随机地址的最高两位应该为11b
    • AdvA: 广播者的地址mac地址
    • AA: 接入地址。LL层使用接入地址来区分当前发送的数据是广播包还是数据包,广播包接入地址固定为0x8E89BED6,数据包使用就是该值。
    • CRCInit(CRC initialization value): CRC初始值,主设备提供的一个随机数,防止多个连接AA相同。
    • WinSize(transmitWindowSize): 发送窗口大小, 单位是1.25ms
    • WinOffset(transmitWindowOffset): 发送窗口偏移, 单位是1.25ms
    • Interval(connInterval): 连接间隔 单位是1.25ms
    • Latency(connSlaveLatency): 从设备延时,表示从设备可以跳过多少个连接事件。
    • Timeout(connSupervisionTimeout): 监控超时。单位是ms
    • ChM(Channel Map): 信道图,表示当前环境中哪一个信道可用,每一个bit表示一个信道1表示可用,0表示不可用。比如ff ff ff ff 1f(0x1fffffffff), 二进制为0001111111111111111111111111111111111111b
    • Hop(hopIncrement): 跳频算法的hop值,比如110b, 6
    • masterSCA: 00100b, 休眠时钟精度, 151 ppm to 250 ppm

    三 数据通道上的报文

    数据通道上的报文格式:
    在这里插入图片描述
    数据通道上的Header格式:
    在这里插入图片描述

    在这里插入图片描述

    • LLID(2bit),逻辑链路标识符,用来判断数据报文属于下列哪种类型
      • 0b00, 保留
      • 0b01, 来自L2CAP的延续帧,或者是一个空包。
      • 0b10, 来自L2CAP的开始帧,或者是一个完整的报文。
      • 0b11, 控制报文。
      • 链路层控制报文(11),用来管理连接,
      • 高层报文开始(10),也可用于一个完整的报文
      • 高层报文延续(01),也可以是一个空包
    • NESN(1bit),预期序列号
    • SN(1bit),序列号
    • MD(1bit),更多数据
    • CP(1bit),是否包含CTEinfo
    • RFU(3bit),保留
    • length(8bit),长度
    • CTEinfo(8bit), 指明Constant Tone Extension的类型和长度
    • payload,数据,长度为0到251字节,
    • MIC,消息完整性校验,4个字节,可选

    为了使数据传输变得可靠,所有的数据均带有序列号(SN)。连接建立之后,第一个数据包的SN为0;每次发送新的数据包时,其SN与上一个数据包的SN不同。这使得接收方能够判断接收数据包的性质: 如果SN与之前的一样,接收方认为该报文为重传报文,如果SN和上一个数据包的SN不同,则认为是新报文。
    数据包的确认还需要用到另外一个比特,预期序列号(NESN)。NESN的发送方用其通知对方字节预期接收的数据包的SN。
    如果设备成功接收SN为0的报文,在其确认报文中,应该将NESN设为1,向对方表明自己希望下一个数据包的SN为1,如果不讲NESN设置为1,那么发送方就认为从设备没有成功接收到自己的报文,将进行重传。因此NESN作为一个标志来判断数据包是否被正确接收还是需要重传。
    数据信道报文的Header里还有一个更多数据位(MD), 用来通知对端设备自己还有其它的数据准备发送。如果收到设置了MD位的数据包,应该在当前连接事件中继续与对端设备通信。这样一来,只要还有数据要发送,连接事件就会自动扩展;一旦不再有数据发送,连接事件会迅速关闭。如果把MD设置为0,设备可以快速、优雅的结束连接事件,从而节省能量。
    另外,NESN还可以用来进行流量控制。设备一旦没有足够的缓存空间来处理消息,可以不更新NESN。这迫使对端设备重新发送当前消息,从而把对缓存的要求从接收端转嫁到发送端。

    下面是一个具体的例子:
    在这里插入图片描述

    1. 主设备发送第一包数据(SN=0,NESN=0,MD=1)
    2. 从设备接收到之后回复(SN=0,NESN=1,MD=1),但是这一包数据主设备没有收到。
    3. 主设备没有收到从设备的回复,因此重传这一包数据(SN=0,NESN=0,MD=01
    4. 从设备回复(SN=0,NESN=1,MD=1)
    5. 主设备收到从设备的回复,开始发送下一包数据(SN=1,NESN=1,MD=0)
    6. 从设备回复(SN=1,NESN=0,MD=0)
    7. 主设备收到从设备的回复,结束当前的连接事件。注意上述过程都在同一个连接事件内完成的。
    8. 在下一个连接事件中,主设备有数据需要发送(SN=0,NESN=0,MD=0)
    9. 从设备回复(SN=0,NESN=1,MD=0)
    10. 主设备收到从设备回复,结束当前连接事件。

    3.1 数据报文

    LLID为0b01或者0b10。

    Header 中的 LLID 字段设置为 0b01,长度字段设置为 0b00000000 被称为空 PDU。 主机的链路层可以向从机发送一个空的 PDU,以允许从机响应任何数据的 PDU,包括一个空的 PDU。
    如果LLID字段为0b10,长度字段不应该被设置为0b00000000。

    如果链路层接收到 Data_Total_Length 等于 0b00000000 且 Packet_Boundary_Flag 设置为 0b00(即开始片段)的 HCI ACL 数据包,则链路层不能简单地通过空中传输该片段,而是必须将其与一个或 更多的以下延续片段形成一个 PDU,LLID 设置为 0b10 和非零长度。

    数据报文的Payload来自上层。

    3.2 控制报文

    控制报文是用来控制连接链路的。

    数据格式如下:
    在这里插入图片描述

    • Opcode,操作码,1个字节
    • CTRData,控制数据,0到250个字节

    控制报文中的 CtrData 字段由操作码字段指定。 对于给定的操作码,CtrData 字段的长度是固定的。

    操作码类型如下(详细信息参看: 核心卷,vol6, PartB, 2.4.2):
    在这里插入图片描述
    如果接收到不支持控制报文或保留供将来使用的报文,则链路层应以 LL_UNKNOWN_RSP PDU 进行响应。 LL_UNKNOWN_RSP PDU 的 UnknownType 字段应设置为接收到的 PDU 中操作码的值。

    LL_UNKNOWN_RSP 的CtrData数据格式:
    在这里插入图片描述

    如果接收到的控制报文长度错误或 CtrData 字段无效,链路层可以继续执行该命令,并对数据进行特定于实现的解释(例如,如果PDU太长,它可以忽略额外数据;如果字段超出范围,则可以使用最接近的允许值)。 如果它不继续该规程,它应以LL_UNKNOWN_RSP PDU响应,或者,如果相关规程允许,则响应 LL_REJECT_IND 或 LL_REJECT_EXT_IND PDU。 LL_UNKNOWN_RSP PDU 的 UnknownType 字段或 LL_REJECT_EXT_IND PDU 的 RejectOpcode 字段应设置为接收到的 PDU 中的 Opcode 值。

    LL_REJECT_IND的CtrData数据格式:
    在这里插入图片描述
    LL_REJECT_EXT_IND 的CtrData数据格式:
    在这里插入图片描述

    展开全文
  • 文章目录(一)流量控制与可靠传输机制一、数据链路层流量控制二、流量控制的方法(1)停止-等待协议(相当于发送窗口是1的滑动窗口协议)(2)滑动窗口协议1.后退N帧协议(GBN)2.选择重传协议(SR)(二)停止—...

    文章目录


    (一)流量控制与可靠传输机制简介

    一、数据链路层的流量控制

    较高的发送速度较低的接受能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。
    注:数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的
    数据链路层流量控制手段:接收方收不下就不回复确认
    传输层流量控制手段:接收端给发送端一个窗口公告。

    二、流量控制的方法简介

    (1)停止-等待协议(相当于发送窗口是1的滑动窗口协议)

    每发送完一个帧就停止发送,等待对方的确认,在收到确认后再发送下一个帧。在这里插入图片描述

    (2)滑动窗口协议

    1.后退N帧协议(GBN)
    2.选择重传协议(SR)

    注:每一个小格都代表一个帧,可发现序号有重复,这是因为帧序号是可以重复利用的。
    在这里插入图片描述
    代表发送了发送窗口的第一个帧。0号帧。
    在这里插入图片描述
    代表在接收了0号帧后,接收方再向发送方发送确认帧,并且接收窗口向右移动
    在这里插入图片描述
    发送方在接收到确认帧后,发送窗口向右移动。
    注:如果这时候没有收到确认帧,它会继续将发送窗口的帧发送出去,直到接收到确认帧,才会向右移动一格。
    注:
    停止等待协议:发送窗口大小=1,接收窗口大小=1
    后退N帧协议(GBN):发送窗口大小>1,接收窗口大小=1
    选择重传协议(SR):发送窗口大小>1,接收窗口大小>1
    注:链路层的滑动窗口大小是固定值,在传输层的窗口大小可能改变

    (3)可靠传输、滑动窗口、流量控制

    可靠传输:发送端发啥,接收端收啥
    流量控制:控制发送速率,使接收方有足够的缓冲空间来接收每一个帧
    滑动窗口解决:流量控制(收不下就不给确认,想发也发不了) 可靠传输(发送方自动重传)

    (二)停止—等待协议

    (1)为什么要有停止等待协议

    除了比特出差错,底层信道还会出现丢包问题。为了实现流量控制
    注:丢包:物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据包的丢失。

    (2)停止等待协议的前提

    虽然现在常用全双工通信方式,但是为了讨论问题的方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。
    因为是在讨论可靠传输的原理,所以并不考虑数据是在哪一个层次上传送的。
    停止等待就是每发送完一个分组就停止发送,等待对方确认,再收到确认后在发送下一个分组。

    (3)停等协议有几种应用情况

    1.无差错情况

    在这里插入图片描述

    2.有差错情况
    数据帧丢失或检测到帧出错

    在这里插入图片描述注:1.发送完一个帧后,必须保留它的副本。这样如果发生帧丢失,就可以重传。
    2.数据帧和确认帧必须编号

    ACK(确认帧)丢失

    在这里插入图片描述
    发送方由于没收到确认帧,所以依旧会重传,但是接收方就相当于重复接收了两次。所以接收方会丢弃重复的1帧,重传确认1帧

    ACK迟到

    在这里插入图片描述
    发送方对于迟到的确认帧不做处理,直接丢弃

    (4)性能分析

    方式简单,但是信道利用率太低
    在这里插入图片描述

    (5)信道利用率&信道吞吐率

    信道利用率:发送放在一个发送周期内,有效的发送数据所需要的时间占整个发送周期的比率。
    在这里插入图片描述

    引言

    停等协议的弊端:发送方每发送一个帧,就处于等待状态,只有当接收到了确认帧才继续发送。发送效率很低,浪费时间和资源。
    那么我们可以连续发送三个帧码,这又被称为流水线技术。
    在这里插入图片描述
    注:1.必须增加序号的范围,即连续发送的序号要不同
    2.发送方需要缓存多个分组,来为重传做准备。比停止等待的缓存要大一点
    针对以上两个解决方案,我们有了后退N帧协议(GBN)和选择重传协议(SR)

    (三)后退N帧协议(GBN)

    (1)GBN中的滑动窗口机制

    发送窗口:发送方维持一组连续的允许发送的序号
    在这里插入图片描述
    接收窗口:接收方维持一组连续的允许就收帧的序号
    在这里插入图片描述
    在这里插入图片描述
    后退N帧协议的滑动窗口机制是:GBN的发送窗口内的帧可以连续发送,被发送的帧同时会保存副本,防止需要重传情况的发生。当接收方接收到帧后,接收窗口就会向右滑动,同时发送确认帧。发送方在收到确认帧的时候,发送窗口就会向右滑动。

    (2)发送方必须响应的三件事

    上层(网络层)调用(网络层如果让链路层给他发送数据,链路层应当在GBN协议中做些什么)

    上层要发送数据的时候,发送方首先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送,如果窗口已满,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一会再发送。(实际实现中,发送方可以缓存这些数据,窗口不满时再发送帧)

    收到一个ACK

    GBN协议中,对n号帧的确认采用累计确认的方式。标明接收方已经收到n号帧和它之前的全部帧(也就是说,不需要逐个发确认帧)

    超时事件

    协议的名字为后退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧。

    (3)接收方要做的事

    正确接收

    如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧的数据部分交付给上层

    接收错误

    其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息:expectedseqnum(下一个按序接收的帧序号)

    (4)运行中GBN协议(一个例子)

    在这里插入图片描述
    假设发送窗口尺寸为4

    (5)发送窗口的大小上限

    Q:窗口的长度可以无限吗?
    A:若采用n个比特对帧编号,那么发送窗口的尺寸WT应满足:1≤WT≤2^n-1。因为发送窗口尺寸过大,就会使得接收方无法区别新帧和旧帧。(旧帧全部丢失,要重传的时候全部都要重传,那么没有重复编号的话就会无法分辨新帧和旧帧)

    (6)GBN的重点总结(考研)

    1.累计确认
    2.接收方只按顺序接收帧,不按序无情丢弃
    3.确认序列最大的,按序到达的帧

    比如接收到124,那么接收方丢弃4,发会序号为2的确认帧

    4.发送窗口最大为2^n-1,接收窗口大小为1

    (7)GBN的性能分析

    优点:因连续发送数据帧而提高了信道利用率
    缺点:(累计确认导致的批量重传现象)在重传时必须把原来已经正确传送的数据帧重传,使传送效率降低

    引言

    那么有没有办法只重传出错的帧呢?
    解决办法:设置单个确认,同时加大接收窗口,设置接收缓存,缓存乱序到达的帧

    (四)选择重传协议(SR:Selective Repeat)

    (1)SR中的滑动窗口机制

    SR中的滑动窗口:

    在这里插入图片描述
    设发送窗口和接收窗口的大小都是4.那么此时发送窗口里的帧的类型分为这几种。
    在这里插入图片描述
    与GBN协议不同的是,此时的发送窗口可能不都是发完等待确认或者还能发送的的帧,可能还有发完也确认过了的帧,只不过在它前面的帧还没有被确认,所以滑动窗口还不能被滑动。
    在这里插入图片描述
    同样的,接收方除了等待接收的,还有可能存在已经收到了,但他前面有帧还没有收到,所以接受滑动窗口还不能移动。

    (2)发送方必须响应的三件事

    上层调用

    从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧。否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。

    收到一个ACK

    如果收到ACK,假如该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接受。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了,并且有序号在窗口内的为发送帧,则发送这些帧。
    在这里插入图片描述
    例:这里,2.4是发送了,有副本,但没有收到确认的帧,3是发送了也受到确认的帧,5是等待发送的帧。
    如果此时2受到了确认。那么发送窗口会直接滑到4567,并开始发送窗口中还未发送的帧

    超时事件

    每一个帧都有一个自己的定时器,一个超时事件发生后只重传一个帧

    (3)接收方要做的事

    窗口内的帧来者不拒(在接收窗口的帧)

    SR接收方将确认一个正确接收的帧而不管其是否按顺序。失序的帧将被缓存。并返回给发送方一个该帧的确认帧(收谁确认谁),直到所有帧(即序号更小的帧)都被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
    在这里插入图片描述
    例:此时5是准备接收的,6是已经确认且发送确认帧的,如果这时候接收到了7号帧,那么会将他缓存起来。等到接收到5号帧的时候再一起按顺序交付给网络层,且移动滑动窗口。

    其余情况

    如果收到了窗口序号外(小于窗口下界)的帧,就返回一个ACK。其他情况,就忽略该帧。

    (4)运行中的SR

    在这里插入图片描述

    (5)窗口大小上限

    注:发送窗口最好等于接收窗口(大了会产生溢出现象,小了没有意义),窗口过大会导致可能辨别不出是旧帧还是新帧。
    WTmax=WRmax=2^(n-1),n是表示帧号用的比特数

    (6)SR重点总结

    1.对数据帧逐一确认,收一个确认一个
    2.只重传出错的帧
    3.接收方有缓存
    4.WTmax=WRmax=2^(n-1)
    展开全文
  • 随着交换式以太网的发展,网络不再是单一的共享线路,而代之以很多链路的组合。因此,多个站 之间可以同时进行数据交换 另外,以太网被修改为全双工操作,这样可以有效禁用冲突检测 电路。这样也可以...
  • 数据链路和运输流量控制及差错控制

    万次阅读 多人点赞 2015-06-13 11:08:39
    这两天在复习《计算机网络》的期末考试,想明白了几个问题,做下笔记。1)停止等待、后退N帧和滑动...2)数据链路层的差错控制和运输层的可靠传输有什么区别? 【1】从“干什么”的角度来讲 数据链路层负责结点之间
  • 数据链路层的主要功能与服务

    千次阅读 2014-06-29 21:46:39
    为达到这一目的,数据链路层必须具备一系列相应的功能,主要有:如何将数据组合成数据块(在数据链路层中将这种数据块称为帧,帧是数据链路层的传送单位);如何控制帧在物理信道的传输,包括如何处理传输差错,...
  • 流量控制(基于速率/基于反馈)-在数据链路通常采取基于反馈的模式,即由接收方向发送方提供处理能力大小,发送方根据处理能力提供对应流量 帧 (数据链路处理的协议数据单元PDU) 帧的组成:帧头+载荷+帧尾 ...
  • 用来标志使用的是什么协议,以便把收到的MAC帧的数据上交给的这个协议。数据字段 (46-1500): 正式名称是MAC客户数据字段最小长度64 字节-18字节的首部和尾部 = 数据字段的最小长度。 FCS字段 (4 ...
  • 3.1数据链路层的功能

    2016-08-25 22:55:15
    数据链路层在物理层提供服务的基础...对网络层而言,数据链路层的基本功能是将源机器中来自网络层的数据传输到目标机器的网络层。 1)无确认的无连接服务。原机器发送数据帧时,无需先建立链路连接,目的的机器收到数
  • 链路层信道详解

    千次阅读 2021-04-08 09:07:04
    文章目录一、链路层概述链路层提供的服务链路层在何处实现二、差错检验和纠正技术奇偶校验检验和方法循环冗余检测三、多路访问协议信道划分协议时分多路复用(TDM):频分多路复用...网络作为链路层六、数据中心网络
  • 最全的数据链路基础知识详解

    千次阅读 多人点赞 2020-03-14 16:45:53
    三个基本问题2.1封装成帧2.1.1基本概念2.1.2常用成帧方法2.2透明传输2.2.1解决透明传输问题2.2.2用字节/字符填充法解决透明传输问题2.2.3字节...的首尾定界法2.2.5零比特填充法2.3差错检测2.3.1设计数据链路层的原因...
  • 计算机网络第三弹——数据链路

    千次阅读 2019-05-11 15:07:50
    彩蛋 ... 建议大家关注左边栏二维码所示公众号,后台回复"N4-2"获取xmind源文件...数据链路层是计算机网络五层协议体系结构的第2层(从下往计数),在整个体系结构中有非常重要的作用: ​ 图1:不同主机之间通...
  • 但osi的数据链路在面对实际情况时,便遇到一些问题。 以传统有线局域网和wifi为例。 物理一个基本的任务就是将mac帧送达目的地,这在传统的有线以太网中,由于交换机有端口缓存,交换机与主机之间是双工模式,...
  • TCP流量控制与拥塞控制

    千次阅读 2020-08-22 16:00:19
    TCP提供一种基于滑动窗口协议的流量控制机制,滑动窗口的基本原理已在第3章数据链路介绍过了,这里要介绍的是TCP是如何使用窗口机制来实现流量控制的。 在通信过程中,接收方根据自己接收缓存的大小,动态地调整...
  • 数据链路概述--计算机网络

    热门讨论 2018-02-25 15:53:58
    数据链路概述
  • UDP尽最大努力交付,即不保证可靠交付3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP面向报文,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如I...
  • TCP/IP协议简介(二) 之 链路层介绍

    千次阅读 2016-07-28 15:40:55
    一、简介一节已经介绍过,网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路,以及把接收到的帧中的数据取出并交给网络层。 为达到这一...
  • 传输协议UDP,书说不必事先建立连接,是无连接的不可靠的协议,只是尽最大努力交付,但UDP仅是传输协议,下面还有数据链路协议啊,该中有超时重传,差错重传的ARQ协议,这样,原始的数据帧就能可靠通信了...
  • 数据链路和帧 数据链路使用的信道主要有以下两种类型: 点对点信道。这种信道使用一对一的点对点通信方式。 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道连接的主机很多,因此...
  • (1)将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位 数据块是一组或几组按顺序连续排列在一起的记录,是主存储器与输入设备、输出设备或外存储器之间进行传输的数据单位...
  • 链路层 两种截然不同类型的链路层信道。第一种类型是广播信道,这种信道用于连接有线局域网、卫星网和混合光纤同轴电缆( Hybrid Fiber Coaxialcable,HFC)接入网中的多台主机。因为许多主机与相同的广播信道连接,需要...
  • 数据链路

    万次阅读 2018-07-07 18:30:16
    本篇目录***************************************数据链路层的三个基本问题使用点对点信道的数据链路层使用广播信道的数据链路层以太网MAC层的硬件地址***************************************一、数据链路层的三...
  • 计算机网络——数据链路

    千次阅读 2018-01-26 16:45:21
    数据链路使用的信道主要有以下两种类型: (1)点对点信道:这种信道使用一对一的点对点...数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路,就构成了
  • 计算机网络(第7版) - 第三章 数据链路 - 习题

    万次阅读 多人点赞 2019-07-14 18:57:11
    数据链路与链路的区别在于数据链路除了链路外,还必须有一些必要的通信协议来控制数据的传输。若把实现这些协议的硬件和软件加到链路,就构成了数据链路。 ② “电路接通了”表示链路两端的结点交换机已经开机...
  • 数据链路层与检错码

    千次阅读 2010-04-16 16:30:00
    温习《计算机网络》 数据链路层的功能:1.向网络层提供一个定义良好的服务接口;2.处理传输错误; 差错控制 (帧的 纠错码、检错码)3.调节数据流,确保慢速的接收方不会被快速的发送方淹没。 流量控制 (滑动...
  • TCP/IP入门(1) --链路层

    千次阅读 多人点赞 2015-04-06 11:09:27
    /**本博客由汗青ZJF整理并发布, 转载请注明出处:http://blog.csdn.net/zjf280441589/article/category/1854365*/TCP/IP体系结构 1)网络接口层 ... 数据链路层向该层用户提供透明的和可靠的数据传输服务。 透明性是
  • 本博文较为详细的介绍数据链路层的各个方面。在网络协议中的位置及其作用,包括数据帧封装,差错检测,差错纠正及流量控制等方面。并涉及到网络协议各层的数据封装以及网络通信中数据传输通道的简要分析。这算是对...
  • 数据链路(帧)(一)

    千次阅读 2020-11-05 17:44:43
    数据链路和帧2.三个基本问题二、点对点协议 PPP1.PPP 协议的特点2.PPP 协议的帧格式3.PPP 协议的工作状态三、使用广播信道的数据链路1.局域网的数据链路2.CSMA/CD 协议 一、使用点对点信道的数据链路 数据链路...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,246
精华内容 13,298
关键字:

数据链路层的流量控制实际上