功能
在物理层提供服务的基础上向网络层提供服务,主要作用为加强物理层传输比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路。
为网络层提供服务
对网络层,链路层的任务是将源机器网络层的数据传输到目标机器的网络层,其为网络层提供如下服务:
- 无确认无连接服务,对于丢失的帧,链路层不重发而是交给上层处理,适用于实时通信或误码率低的通信信道,如以太网;
- 有确认无连接服务,若超时未收到确认信号,则重传,适用于误码率较高的信道,如无线通信;
- 有确认面向连接服务,适用于可靠性、实时性要求高的场景。
有连接就一定要确认,不存在无确认的面向连接服务。
链路管理
数据链路层的建立、维持和释放过程被称为链路管理,主要用于面向连接的服务。此外在多个站点共享物理信道的情况下(如局域网),在站点间分配和管理信道也属于数据链路层管理的范畴。
界定帧、帧同步与透明传输
传输信息时,需要将网络层的分组封装成帧,即将额外添加首部和尾部,其中包含了很多控制信息,一个重要作用是帧定界。
透明传输则表示任意的比特组合都可以在链路上传送。
还有一些其他功能,直接在后面记录。
组帧
字符计数法
在帧的头部使用一个计数字段来表明帧内的字符数,从而确定帧结束的位置
此方法致命的缺陷在于如果计数字段错误,或者某位缺失,则之后所有数据会发生错误。
字符填充的首尾定界符法
使用特定的字符来定界一帧的开始和结束,为了使数据部分中能够传送这些特定字符,需要添加一个转义字符 进行区分。
零比特填充的首尾标志法
零比特填充法使用 01111110
来标志一帧的开始和结束,并且将数据部分中每连续 个 都后添加一个 ,接收时连续遇到 个 则在后面去除 .
此法可以使用硬件实现,性能优于字符填充法。
违规编码
使用没有定义的电气特性来界定帧的始末,如曼彻斯顿编码将 编为高 - 低电平对, 编为低 - 高电平对,因此可以用高 - 高或低 - 低电平对来表示帧的始末,局域网 就使用这种方式。
目前较常用的组帧方式是零比特填充法和违规编码法。
差错控制
比特在传输过程中可能会产生差错, 可能会被错误的传输,这就是 比特差错,其是传输差错的一种,本节仅讨论比特差错。
差错控制通常有两类,自动重传请求 ,和前向纠错 .
检错编码
采用冗余编码,在有效数据位后添加一定的冗余位,冗余位与数据位是相关的,因此可以根据冗余位检测是否产生差错。
奇偶校验码
奇偶校验码是一位校验码,指在数据位后添加一位奇/偶校验码后,整体中 的个数仍然为奇/偶,因此仅仅能检错但不能找出错误的位置;而二维奇偶校验码可以找出一位出错的位置进行纠错,可以检测出两位和三位的错误,但是无法确定出错的位置,另外校验码占据的空间有点多,传输效率低下。
循环冗余码(CRC)
又称多项式码,其规定一个生成多项式(最高位和最低为必须为 )作为除数,两式相除,最后的余数便是循环冗余码。
计算步骤如下,在源数据位后添加生成多项式的长度减去一的 ,个数位生成多项式的阶数(最高项的阶数,实际上就是位数减去 ),然后使用模 除法(异或操作),得到余数(位数和生成多项式的阶数相同)之后添加到源数据的末尾( 不能去)。
接收方受到数据之后,直接除以生成多项式,若无余数,则认为传输无差错,若有余数,则丢弃。
实际上具有纠错功能,但是数据链路曾只使用了它的检错功能,这是为了方便协议实现。
只可以实现一位的纠错,常见的有 编码,若验证余数为 ,则说明没有错误,否则余数就是出错的位置。
纠错编码
最常见的纠错编码就是海明码,其在数据中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中,当某一位出错时,就会引起有关几个检验为的值变化,从而指出错位的位置。
海明码的索引从 开始。
确定海明码的位数
设 为有效信息的位数, 为校验位的位数,则
若要检测两位错,则要再增加一位校验位。
确定校验位的分布
校验位 在海明码位号为 的位置上,即 、、、…
分组以形成校验关系
每个数据位使用多个校验位进行校验,需满足条件,被校验数据位的海明位号等于校验该数据位的各校验位的海明位号之和,校验位不需要再被校验。
如
应该在位置 上,则其由 校验
应该在位置 上,则其由 校验,其中 在位置 上
应该在位置 上,则其由 校验
应该在位置 上,则其由 校验
校验位取值
校验位 的值是所有由其参与校验的数据位异或运算得来,如
海明码的校验原理
利用校验位和相关的数据为进行奇偶校验检查,构成 个方程