计算机网络(三)—— 数据链路层(2、3):封装成帧、差错检测

计算机网络系列内容的学习目录 → \rightarrow 谢希仁计算机网络学习系列内容汇总

2. 封装成帧

  封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾,使之成为帧。
    ⋄ \diamond 在帧头和帧尾中包含有重要的控制信息。

在这里插入图片描述
    ⋄ \diamond 帧头和帧尾的作用之一就是帧定界

在这里插入图片描述
  并不是每一种数据链路层协议的帧都包含有帧定界标志。例如,下图是以太网版本2的MAC格式,在其帧头和帧尾中并没有包含帧定界标志。那么接收方又是如何从物理层交付的比特流中提取出一个个的以太网帧呢?

在这里插入图片描述
  实际上,以太网的数据链路层封装好MAC帧后将其交付给物理层,物理层会在MAC帧前面添加8字节的前导码,然后再将比特流转换成电信号发送,前导码中的前7个字节为前同步码,作用是使接收方的时钟同步。之后的1字节为帧开始定界符,表明其后面紧跟着的就是MAC帧。

在这里插入图片描述
  另外以太网还规定了帧间间隔时间为96比特的发送时间,因此MAC帧并不需要帧结束定界符。

在这里插入图片描述
  需要说明的是,中间间隔还有其他作用。

  透明传输是指数据链路层对上层交付的传输数据并没有任何限制,就好像数据链路层不存在一样。
  我们来举例说明,下图所示的是发送方数据链路层收到其上层交付的协议数据单元,给其添加帧头和帧尾,使其成为帧。为了简单起见,我们只画出了帧头和帧尾中的帧定界标志,帧定界标志也就是一个特定数值。

在这里插入图片描述
  思考: 如果在上层交付的协议数据单元中,恰好也包含了这个特定数值,接收方还能正确接收该帧吗?

在这里插入图片描述
  回答是否定的。接收方在收到第一个帧定界标志时,认为是帧的开始,这并没有错误。当接收方再次接收到帧定界标志时,会误认为真结束了。如果数据链路层不采取其他措施来避免接收方对帧是否结束的误判,就不能成为透明传输,也就是说数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符。很显然,这样的数据链路层没有什么使用价值。
  实际上,各种数据链路层协议一定会想办法来解决这个问题。例如,在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符。

在这里插入图片描述
  接收方数据链路层在物理层交付的比特流中提取帧,遇到第一个帧定界符时,认为这是帧的开始,当遇到转义字符时就知道其后面的一字节内容虽然与帧定界符相同,但它是数据而不是帧定界符。剔除转义字符后,将其后面的内容作为数据继续提取,对于转义字符也是相同的处理。当再次提取到帧定界符时,表明这是帧的结束。

  思考: 在上层交付给数据链路层的协议数据单元中,既包含了帧定界符,又包含了转义字符,应该怎么处理呢?
  方法仍然是在发送帧之前对帧的数据部分进行扫描,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符。需要说明的是转义字符是一种特殊的控制字符,其长度为1个字节,十进制值为27,而并不是E、S以及C这三个字符。

   ⋄ \diamond 面向字节的物理链路是用字节填充(或称字符填充)的方法来实现透明传输。
   ⋄ \diamond 对于面向比特的链路,应该使用比特填充的方法来实现透明传输。

  例: HDLC协议对0111110001111110组帧后对应的比特串为( A )
      A. 011111000011111010  B. 011111000111110101111110
      C. 01111100011111010    D. 011111000111111001111101
     分析: 高级数据链路控制协议HDLC采用帧头和帧尾中的标志字段作为帧定界符,其值为01111110;HDLC为了实现“透明传输”,采用“零比特填充法”(每5个连续1 后面插入一个比特0)。

在这里插入图片描述
  为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大一些。如图所示,帧的数据部分的长度应远大于帧头和帧尾的长度,这样才能提高帧的传输效率。因为仅从数据链路层来看,帧的数据部分才是帧正要传输的数据,帧头和帧尾是为了实现数据链路层功能而额外添加的。
在这里插入图片描述
  考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,称为最大传送单元 MTU。

2.1 总结

  ■ 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
    ⋄ \diamond 帧头和帧尾中包含有重要的控制信息。
    ⋄ \diamond 帧头和帧尾的作用之一就是帧定界。
  ■ 透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
    ⋄ \diamond 面向字节的物理链路,使用字节填充(或称字符填充)的方法实现透明传输。
在这里插入图片描述    ⋄ \diamond 面向比特的物理链路,使用比特填充的方法实现透明传输。
在这里插入图片描述  ■ 为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些。
  ■ 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU (Maximum Transfer Unit) 。
在这里插入图片描述

2.2 课后练习

  1. 某个数据链路层协议使用下列字符编码:
    字符A的编码为01000111
    字符B的编码为11100011
    字符ESC的编码为11100000
    字符FLAG的编码为01111110
    使用字符FLAG作为帧定界符,字符ESC作为转义字符。现在要对待传输的4个字符A、B、ESC、FLAG封装成帧。若物理链路是面向字符的,则封装出的帧的二进制位序列是( C )
    A. 11100000  01000111  11100011  11100000  01111110  11100000
    B. 01111110  01000111  11100011  11100000  01111110  01111110
    C. 01111110  01000111  11100011  11100000  11100000  11100000  01111110  01111110
    D. 11100000  01000111  11100011  11100000  11100000  11100000  01111110  11100000

  2. 某个数据链路层协议使用下列字符编码:
    字符A的编码为01000111
    字符B的编码为11100011
    字符ESC的编码为11100000
    字符FLAG的编码为01111110
    使用字符FLAG作为帧定界符,字符ESC作为转义字符。现在要对待传输的4个字符A、B、ESC、FLAG封装成帧。若物理链路是面向比特的,则封装出的帧的二进制位序列是( D )
    A. 11100000 01000111 11100011 11100000 01111110 11100000
    B. 01111110 01000111 11100011 11100000 01111110 01111110
    C. 11100000 01000111 110100011 111000000 011111010 11100000
    D. 01111110 01000111 110100011 111000000 011111010 01111110

3. 差错检测

  实际的通信链路都不是理想的,比特在传输过程中可能会产生差错: 1可能会变成0,而0也可能变成1,这称为比特差错
  如下图所示,比特流在传输过程中,由于受到各种干扰,就可能会出现比特差错或称为误码。

在这里插入图片描述
  在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER(Bit Error Rate)。
  思考: 比特在传输过程中出现了错误,但是接收方的数据链路层又是通过怎样的方法才能知道呢?
  使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

  奇偶校验
    ⋄ \diamond 在待发送的数据后面添加一位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。
    ⋄ \diamond 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
    ⋄ \diamond 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检) 。

在这里插入图片描述
  循环冗余校验 CRC(Cyclic Redundancy Check):
    ⋄ \diamond 收发双方约定好一个生成多项式G(x);
    ⋄ \diamond 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码) ,将其添加到待传输数据的后面一起传输;
    ⋄ \diamond 接收方通过生成多项式来计算收到的数据是否产生了误码。

在这里插入图片描述
在这里插入图片描述
  [循环冗余校验CRC举例1]: 待发送的信息为101001,生成多项式为 G ( x ) = x 3 + x 2 + 1 G(x)= x^3 + x^2 + 1 G(x)=x3+x2+1,计算余数。

在这里插入图片描述
  [循环冗余校验CRC举例2]: 接收到的信息为101101001,生成多项式为 G ( x ) = x 3 + x 2 + 1 G(x)= x^3 + x^2 + 1 G(x)=x3+x2+1,判断传输是否误码?

在这里插入图片描述

3.1 总结

  ■ 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
  ■ 要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
  ■ 循环冗余校验CRC有很好的检错能力 (漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
  ■ 在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。

3.2 课后练习

  1. 下列属于奇偶校验码特征的是( A )
    A. 只能检查出奇数个比特出现误码的情况  B. 只能检查出偶数个比特出现误码的情况
    C. 能检查出任意数量个比特出现误码的情况  D. 漏检率比CRC低
   分析: 差错控制:检错编码(循环冗余CRC、奇偶校验码(奇校验码、偶校验码都只能检查出奇数个比特错误))
            纠错编码(海明码=汉明码(发现双比特错,纠正单比特错))

  2. 要发送的数据为101110。采用CRC的生成多项式为。则应添在数据后面的余数是( B )
    A. 1001  B. 011  C. 111   D. 11
   分析: 被除数为101110000,除数为1001,得到余数为011。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值