第五章 数据链路层2

一、帧同步:了解有哪些同步机制,掌握字符填充和比特填充机制

1.帧同步

帧同步:帧(Frame)的起始和结束定位

传输过程中可能有差错(只需要重传那些出错的帧);更有效地利用链路

异步协议,以字符为单位进行同步

  • 传输字符,在字符起始处进行同步
  • 发送方和接收方采用近似同一频率的时钟,短时间内时钟的偏移是可以忍受的

同步协议,以帧为单位进行同步

  • 在帧(比较长的数据单元)的起始处同步
  • 在帧传输过程中,维持固定的时钟,或者采用某种方法(比如物理层介绍的4B/5B编码等)将 时钟信号编码进数据中

如何决定帧的开始和结束?

  • 面向字符的同步协议:特殊字符表示帧的开始和结束
  • 面向比特的同步协议:比特模式表示帧的开始和结束
  • 字节计数的同步协议:特殊字符表示开始,字节数表示结束
  • 违例编码法:采用不在正常数据部分出现的物理信号模式

2.字符填充

利用特殊定义的字符SYN(0x7E=01111110)来标识帧的起始和结束位置

字符填充:但特殊字符可能在数据部分出现

  • 利用转义字符DLE(0x7D=01111101)来实现数据透明
  • 除了SYN/DLE等外,可能还有其他控制字符也需要转义
  • ACCM异步控制字符映射表(32比特的整数)
    • 在实际的链路前还可能包括一个Modem,其会解释一些控制字符
    • ACCM给出了除了SYN和DLE外还有哪些控制字符(0~31)需要转义,如XON/XOFF
    • 在点对点协议(Point-to-Point Protocol,PPP)链路建立时发送ACCM,协商需要转义的控制字符
    • ACCM中的对应的比特n为1时表示控制字符n需要转义

需要转义的字符:SYN、DLE,以及那些可能被modem解释从而通过ACCM机制描述的那些字符

发送方:

  • 如果需要转义的特殊字符(如SYN, 0x7e)在数据部分出现,在其前面添加DLE同时该字符半加0x20(保证其大于等于0x20,即32):如0x7e——0x7d5e
  • 如果DLE本身出现在数据部分,同样添加DLE,即0x7d—— 0x7d5d

接收方:

  • 看到DLE(0x7D),去掉DLE,后面的字节半加0x20来恢复原来的数据

3.比特填充

通过一个特定的比特模式“01111110”来标识帧的起始和结束位置

比特填充:保证数据部分不会出现连续5个1

  • 帧中的其他字段中如果出现连续5个1,则之后插入一个0
  • 当接收时,如果出现连续5个1后跟一个0,则删除0

二、差错编码

对要发送的信息码元(k)附加上按照某种数学关系(监督关系式)产生的冗余(监督)码元(r)

编码效率R=k/(k+r):码字中信息码元所占的比例

漏检率:接收者无法了解到信息码元出错的概率

差错编码可以分为:

  • 是否能纠错:检错码和纠错码
    • 纠正错误类型:纠正随机错误和纠正突发错误码
  • 信息码元和冗余码元之间的关系是否为线性:线性码和非线性码
  • 信息码元和冗余码元之间的约束方式:分组码和卷积码

码距(hamming,汉明/海明距离):两个等长码字之间对应符号不同的数目

码字10100与11000之间的码距d = 2

(一)什么是随机差错和突发差错

1.随机差错

随机热噪声是信道固有的、持续存在的

随机错的概率(误码率)很低,物理信道的设计保证相当大的信噪比

2.突发差错

外界的因素,持续时间短,突发性

传输中产生差错的主要原因

突发长度:突发差错发生的第一个码元到有错的最后一个码元间所有码元的个数。比如4800bps信道上的 10ms的冲击噪声的突发长度为48比特

(二)了解分组码和卷积码的区别,线性分组码的基本概念

1.分组码:冗余码元仅仅和当前信息码元相关

2.卷积码:冗余码元和当前以及最近的信息码元相关

3.线性分组码

分组:将信息码元若干位为一组,该组监督码元仅与本组信息码元有关

线性:信息码元与监督码元之间的关系可以用一组线性方程来表示

线性分组码的线性特性:

  • 任意两个许用(即合法)码字的(二进制编码一般采用异或运算)也是许用码字
  • 码组间的最小码距等于非零码的最小码重(即非0数字的数目,等于与全0码字 之间的距离)

常用线性分组码

  • 偶校验
  • 海明码
  • 循环冗余码
  • Reed-Solomon码

(三)掌握CRC

循环码(cyclic code): 任一许用码字经过循环移位后,所得到的码字仍然是许用码字

线性分组码:经常用(码长,信息位长度)或者 (码长,信息位长度,最小码距)来描述,即(n,k) 或(n,k,d), 冗余位长度r = n-k

1.比特串与多项式的对应

二进制比特串与一个只有0和1两个系数的多项式一一对应

  • 编码:xr K(x)(添加r个0)除以G(x)得到的余式为冗余位R(x),可以证明T(x)/G(x)的余式为0
  • 解码:接收方的码字除以G(x),如余式为0表示无错

2.如何进行编码

编码:

  • k个信息位之后附加n-k个0组成被除数
  • 除数为n-k+1位
  • 冗余位=被除数 % 除数,即被除数除以除数的余数
  • 采用模二运算,即加法和减法都为不带进位的异或运算

3.如何判断出错

解码:

  • 判断收到的码字与编码时采用的除数相除是否能除尽,即余数为0表示没有出错

4.差错多项式:怎么判断漏检

选取r次多项式G(x), 满足:

  • 含有x+1因子,可检测出奇数位错
  • 常数项不为0:不含x的因子,突发长度小于等于r的突发错
  • 周期大于等于n,(且常数项不为0),检测出所有双错
  1. 检测出双错、奇数位错、突发长度小于等于r的突发错
  2. 突发长度为r+1的突发错误的漏检率为2-(r-1)
  3. 突发长度b(b>r+1)的突发错误的漏检率为2-r

(四)掌握海明码

1.需要添加多少个冗余位

要构造纠正一比特差错的编码:

  • k位信息位后增加r个冗余位构成n(=k+r)位的码字
  • 每个冗余位是通过信息位中的某些位半加后的结果
  • 接收方通过r个监督关系式产生r个校正因子来区分无错和n位的码字中某一位错

等式满足时称为完备(perfect)码

2.如何构造监督关系式

接收端:利用r个监督关系式计算校正因子S(=0和1),分别区分无错和有错的情况

3.海明距离与检错和纠错能力之间的关系

  • 为检出e个错码,要求码集的海明距离d≥e+1
  • 为纠正t个错码,要求码集的海明距离 d≥2t+1
  • 为检出e个错码,同时能纠正t (e>t)个错码,则应满足 d≥e+t+1 (e>t)

(五)了解Internet检验和

Internet校验和算法:

  1. 待校验的相邻字节成对组成16比特整数并计算其和的二进制反码(二进制反码求和).
  2. 生成校验和,校验和区域本身应当先置0,并和待校验数据相加,其和进行二进制反码运算后赋给校验和区域.
  3. 检查校验和,将所有字节,包括校验和,进行相加并求二进制反码.如果结果为全1(即二进制反码算术中的0),检查通过.

三、掌握基本的差错控制方法,怎样处理帧的丢失、失序,ACK帧的丢失等

1.差错控制

差错控制:如果数据分组和ACK在传输过程中出错时如何恢复

差错控制的四种基本方式:

  1. 检错重发
  2. 前向纠错:接收端进行差错纠正
  3. 反馈校验:接收端将收到的数据原封不动发回发送端
  4. 检错丢弃

2.处理

接收方发送确认(ACK)通知发送方帧的接收情况

  • (positive)ACK: 确认数据帧正确收到
  • (negative)NAK: 通知数据帧接收时出错,这样发送者可以尽快重传

超时机制:发送方一直没有收到确认时认为数据帧丢失而重传数据帧

顺序号: 数据帧应该包括顺序号,以便区分是否为重传帧,类似地ACK帧也应该包含顺序号,以明确哪个或哪些帧已经正确收到

ARQ(Automatic Repeat reQuest),自动请求重发: 采用超时和确认实现可靠数据传输的协议

四、停等协议:性能分析方法

1.停等协议

(1)确认与否认

首先,每次发送方都只发一个数据分组,接收方对数据分组进行差错检测,检验是否有误码。
如果没有误码,那么给发送方发送ACK确认分组;
如果有误码,则丢弃分组,并给发送方发送NAK否认分组。

(2)超时重传
但其实,数据分组在传输过程中并不会那么一帆风顺,数据分组有可能在半路上遇到一个已经满了的路由器等情况,此时路由器会毫不犹豫地丢失该分组,如此便会产生数据分组被丢失,发送方等不到接收方的ACK或者NAK。
所以,我们需要给每次的数据分组的传输提供一个超时计时器,若到了超时计时器所设置的重传时间,而发送方仍收不到接收方的ACK或NAK,则重传原来的数据分组。
一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”

(3)确认丢失
现在,假设一下,如果是接收方的ACK在传输过程中丢失,又该怎么办呢?
此时,我们知道这肯定会触发发送方的超时计时器,让发送方重传,可是,刚才发送方的数据分组其实已经被接收方成功接收了。
这个时候,我们就需要给用一个比特位给每个数据分组一个序号(0或1),如此,当重新传输数据分组0的时候,接收方检测到这个数据分组0跟刚才的数据分组0是同一个,就果断丢弃该数据分组,并重发一个ACK给发送方。
这里为什么可以只用0和1呢,主要还是因为停止等待协议的特性,即每发送完一个数据分组便等待发送方的ACK或者NAK,因此,其实只需要让接收方知道这个重新发过来的分组是不是刚才已经接收过的分组就可以了。

(4)确认迟到
上面,我们知道发送方发送的数据分组需要序号,那么接收方发送的ACK是否需要序号呢,答案是肯定的。
发送方给接收方发送一个数据分组,接收方可能接收并给发送方发送ACK,此时,如果ACK遇到某些问题,导致该ACK迟到了,那么有可能会触发发送方的超时重发,此时,发送方又发了一个DATA0,接收方误以为是之前的ACK丢包而重发一个ACK,如果没有给ACK编号的话,那么DATA0的两个ACK到达发送方的时候,发送方会误以为DATA1的ACK到了,如此反复,后边是否正确接收数据分组就对不上号了。
因此,也必须给ACK多开辟一个比特位进行编号(0或1),让发送方知道这个ACK到底是丢包没传过来,还是迟到没传过来;并对该结果进行抉择(接收还是忽略)。

2.性能分析

信道效率或有效利用率(effective utilization) :信道上的传输中实际用于传输有效数据的比率,也称为归一化的吞吐率,即吞吐率与信道带宽的比 率

  • 信道容量B bps
  • 帧长L bit
  • 往返传播延迟2R秒
  • 忽略ACK的开销

2RB/L: 往返传播延迟乘积(以帧为单位)

如果考虑ACK、帧头以及重传的开销

  • D为帧中有效数据长度,H为帧头长
  • 数据帧长L=H+D,ACK帧长为H
  • T表示发送方等待ACK的超时间隔
  • P1和P2分别表示数据帧和ACK丢失的概率

考虑一个数据帧最终传输成功:

  • 前面多次传输失败:传输数据帧(H+D)。超时间隔T
  • 最后一次传输成功:传输数据帧。收到ACK帧

需要首先计算出平均传输次数N

某次传输失败的概率P=1-Data/ACK都成功的概率,即P = 1 − (1 − P1)(1 − P2)

Pk=正好传输k次成功的概率,即前面k-1次失败,第k次成功

为避免出现误重传,超时间隔T必须取得足够大,即T≥H/B +2R,U要达到最大值(T越小越好), 应该 T=H/B +2R,即BT = H + 2RB

假设信道上每比特的误码率为E,且各比特相互独立

P1和P2分别表示数据帧和ACK丢失的概率

最佳帧长度Dopt :假设H、B、T(=H/B+2R)、E不变

五、滑动窗口协议

核心思想:

  • 发送方在没有收到对方的ACK的时候可以发送多个数据包

特性

  • 发送方使用发送窗口限制没收到确认时允许发送的数据量
  • 必须增加序号的个数,发送方和接收方需要增加缓存
  • 常见的两种滑动窗口协议:GBN(回退N步)和SR(选择性重传)

(一)GBN和选择重传有什么区别:确认和重传

1.GBN

GBN的工作方式

  • 发送方:窗口不满则发送至窗口满,窗口满则等待,收到确认窗口向后移动,某个分组出错或丢失则重传该分组及其后面所有已发送但未被确认的分组
  • 接收方:对按序正确到达的分组确认,乱序或错误的分组丢弃且发送最后一次正确收到的分组的确认

累计确认机制

  • 发送方收到某个分组的确认意味着该分组及之前所有分组接收方都正确收到

2.选择重传

SR(selective repeat)选择性重传

    • 发送方某个分组出错或丢失只重传该分组
    • 接收方增加接收窗口(接收缓存),若收到的分组在接受窗口内且乱序,缓存该分组,等到分组按序后一起提交,接收窗口的大小一般等于发送方发送窗口的大小

(二)发送窗口大小与信道有效利用率之间的关系

发送窗口W:发送方允许发送的数据帧的顺序号范围

L/B一个窗口的发送时延=L数据块长度(bit)/B数据率(bit/s),W*L/B蓝色部分宽度,2R往返时延 一条蓝色部分发送完毕到接收到ACK

要达到100%的信道利用率的最大窗口(令U=1)

顺序号的bit数要求至少:

(三)顺序号的比特数与窗口大小的关系

GBN:顺序号m比特,发送窗口最大为2𝑚− 1

选择重传协议,顺序号m比特,发送窗口最大为2m-1

六、数据链路层协议举例

数据链路层主要负责相邻设备之间的传输,决定传输的因素是MAC地址

(一)掌握HDLC和PPP协议所采用的帧同步机制(字符填充和比特填充机制

1.HDLC

高级数据链路控制(High-Level Data Link Control或简称HDLC),是一个在同步网上传输数据、面向比特的数据链路层协议

(1)面向字符型

在这类规程中,用字符编码集中的几个特定字符来控制链路的操作,监视链路的工作状态,例如,采用国际5号码中的SOH、STX作为帧的开始,ETX、ETB作为的结束,ENQ、EOT、ACK、NAK等字符控制链路操作。面向字符型规程有一个很大的缺点,就是它与所用的字符集有密切的关系,使用不同字符集的两个站之间,很难使用该规程进行通信。面向字符型规程主要适用于中低速异步或同步传输,很适合于通过电话网的数据通信。

(2)面向比特型

在这类规程中,采用特定的二进制序列01111110作为帧的开始和结束,以一定的比特组合所表示的命令和响应实现链路的监控功能,命令和响应可以和信息一起传送。所以它可以实现不编码限制的、高可靠和高效率的透明传输。面向比特型规程主要适用于中高速同步半双工和全双工数据通信,如分组交换方式中的链路层就采用这种规程。随着通信的发展,它的应用日益广泛。

2.PPP

(1)字节填充法

当信息字段中出现0x7E时,将每一个0x7E字节转变成2字节序列(0x7D,0x5E)。

若信息字段中出现一个0x7D的字节,则将其转变成2字节序列(0x7D,0x5D)。

若信息字段中出现ASCII码的控制字符(即数值小于0X20的字符),则该字符前面需要加入一个0x7D字节,同时将该字符的编码加以改变(+20)。例如,出现0x03,就要把它转为2字节序列(0x7D,0x23)

(2)0比特填充法

PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送),此时使用0比特填充法。

在发送端扫描整个信息字段,当有5个1连续出现时,立即填入一个0,保证信息字段中不会出现6个连续1。

在接收端删除连续5个1后面的0。

posted @ 2022-12-26 09:23  ImreW  阅读(187)  评论(0编辑  收藏  举报