评论

收藏

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

网络安全 网络安全 发布于:2021-07-05 17:47 | 阅读数:481 | 评论:0

  
   

  • 2. 封装成帧


    • 2.1 总结
    • 2.2 课后练习

  • 3. 差错检测


    • 3.1 总结
    • 3.2 课后练习



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

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

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

DSC0003.png
  另外以太网还规定了帧间间隔时间为96比特的发送时间,因此MAC帧并不需要帧结束定界符。

DSC0004.png
  需要说明的是,中间间隔还有其他作用。

    透明传输是指数据链路层对上层交付的传输数据并没有任何限制,就好像数据链路层不存在一样。
  我们来举例说明,下图所示的是发送方数据链路层收到其上层交付的协议数据单元,给其添加帧头和帧尾,使其成为帧。为了简单起见,我们只画出了帧头和帧尾中的帧定界标志,帧定界标志也就是一个特定数值。
DSC0005.png
  思考: 如果在上层交付的协议数据单元中,恰好也包含了这个特定数值,接收方还能正确接收该帧吗?

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

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

    思考: 在上层交付给数据链路层的协议数据单元中,既包含了帧定界符,又包含了转义字符,应该怎么处理呢?
  方法仍然是在发送帧之前对帧的数据部分进行扫描,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符。需要说明的是转义字符是一种特殊的控制字符,其长度为1个字节,十进制值为27,而并不是E、S以及C这三个字符。
     ⋄ \diamond ⋄ 面向字节的物理链路是用字节填充(或称字符填充)的方法来实现透明传输。
   ⋄ \diamond ⋄ 对于面向比特的链路,应该使用比特填充的方法来实现透明传输。
    例: HDLC协议对0111110001111110组帧后对应的比特串为( A )
      A. 011111000011111010  B. 011111000111110101111110
      C. 01111100011111010    D. 011111000111111001111101
     分析: 高级数据链路控制协议HDLC采用帧头和帧尾中的标志字段作为帧定界符,其值为01111110;HDLC为了实现“透明传输”,采用“零比特填充法”(每5个连续1 后面插入一个比特0)。
DSC0008.png
  为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大一些。如图所示,帧的数据部分的长度应远大于帧头和帧尾的长度,这样才能提高帧的传输效率。因为仅从数据链路层来看,帧的数据部分才是帧正要传输的数据,帧头和帧尾是为了实现数据链路层功能而额外添加的。
DSC0009.png
  考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,称为最大传送单元 MTU。


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

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,这称为比特差错
  如下图所示,比特流在传输过程中,由于受到各种干扰,就可能会出现比特差错或称为误码。
DSC00013.png
  在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER(Bit Error Rate)。
  思考: 比特在传输过程中出现了错误,但是接收方的数据链路层又是通过怎样的方法才能知道呢?
  使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

    奇偶校验
    ⋄ \diamond ⋄ 在待发送的数据后面添加一位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。
    ⋄ \diamond ⋄ 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
    ⋄ \diamond ⋄ 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检) 。
DSC00014.png
  循环冗余校验 CRC(Cyclic Redundancy Check):
    ⋄ \diamond ⋄ 收发双方约定好一个生成多项式G(x);
    ⋄ \diamond ⋄ 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码) ,将其添加到待传输数据的后面一起传输;
    ⋄ \diamond ⋄ 接收方通过生成多项式来计算收到的数据是否产生了误码。

DSC00015.png
DSC00016.png
  [循环冗余校验CRC举例1]: 待发送的信息为101001,生成多项式为 G ( x ) = x 3 + x 2 + 1 G(x)= x^3 + x^2 + 1 G(x)=x3+x2+1,计算余数。

DSC00017.png
  [循环冗余校验CRC举例2]: 接收到的信息为101101001,生成多项式为 G ( x ) = x 3 + x 2 + 1 G(x)= x^3 + x^2 + 1 G(x)=x3+x2+1,判断传输是否误码?

DSC00018.png


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。
  

  
关注下面的标签,发现更多相似文章