3.1数据链路层的功能
数据链路层在物理层提供服务的基础上向网络层提供服务。起主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
3.2什么是帧
帧是数据链路层的协议数据单元,而网络层的协议数据单元是IP数据报(也叫做数据报或者是分组、包),数据链路层将网络层传递下来的IP数据报封装成帧,同时又把帧中的IP数据报交给网络层。
3.3封装成帧
将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。帧长等于数据部分的长度加上首部和尾部的长度。首部和尾部中含有很多控制信息,他们一个重要的作用就是帧定界。
3.4透明传输
如果数据中恰好出现与帧定界符相同的比特组合(会误认为“传输结束”而丢弃后面数据),那么就要采取有效的措施解决这个问题即透明传输。简而言之,透明传输就是不管所传数据是什么样的比特组合,都应当能在链路传送。
3.4.1组帧
数据链路层之所以要把比特组合成帧为单位传输,是为了在出错时只重发出错的帧,而不用重发所有数据,从而提高效率。为了使接收方能正确地接受并检查所传输的帧,发送方必须依据一定的规则把网络层递交的分组封装成帧即为组帧。组帧主要解决帧定界、帧同步、透明传输等问题;以下有四种组帧方法:
字符计数法
字符计数法指在帧头用一个计数字段来标明帧内字符数。目的节点的数据链路层收到字节计数值时就知道后面跟随的字节数,从而确定帧结束的位置。
这种方法的最大问题在于如果计数字段出错,即失去了帧边界划分的依据,那么接收方就无法判断所传输帧结束位和下一帧的开始位,无法同步。
字符填充的首尾定界符法
字符填充法用特定字符来定界一帧的开始或结束,在上图中‘SOH’代表了一帧的开始,‘EOT’代表一帧的结束。倘若帧中出现了EOT即数据内某段比特流数据正好与标记字段重复解决办法如下;
为了使信息位中出现的特殊字符不被误判为帧的首尾定界符,可在特殊字符前面填充一个转义字符(ESC)来加以区分,以实现数据的透明传输。接收方收到转义字符后就会知道后面紧跟的是数据信息,而不是控制信息。
零比特填充的首尾标志法
零比特填充法允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特模式,即“01111110”来标志一帧的开始或者结束,为了防止误判,发送方数据每遇到5个连续的1将自动在其后插入一个0;接受方只需逆操作。
零比特填充法很容易由硬件来实现,性能优于字符填充法。
违规编码法
因为曼彻斯特编码不使用高-高,低-低来表示,所以如果使用高-高,低-低来表示帧起始和终止就不会与数据冲突 。
由于字节计数法中技术字段的脆弱性和字符填充法实现上的复杂性与不兼容性,目前较常用的组帧方法是比特填充法和违规编码法
3.5差错控制
由于信道噪声等原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制。
通常利用编码技术进行差错控制,主要有两类:自动重传请求ARQ—在ARQ方式中,接收端检测出差错时,就设法通知发送端重发,直到正确为止。前向纠错FEC—在FEC方式中,接收端不但能发现差错,而且能确定比特串的错误位置,从而加以纠正。因此,差错控制又可分为检错编码和纠错编码。
检错编码
检错编码都采用冗余编码技术,其核心思想是在有效数据被发送前,先按某种关系附加一定的冗余位,构成一个符合某一规则的码字后再发送。
1.奇偶校验码
如果是奇校验码,它由n-1位信息元和1位校验元组成,在附加一个校验元后1的个数为奇数;
如果是偶校验码,在附加一个校验元后1的个数为偶数。
2.循环冗余码(Cyclic Redundancy Code,CRC)
任何一个由二进制数位串组成的代码都可以与一个只含有0和1两个系数的多项式建立一一对应关系
生成多项式若为:1101,它的多项式形式
发送端发送过程↑
接收端接受过程↑
凡是数据链路层接收的帧均默认无差错。
纠错编码
最常见的纠错编码是海明码,其原理是在信息有效位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关几个校验位的值发生变化,这不但可以发现错位,而且能指出错位的位置。