zoukankan      html  css  js  c++  java
  • 第三章 数据链路层

    思维导图:

    一、 数据链路层概述

    保证数据传输的有效、可靠

    •   差错检测和控制
    •   流量控制
      •    基于速率
      •    基于反馈

    帧(frame) = 帧头(head)+ 载荷 (payload field)+  帧尾(Trailer)

    •   head中有物理地址,trailer中有校验

    成帧

    •   将原始的位流分散到离散的帧中  

    四种成帧的方法

    1.  字符统计法

    •   在每个帧中第一个字段,标识长度。缺点:一旦出错,无法恢复

    2.  字节填充的标志字节法

    •   考虑了重新同步问题,每一帧采用一个特殊字节做帧界
    •   标志/标记字节(flag byte)
    •   传输数据中有特殊字节时,可以在前面加上转义符

    3.  比特填充的标志比特法

    •   位填充法(零比特填充法/透明传输)
    •   以01111110作为帧界,如果数据中出现该子段,在第五个1后面加上一个0即可

    4.  物理层编码违例法

    •   使用冗余信号,作为帧界
    •   如:4B/5B编码,32个模式只用了16个,剩下的作帧界

     二 、差错处理概述

    错误类型

    •   单个错误
    •   突发错误

    处理类型

    •   纠错:能够恢复正确,主要用于无限网络
    •   检错:仅仅检测出错误,不恢复,通常伴随重传,主要用于以太网

    码字

    •   包含数据位和校验位的n位单元(模式)

    海明距离

    •   两个码字之间不同位的数目,可用异或计算
    •   全部码字海明距离,取最小值
    •   海明距离为d+1的编码能检测出d位差错,如奇偶校验码,海明距离为2,可检测1位数字
    •   海明距离为2d+1的编码,能纠正d位差错。如:海明距离为5,可纠正2位的数字
      •   接受方与合法码字校验,取海明距离最小的那个合法码字

     三、纠一位错的海明码

    纠一位错需要的冗余位跟数据位的关系

        

    从而得到:

        

    其中,r:冗余位,m:传输数据数目

    校验位:凡是编号为2的乘幂的位

    • 校验位:1、2、4、8、16、32
    • 数据位:3、5、6、7、9、10、11

    校验位可以设置,依据为包括自身在内的一些位的集合的奇偶值

    •  将某一位数据位的编号展开成2的乘幂的和,那么每一项所对应的位即为该数据位的校验位(收方使用),反过来,校验位的校验集合也包括这个数据位
    •  如:11 = 1 + 2 +8 ,29 = 1+ 4 + 8 +16
    •  校验位1的校验集合为所有奇数位;校验位为2的校验集合:2、3、6、7、10、11

    具体流程

    •   发送方:根据校验集合填充校验位;数据直接填入数据位
    •   接受方:根据校验集合判定校验位是否出错,出错的位编号累加到计数器中。计数器为0,就没出错,否则相应的位数出错。

      

     可以用其解决一些突发性错误

    •   如,在k行,m+r列,按照列发送数据。纠正的突发性错误的个数小于等于发送矩阵的行数k
    •  

     四、检错码

    常见的检错码

    • 奇偶校验和
      •   奇偶取值等同于对数据位进行模2和运算
    • 互联网校验和
      •   校验和:进行模2加运算
      •        追加到报文尾部
      •        16位互联网校验和
    • 循环冗余校验和

    循环冗余检错码CRC

    •   工作原理:K位的帧 = K-1 次的多项式
    •   如1011001,(6阶7项多项式)
    •   生成多项式:G(x),G(x)为r阶
    •   m位帧的多项式:m > r , M(x) > G(x)

    发送方:发送的码字就是被除数减去模2除法的余数

        

    发送方:判定余数是否为零,为零就无错误

        

    模2运算,等同于异或运算

    生成多项式国际标准,通常采用CRC32标准:

        

     五、基本数据链路协议

    协议一(无限制的单工协议)

    • 数据单项传递
    • 收发双方的网络层都处于就绪状态(随时待命)
    • 处理的时间可以忽略不记(瞬间完成)
    • 可用的缓存空间无穷大(无限空间)
    • 信道不损坏、不丢帧(完美通道)

    协议二(半双工)

    • 取消接受方无限量允许发送
      • 接受方能够接收,就向发送方发送哑帧

    协议三(肯定确定重传)PAR(Positive Acknowledgement with Retransmission)

    也可叫做自动重传请求,ARQ(Automatic Repeat ReQuest)

    • 取消完美信道——有噪声
      • 接收方采用对正确帧的确认
      • 发送方启动一个定时器,过时就重传
      • 每个帧具有一个独一无二的序号,可以用来重排、重组和防止重复接收

          

    以下途径可提高效率:

    • 使用全双工(双方既可以是发送方,又是接收方)
    • 捎带确定——确认帧搭上外发的数据帧,启动一个捎带确认的定时器
    • 批发数据,也叫管道化的数据

    六、滑动窗口协议 ——协议四

    发送窗口:已经发送,未被确认

    接收窗口:期待被接收的帧的序列号

    • 发送窗口在规定时间内,没收到确认,导致重复发送,可以工作,但是浪费信道
    • 协议四,有了一个假设:忽略接收方处理到达帧的时间,RTT(Round Trip Time)来回时间,发送方,发出帧后,等待确定的这段时间,被阻塞

    提高带宽的利用率——批量发送

    • 信道容量:一帧从发出到目的期间,信道上能够容纳的帧数量
    • 带宽延迟积:B*D
    • 窗口值:W = 2*BD + 1,实际情况W比计算出来的值小

    出错处理策略

    •   丢弃出错帧和后续帧——协议五
    •   重传出错的帧——协议六

    小结

    七、回退n帧——协议五

    适合出错率较少的高速信道

    • 有一个隐含的接收窗口
    • 定义序列号seq的取值范围和滑动窗口W
    • 发送方连续发送至发送窗口满
    • 接收窗口为1,对出错帧不确认(引发超时)
    • 发送方超时重传,从未被确认帧开始

    发送方和接收方

     注意:

    • 采用统计确认,发送方一直保存着未被确认的帧
    • 滑动窗口长度(发送窗口):  W <= MAX_SEQ,防止确认帧的情况混淆

    八、 选择性重传——协议六

    工作原理

    •  

    否定确认NAK:接收方发送帧要求重传出错帧

     回退n帧和选择性重传的比较

    窗口选择

    •   发送窗口: W = (MAX_SEQ + 1) / 2
    •   发送窗口通常小于接收窗口

     三个协议窗口大小比较

  • 相关阅读:
    C++ 将对象写入文件 并读取
    IronPython fail to add reference to WebDriver.dll
    How to Capture and Decrypt Lync Server 2010 TLS Traffic Using Microsoft Tools
    .net code injection
    数学系学生应该知道的十个学术网站
    Difference Between Currency Swap and FX Swap
    Swift开源parser
    谈谈我对证券公司一些部门的理解(前、中、后台)[z]
    JDK8记FullGC时候Metaspace内存不会被垃圾回收
    JVM源码分析之JDK8下的僵尸(无法回收)类加载器[z]
  • 原文地址:https://www.cnblogs.com/zxj-262410/p/10620604.html
Copyright © 2011-2022 走看看