03数据链路层
03数据链路层
1. 数据链路层的设计
1.1 数据链路层的功能
- 成帧(Framing):也叫组帧。将比特划分成数据帧来检测和纠正物理层在传输中可能出现的错误。
- 差错控制(Error Control):处理传输中出现的差错
- 流量控制(Flow Control):确保发送方的发送速率不大于接收方的处理速率
1.2 数据链路层提供的服务
- 无确认无连接服务( Unacknowledged connectionless )
- 有确认无连接服务( Acknowledged connectionless )
- 有确认有连接服务(Acknowledged connection-oriented)
2. 成帧
- 字节计数法:固定长度字节为一帧
- 带字节填充的定界符法:使用定界符(FLAG),比如 01111110,即 0x7E,用于区分前后两个不同的帧
- 带比特填充的定界符法:定界符:两个0比特之间,连续6个1比特,即01111110,0x7E
- 物理层编码违例:选择的定界符不会在数据部分出现
2.1 基于帧进行的差错控制
链路存在的问题
- 差错(incorrect):数据发送错误
- 丢失(lost):接收方未收到
- 乱序(out of order):先发后到,后发先到
- 重复(repeatedly delivery):一次发送,多次接收
解决方法
- 确认:接收方校验数据,并给发送法应答
- 定时器:发送方启用定时器,防止丢失
- 顺序号:接收方检查序号,防止乱序递交,重复递交
2.2 基于帧进行的流量控制
问题
- 接收方的接收缓冲区溢出
解决方案
- 基于反馈的流量控制
- 基于速率的浏览控制
3. 差错控制
- 码字:一个包含m个数据位和r个校验位的n位单元
- 码率:码字中不含冗余部分所占的比例,可以用m/n表示
Definition (海明距离 Hamming distance)
两个码字之间不同对应比特的数目
Theorem (海明距离编码)
- 为了检查出d个错(比特错),可以使用海明距离为 d+1 的编码
- 为了纠正d个错,可以使用海明距离为 2d+1 的编码
3.1 检错码
- 在被发送的数据块中,包含一些冗余信息,但这些信息只能使接收方推断是否发生错误,但不能推断哪位发生错误,接收方可以请求发送方重传数据
Definition (奇偶校验 Parity Check)
增加1位校验位,可以检查奇数位错误
Definition (校验和 Checksum)
- 发送方进行 16 位二进制补码求和运算,计算结果取反,随数据一同发送。
- 接收方进行 16 位二进制补码求和运算(包含校验和),结果非全1,则检测到错误。
Definition (循环冗余校验 Cyclic Redundancy Check,CRC)
- 双方规定多项式
- 将原始数据D乘以2n (相当于在D后面添加 n 个 0),产生k+n位二进制位模式,
- 用G对该位模式做模2除,得到余数R(n位,不足n位前面用0补齐)即为CRC校验码
3.2 纠错码
- 发送方在每个数据块中加入足够的冗余信息,使得接收方能够判断接收到的数据是否有错,并能纠正错误(定位出错的位置)
Definition (海明码)
- 海明码在 数据位(Data bits) 中插入 冗余校验位(Parity bits),这些校验位用于错误检测和纠正。
- 海明码的校验位存放在 位置(即 1、2、4、8…),这些校验位计算 特定比特的奇偶性。
Theorem (海明码冗余位数计算)
设计单比特纠错海明码:给定个信息位,个校验位,纠正单比特错,需满足
Definition (RS码)
- RS会将需要编码的流数据重新排列为以符号(Symbol)为单位的数据块
- m表示符号的大小,如 m=4 表示每个符号由4位二进制数组成
- 对于一个(n, k)RS编码,k为原始数据符号数,n-k为校验符号数
- n-k=2t,t表示能够纠正的错误数

4. 基本的数据链路层协议
4.1 乌托邦式单工协议
Definition (乌托邦式单工协议假设)
- 单工协议:数据单向运输
- 完美信道:帧不会丢失或受损
- 始终就绪:发送方/接收方的网络层始终处于就绪状态
- 瞬间完成:发送方/接收方能够生成/处理无穷多数据
乌托邦:
- 不处理任何流量控制或纠错工作
- 接近于无确认的无连接服务,必须依赖更高层次解决上述问题
Definition (乌托邦式单工协议)
发送方
- 在循环中不停发送
- 在网络层获得数据
- 封装成帧
- 交给物理层
- 完成一次发送
接收方 - 在循环中持续接收
- 等待帧到达
- 从物理层获得帧
- 解封装,将帧中的数据传递给网络层
- 完成一次接收
4.2 无错信道的停等式协议
Definition (无错信道的停等式协议假设)
- 不再假设接收方能够处理以无限高速进来的数据
- 但假设通信信道不会出错,并且数据传输保持单向,但需要双向传输链路(半双工物理信道)
Definition (无错信道的停等式协议)
发送方发送一帧后暂停,等待确认到达后发送下一帧。接收方完成接收后,回复确认接收。
发送方
- 完成一帧发送
- 等待确认到达
- 确认到达后,发送下一帧
接收方 - 完成一帧接收后
- 交给物理层一个哑帧
- 作为成功接收上一帧的确认
4.3 有错信道上的单工停等式协议
Definition (有错信道上的单工停等式协议假设)
通信信道可能出错,导致:
- 帧在传输过程中可能会被损坏,接收方能够检测出来
- 帧在传输过程中可能会丢失,永远不可能到达接收方
Definition (有错信道上的单工停等式协议)
发送方
- 初始化帧序号0,发送帧
- 等待:正确的确认/错误的确认/超时
- 正确确认:发送下一帧
- 超时/错误确认:重发
接收方 - 初始化期待0号帧
- 等待帧达到
- 正确帧:交给网络层,并发送该帧确认
- 错误帧:发送上一个成功接受帧的确认
Definition (信道利用率)
其中为帧大小(bits),为信道容量(bits/s),,为总延迟(s),为单程延迟。
5. 流量控制
Definition (滑动窗口)
- 发送窗口(SWND):在收到对方确认的信息之前,可以连续发出的最多数据帧数
- 接收窗口(RWND):可以连续接收的最多数据帧数
5.1 回退N(Go-Back-N)协议
Definition (回退N协议)
发送窗口大于1,接收窗口为1。当接收端受到一个出错帧或乱序帧,丢弃所有的后续真,并且不为这些帧发送确认。发送端超时后,重传所有未被确认的帧
5.2 选择性重传(Selective Repeat)协议
Definition (选择性重传协议)
发送窗口大于1,接受窗口大于1。若发送方发出连续的若干帧后,收到对其中一帧的否认帧,或某一帧的定时器超时,则只重传改出错帧或计时器超时的数据帧。
Theorem (选择重传协议滑动窗口长度)
6. 数据链路协议实例
6.1 PPP协议
Definition (PPP协议)
PPP协议,全称是 Point-to-Point Protocol(点对点协议),是一种在两个节点之间直接通信的网络层下的数据链路层协议,用于建立、配置、维护和拆除点对点连接。

Definition (字节填充)
- 避免在信息字段中出现和标志字段一样的比特组合(0X7E)
- 当PPP使用异步传输时,定义转义字符0X7D,并使用字节填充
- 将信息字段中出现的0x7E 字节转变成为2字节序列(0x7D, 0x5E)
- 若信息字段中出现一个0x7D 字节, 则将其转变成为2字节序列(0x7D, 0x5D)
- 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变
在发送端进行了字节填充,链路上传递的信息字节数超过原来的信息字节数。接收端进行字节填充相反的工作,恢复为原来的信息

Definition (零比特填充)
PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续传送),不是异步传输(逐个字符地传送)
- 信息字段中出现了和标志字段 F 完全一样的 8 比特组合(0x7E)
- 发送端在 5 个连 1 之后填入 0 比特再发送出去;
- 在接收端把 5 个连 1 之后的 0 比特删除

6.2 PPPoE
Definition (PPPoE(Point-to-Point Protocol over Ethernet))
提供在以太网链路上的PPP连接