Chapter 3 数据链路层
数据链路层的设计问题
数据链路层在协议栈中的位置
- 向下:利用物理层提供的位流服务
 - 向上:向网络层提供明确的服务接口
 

数据链路层的功能
- 成帧:将比特流划分成“帧”的主要目的是为了检测和纠正物理层在比特传输中可能出现的错误,数据链路层功能需借助“帧”的各个域来实现
 - 差错控制:处理传输中出现的差错,如位错误、丢失等
 - 流量控制:确保发送方的发送速率,不大于接收方的处理速率
 
数据链路层提供的服务

成帧
分组与帧的关系

成帧的方式
字节计数法
用于无差错传输的情形

当某个计数字节出错时

帧的边界被破坏,导致一连串的错误。
带字节填充的定界符法
- 定界符 FLAG
 - 转移字节 ESC
 
带比特填充的定界符法
物理层编码违例
核心思想:选择的定界符不会在数据部分出现
差错控制
链路层存在的问题
信道的噪声导致数据传输问题:
- 差错:
 - 丢失
 - 乱序
 - 重复
 
解决方案
差错检测与纠正、确认重传
- 确认
 - 定时器
 - 顺序号
 
流量控制
链路层存在的另一个问题
接收方的处理速率是有限的:
- 接收方的接收缓冲区溢出
 
解决方案
- 基于反馈的流量控制
 - 基于速率的流量控制
 
差错检测和纠正
概述
- 
如何解决信道传输差错问题 增加冗余信息(或称校验信息)的策略
 - 
目标
 
保证一定差错检测和纠错能力的前提下,减少冗余信息量
- 
考虑的问题
 - 
信道的特征和传输需求
 - 冗余信息的计算方法、携带的冗余信息量
 - 
计算的复杂度
 - 
主要策略
 - 
检错码:在被发送的数据块中,包含一些冗余信息,但这些信息只能使接收方推断是否发生错误,但不能推断哪位发生错误,接收方可以请求发送方重传数据
 - 纠错码:发送方在每个数据块中加入足够的冗余信息,使得接收方能够判断接收到的数据是否有错,并能纠正错误 (定位出错的位置)
 
问题:纠错编码的最小码距与其检错和纠错能力
典型的检错码
奇偶校验
- 1位奇偶校验:增加1位校验位,可以检查奇数位错误
 

校验和
主要用于 TCP/IP 体系中的网络层和传输层
- 
发送方:进行 16 位二进制补码求和运算,计算结果取反,随数据一同发送
 - 
overflow 的那位,0 扩展,再加进去
 

- 接收方:进行 16 位二进制补码求和运算(包括校验和),结果非全 1,则检测到错误
 

循环冗余校验 CRC
CRC 校验码计算方法

CRC 校验码计算示例

四个国际标准生成多项式

典型的纠错码
设计纠错码
海明码
目标:以奇偶校验为基础,如何找到出错位置,提供 1 位纠错能力
校验位:2 的幂次方位,记为 p1,p2,p4,p8
每个校验位对数据位的子集做校验,缩小定位错误的范围
海明码缺省为偶校验:

- 海明码纠正的实现过程
 

- 使用海明码纠正突发错误
 

Reed-Solomon code (RS码)
以有限域运算为基础,提供多位纠错能力
基本的数据链路层协议
定义与假设
物理层、数据链路层和网络层的实现
关键假设
- 分层进程独立假设
 - 提供可靠服务假设
 - 只处理通信错误假设
 
基本的协议定义
乌托邦式单工协议
无错信道单工停止-等待协议
有错信道单工停止-等待协议
