3.1 数据链路层的功能、组帧与差错控制
数据链路层的功能与服务,字符计数法、字节填充法、零比特填充法与违规编码法四种组帧方法,奇偶校验码、CRC 循环冗余码与海明码。
数据链路层的功能
数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
- 链路:从一个结点到相邻结点的一段物理线路,中间没有任何其他交换结点;数据链路:除了物理线路外,还必须有通信协议来控制这些数据的传输,把实现这些协议的硬件和软件(通常是网卡)加到链路上,就构成了数据链路;
- 数据链路层的协议数据单元是帧。
数据链路层的主要功能:
- 为网络层提供服务:无确认的无连接服务(如以太网)、有确认的无连接服务(如无线局域网)、有确认的面向连接服务(通信可靠性要求高的场合)。注意:有连接就一定要有确认,即不存在无确认的面向连接的服务;
- 链路管理:数据链路层连接的建立、维持和释放过程称为链路管理,主要用于面向连接的服务;
- 封装成帧:在一段数据的前后添加首部和尾部构成帧,首部和尾部的一个重要作用是帧定界;
- 透明传输:不管所传数据是什么样的比特组合,都应当能够在链路上传送。当所传数据中的比特组合恰好与某个控制信息完全一样时,必须采取适当的措施,使接收方不会将这样的数据误认为是某种控制信息;
- 流量控制:限制发送方的数据流量,使其发送速率不超过接收方的接收能力(在 TCP/IP 体系中流量控制主要放在传输层);
- 差错检测:由于信道噪声等原因,帧在传输过程中可能会出现错误,数据链路层用差错检测技术检测出错误并丢弃出错的帧。
组帧
发送方必须依据一定的规则把网络层递交的分组封装成帧(称为组帧),并使接收方能从收到的比特流中区分出帧的起始与终止。
字符计数法
在帧头部使用一个计数字段来标明帧内字符数(计数字段本身也计入)。缺点:如果计数字段出错,即失去了帧边界划分的依据,接收方就无法判断所传输帧的结束位和下一帧的开始位,一错全错。
字节填充的首尾定界符法
使用特定的字符来定界一帧的开始与结束(如 PPP 的 0x7E)。为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,可在特殊字符前面填充一个转义字符(ESC),接收方收到后再删除。
零比特填充的首尾标志法
允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特模式,即 01111110 来标志一帧的开始和结束。为了不使信息位中出现的比特流 01111110 被误判为帧的首尾标志,发送方在信息位中遇到 5 个连续的 1 时,自动在其后插入一个 0;接收方做该过程的逆操作,即每收到 5 个连续的 1 时,自动删除后面紧跟的 0。HDLC 和同步传输的 PPP 采用这种方法。零比特填充法很容易由硬件实现,性能优于字节填充法。
违规编码法
在物理层进行比特编码时,通常采用违规编码法。例如曼彻斯特编码方法将数据比特 1 编码成”高-低”电平对,将数据比特 0 编码成”低-高”电平对,而”高-高”电平对和”低-低”电平对在数据比特中是违规的(没有采用),因此可借用这些违规编码序列来定界帧的起始和终止。局域网 IEEE 802 标准就采用了这种方法。
差错控制
实际通信链路都不是理想的,比特在传输过程中可能会产生差错,1 可能变成 0,0 也可能变成 1,这就是比特差错(位错)。此外还有帧丢失、帧重复、帧失序等帧错,帧错一般由更高层或可靠传输协议(序号、确认、重传)解决。
检错编码
奇偶校验码:由 位信息元和 1 位校验元组成。奇校验码中”1”的个数为奇数,偶校验码中”1”的个数为偶数。它只能检测出奇数位的出错情况,检错能力为 50%。
循环冗余码(CRC):给定一个 bit 的帧,发送方为帧生成一个 bit 的冗余码(帧检验序列 FCS),使得加上冗余码后的帧能被事先选定的生成多项式 ( 阶,对应 位二进制数)模 2 整除:
- 在帧的低位端加 个 0;
- 用模 2 除法(异或,不借位)除以生成多项式对应的位串;
- 得到的 位余数就是冗余码 FCS,附加在原数据后面发送;
- 接收方用同一生成多项式去除收到的帧,余数为 0 则认为无差错,否则丢弃。
纠错编码
海明码不仅能发现错误,还能纠正一位错误。设信息位为 位,校验位为 位,则须满足 。海明码的编码与纠错过程详见计算机组成原理”校验码”一课。一般来说,码距为 的编码可检测 位错误,可纠正 位错误。
即时练习
- 1(408 真题 2013)HDLC 协议对 01111100 01111110 组帧后对应的比特串为( )。
- 2要发送的数据为 11010110,采用 CRC 校验,生成多项式为 G(x) = x⁴ + x + 1,则应添加在数据后面的冗余码为( )。
- 3下列关于数据链路层差错控制的说法中,正确的是( )。
- 4使用字符计数法组帧时,最大的缺点是( )。
标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。