第三章:数据链路层(一)

数据链路层基本概念

结点:主机、路由器
链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。
数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。
:链路层的协议数据单元,封装网络层数据报。
数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。

数据链路层功能概述

数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。

功能:

  • 为网络层提供服务。无确认无连接服务,有确认无连接服务,有确认面向连接服务。
  • 链路管理,即连接的建立、维持、释放(用于面向连接的服务)。
  • 组帧
  • 流量控制:限制发送方
  • 差错控制:(帧错/位错)

封装成帧&透明传输

封装成帧就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。

首部和尾部包含许多的控制信息,他们的一个重要作用:帧定界(确定帧的界限)。
帧同步接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。
组帧的四种方法:1.字符计数法,2.字符(节)填充法,3.零比特填充法,4.违规编码法。

第三章:数据链路层(一)
透明传输

透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就“看不见”有什么妨碍数据传输的东西。
当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
1.字符计数法
 帧首部使用一个计数字段(第一个字节,八位)来标明帧内字符数。当某一个帧的第一个字节变化了,那么所有的帧都会出错!!!!

第三章:数据链路层(一)
2.字符(节)填充法

如下图所示,因为帧是非ASCII码文本文件组成的,所以在EOT之前可能也会存在与定义的EOT一样,因此,需要使用字符填充。
第三章:数据链路层(一)
字符填充的过程:在前面添加转义字符ESC
第三章:数据链路层(一)

3.零比特填充法
与字符填充法的区别是:首部与尾部的标识符是一样的。
第三章:数据链路层(一)
4.违规编码法
第三章:数据链路层(一)
4种方法总结
由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充违规编码法

差错控制(检错编码)

1.差错的来源
概括来说,传输中的差错都是由于噪声引起的。

全局性 1.由于线路本身电气特性所产生的随机噪声(热噪声}是信道固有的,随机存在的.
    解决办法:提高信噪比来减少或避免干扰。(对传感器下手)
局部性 ⒉.外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。
    解决办法:通常利用编码技术来解决。
第三章:数据链路层(一)
2.数据链路层的差错控制

第三章:数据链路层(一)
数据链路层编码VS物理层的数据编码
数据链路层编码和物理层的数据编码与调制不同。物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,如曼彻斯特编码。而数据链路层的编码针对的是一组比特,它通过冗余码的技术实现一组二进制比特串在传输过程是否出现了差错。
冗余编码
在数据发送之前,先按某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规则。接收端根据收到码字是否仍符合原规则,从而判断是否出错。
检错编码—奇偶校验码
第三章:数据链路层(一)
可以通过下面的题理解:答案选D:
第三章:数据链路层(一)
思路:可以发现源码中“1”的个数为4,为偶数,那么采用奇校验之后,“1”的个数应该为奇数5,所以选D。
奇偶校验码特点:只能检查出奇数个比特错误,检错能力为50%。
检错编码—CRC循环冗余码
第三章:数据链路层(一)
所以上面图中最终发送的数据为:原始数据加上FCS:1101 0110 1111 10
第三章:数据链路层(一)
在数据链路层仅仅使用循环冗余检验CRC差错检测技术,只能做到对帧的无差错接收,即“凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。
链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。(因为出错的帧丢弃了)
纠错编码—海明码
海明码:发现双比特错,纠正单比特错。
工作原理:动一发而牵全身。
第三章:数据链路层(一)
1.确定校验码位数r
海明不等式:2^r >= k+r+1;r为冗余信息位(添加的冗余码位数),k为信息位(原始数据的位数)。
以下图为例:
第三章:数据链路层(一)
2.确定校验码和数据的位置
第三章:数据链路层(一)
3.求出校验码的值
第三章:数据链路层(一)
从上面的表可以看到:P1的最后一位为1,因此它可以校验所有最后一位为1的数据:即D1、D2、D4、D5。
求校验码的值使用:令所有要校验的位异或=O。
P1=D1⊕D2⊕D4⊕D5=1⊕0⊕1⊕0=0
同理可以求出P2:P3;P4.
P2=D1⊕D3⊕D4⊕D6=0;
P3=0
P4=1
所以将P1、P2、P3、P4的值带入,可以得到101101对应的海明码为:0010011101
4.检错并纠错

第三章:数据链路层(一)

令所有要校验的位异或运算。
P1检验的位数(此时需要包含P点)
  P1⊕D1⊕D2⊕D4⊕D5=0 ⊕1⊕1⊕1⊕0=1
P2检验的位数
  P2⊕D1⊕D3⊕D4⊕D6=0 ⊕1⊕1⊕1⊕1=0
P3检验的位数
  P3⊕D2⊕D3⊕D4=0 ⊕1⊕1⊕1=1
P4检验的位数
  P4⊕D5⊕D6=1⊕0⊕1=0
二进制序列为0101,恰好对应十进制5,这样就找到了出错的位置,即第五位。