目录:
一、数据链路层概述:
基本功能:
服务:
二、成帧:
基本介绍:
常用的成帧方式:
三、差错控制:
基础知识介绍:
简单的差错控制编码:
循环冗余码(CRC):
海明码:
四、介质访问控制(MAC):
争用协议:
无冲突协议:
有限争用协议:
五、局域网:
局域网概述:
逻辑链路控制子层(LLC):
以太网:IEEE 802.3
令牌环网:IEEE 802.5
无线局域网WLAN:IEEE802.11
虚拟局域网VLAN:
六、数据链路层协议:
PPP协议:
数据链路层是介于物理层和网络层之间的功能层次,基本功能是——将物理层提供的原始比特流的物理连接改造成为逻辑上无差错的数据传输链路,向网络层提供透明的、可靠的数据传输服务。换句话说就是:对下将物理转换为逻辑,对上提供相应的服务!
为了实现上面描述的基本功能,将数据链路层的主要功能分成四个板块——成帧、差错控制、流量控制和链路管理(后面会详细讲解,此处简述以构建知识体系!)。
一般,数据链路层会提供以下3种可能的服务!
无确认的无连接服务:(大多数局域网在数据链路层都会使用该服务)
两种适用场合:错误率很低的场合,差错控制留给上层;实时通信,如语音传输,因为在语音传输中延迟比数据受损更糟糕。
有确认的无连接服务:
适用场合:适用于不可靠的信道,如无线系统 802.11(WiFi)。
有确认的有连接服务:
适用场合:长距离且不可靠的链路,譬如:卫星通信、电话通信。这时如果采用有确认的无连接服务,丢失了确认可能导致一个帧被收发多次,因而浪费带宽。
什么是成帧?
将数据组合成数据块(又称为帧,是数据链路层的传输单位),即成帧。
为什么要用“帧”?
数据链路层接收到的比特流不能保证没有错误,接收到的比特个数可能小于、等于或者多于发送的比特数量,检测错误和纠正错误(如有必要)的工作是数据链路层的工作。
数据链路层将比特流分解成离散的帧,并且计算每一帧的校验和,并且将校验和作为帧的一部分发送出去。接收方在在接收数据帧的同时计算校验和,并和送过来的校验和进行比较,从而检测帧在传送的过程中是否发生了错误。
字节计数法:
原理:利用头部的一个域来指定该帧中的字节数,该域被称为计数字段。当目的主机的数据链路层接收到这个字节计数值的时候就知道后面跟随的字节数了,从而确定帧结束的位置。
优点:利用计数字段来确定帧的终止边界,使得数据不会和其他的信息混淆,所以不用采取其他的措施就可实现数据的透明传输,任何数据可以不受限制的进行传输。
缺点:一旦计数字段的值出错,就会使得帧边界识别错误(如下图)。
实际应用:
使用字符填充的首尾界定法:
原理:考虑到了出错之后的重新同步问题,让每个帧用一些特殊的字符作为开始和结束。
但是这种方法会出现一个问题——如果特殊字符是我们传输数据的一部分就会引起识别失误!
针对这个问题,我们采取字节填充的方法解决,在数据部分出现的特殊字符前面填充一些特殊的字节,如下图中的转义字符ESC。在转义字符ESC后面的特殊字符EOT将不会看作帧的开始结束字符。
缺点:和特定的字符编码集关系过于密切,不利于兼容;字节填充软硬件实现困难,依赖于所采用的字符编码集 。
使用比特填充的首尾标志法:
原理:用一组特定的比特模式(如:01111110)来标志数据帧的开头和结束。
但是这样会出现一个问题——如果数据段传输的数据刚好有01111110这一段咋办?
所以发送方在传输的数据段中碰到 5 个连续的 1 时,就自动在其后面填充一个 0 ;在接收方接收数据时,每收到连续的 5 个 1 就删除后面跟着的 0 。
优点:
正是因为这些优点,使用比特填充的首尾标记法得到了广泛的使用!
实际应用:IBM公司在20世纪70年代初提出的面向比特的同步数据链路控制SDLC (Synchronous Data Link Control)规程。
违规编码法:
原理:(个人理解:把用不上的编码做边界!)
缺点:但只适用于存在冗余编码的环境。
许多数据链路协议为了安全起见综合使用了上面介绍的这些成帧方法!
什么是差错控制?
信号在物理信道传输的过程中,可能会由于各种原因造成信号失真,从而实现数据传输错误,因此通信系统必须能检测差错,并且采取措施纠正它。这种用于对差错进行检测与纠正的技术即差错控制。
差错控制常用的方法及其工作机制:
——差错控制最为常用的方法就是差错控制编码。
——差错控制机制的工作过程包括发送方的差错控制编码过程和接收方的校验过程。
——发送方要发送给接收方的数据被称为信息位,为了让接收方进行差错校验而附加的位被称为冗余位,包含信息位和冗余位的数据单位被称为码字。
——发送方通过差错控制编码机制产生冗余位,然后将对应的码字发送到信道上。接收方的校验是指收到码字之后,检查信息位和冗余位之间的关系是否满足差错控制编码规则,从而判断传输过程中是否有差错发生。
当接收方检测到差错时有两种处理策略:自动请求重发(ARQ)和前向纠错(FEC)。
自动请求重发(ARQ):接收方设法通知发送方重发,直到收到正确的码元为止。
前向纠错(FEC):接收方不但能发现差错,而且能自动确定码元发生错误的位置,从而加以纠正。
为了实现上述相应的功能,将差错控制编码分为两种:检错码和纠错码。
检错码:指能发现差错的编码。运用于ARQ中。
纠错码:指不仅能发现差错还能纠正差错的编码。运用于FEC中。
为了让接收方进行差错校验而附加的位被称为冗余位,一般来讲冗余位越多,就更加能检错纠错,但是凡事都有一个上限,物极必反;因此我们引入编码效率来衡量。
编码效率R:衡量差错控制编码性能的一个重要参数,它是传输码字中信息位和码字长度的比值。
——若码字中的信息位为 k 位,编码时外加的冗余位为 r 位,则码字的长度为 k+r ,此时的编码效率为:
——R 越大,则信道中用于传送信息码元的有效利用率就越多。
奇偶校验码:
——发送方:附加1位冗余位,使码字中“1”的个数保持为奇数或偶数。
——接收方:根据所收到的码字中“1”的个数是奇数或偶数判别是否有传输差错。
——特点:
能够检测出奇数位错。(个人理解:偶数个位的错误对于冗余位产生的影响就相互抵消了。)
适用于这样的信道:其上发生的错误是孤立的。如:典型局域网链路的误码率大约为10-10
——缺点:单个校验位只能可靠地检测出奇数位错误。如果数据块因一个长的突发错误造成严重乱码,那么被检测出来的概率只有0.5,显然难以接受。
——冗余位取值举例:“1”的数目也要加上冗余位来看。
奇偶校验码是一种检错码;在实际使用的时候又分为垂直奇偶校验码、水平奇偶校验码和水平垂直校验码;下面我将对其一一介绍!
垂直奇偶校验码:
——又称为纵向奇偶校验码,它是要将发送的整个信息分为定长 p 位若干段(例如下图中的 q 段);每一段的后面按照 1 的个数为奇数或者偶数的规律加上一位奇偶校验码。
——逐位发送的顺序为(I11、I21、... ...、Ipi、r1、I12、I22、... ...、Ip2、r2、... ...、I1q、I2q、... ...、Ipq、rq)
——发送方可以边发送边产生冗余位,接收方可以在边接受边进行校验后去掉校验和。
——垂直奇偶校验码的编码效率R = p/(p+1),这种校验和能检测出每一列中的奇数位错误,对于突发错误来说,该方式对于差错的漏检率接近50%,因为奇数位错和偶数位错发生的概率是一样的。
为了应对突发错误的漏检率,我们又引入了水平奇偶校验码!
水平奇偶校验码:
——又称为横向奇偶校验码,是对于每个信息段的相应位进行横向编码,产生一个奇偶校验冗余位。