计算机网络 | 数据链路层
- [计算机网络 | 数据链路层](#计算机网络 | 数据链路层)
-
- 基本概念
- 功能概述
- 封装成帧与透明传输
- 差错控制
-
- 差错是什么?
- 差错从何而来?
- 为什么要在数据链路层进行差错控制?
- 检错编码
-
- 奇偶校验码
- [CRC 循环冗余码](#CRC 循环冗余码)
- 纠错编码------海明码
- 小结
- 流量控制与可靠传输机制
参考视频:王道计算机考研 计算机网络
参考书:《2022年计算机网络考研复习指导》
计算机网络 | 数据链路层

基本概念

功能概述
- 为网络层提供服务
- 链路管理
- 组帧
- 流量控制
- 差错控制

封装成帧与透明传输
封装成帧
封装成帧就是加将数据加头加尾,相当于将数据打包。

透明传输
透明传输就是为了防止特殊的数据无法正常传输的的情况的发生,比如说在封装成帧的过程中出现数据中的某些标记符与开始/结束标记符恰巧重复等等情况。

字符计数法
在帧的首部使用一个计数字段(第一个字节,8bit)来表明帧内字符数。

缺点:如果在某一个帧内,标记位后面的某个字节的数据丢失,那么会影响后面的帧。
比如3 1 1 和 4 2 2 2,如果前面的帧丢失变成 3 1,那么后面的4就会被补到前面变成 3 1 4导致错误。
字符填充法
就是加头加尾分别标记开始结束,和零比特填充法(见下)对比,开始和结束的对应的字符不一样。

但有可能出现数据内某段比特流数据正好与标记字段重复,从而导致误判断的情况。
解决方法:添加转义字符。

零比特填充法

违规编码法
使用高-高,低-低来定界帧的起始和终止。
因为曼彻斯特编码不使用高-高,低-低来表示,所以如果使用高-高,低-低来表示帧起始和终止就不会与数据冲突。

小结
由于字节计数法中计数字段的脆弱性(计数字段错误将带来灾难性后果)以及字符填充法实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充法 和违规编码法。
差错控制

差错是什么?
数据链路层的差错的是比特的错误。
差错从何而来?

为什么要在数据链路层进行差错控制?
因为错误可以尽早发现,不会让一个错误的数据包发送了很长时间到达最终目的地之后才被发现,从而导致网络资源的浪费。
检错编码
奇偶校验码
- 奇校验码:添加 0/1 使得 1 的个数为奇数。
- 偶校验码:添加 0/1 使得 1 的个数为偶数。

缺点:只能检测出1、3、5、7、... 等等奇位数错误,检测成功率位50%。
CRC 循环冗余码
用传输数据除以生成多项式得到冗余码。
简化的例子:

实际运算步骤:

注意:
-
阶数就是最高位是哪位,然后位数-1,如10011就是5-1=4,1011就是4-1=3。
-
异或运算就是相同得0,不同得1,比如100和101做异或,结果就是001
-
余数添加到要发送的数据后面,称为帧检验序列FCS
示例:


需要注意的地方:

纠错编码------海明码
纠错编码:发现错误、找到位置、纠正错误。
工作流程:

海明距离:

一般而言,要检测 d 位错,码距至少要 d+1 位;要纠正 d 位错,码距至少要 2d+1 位。
第一步:确认校验码位数r
设有效数据有 m 位,校验码有 r 位。
海明不等式:2^r^ ≥ m + r + 1

第二步:确定校验码和数据的位置
规定校验码 P~i~ 在海明位号为 2^i-1^ 的位置上,其余各位为信息位。

第三步:求出校验码的值
分组以形成校验关系:
- 校验码 P~1~:对应 x~1~,二进制为 001,负责所有形如 1** 的数据位的校验(不包含校验位)。
- 校验码 P~2~:对应 x~2~,二进制为 010,负责所有形如 *1* 的数据位的校验(不包含校验位)。
- 校验码 P~3~:对应 x~4~,二进制为 100,负责所有形如 **1 的数据位的校验(不包含校验位)。
校验位取值:
校验位 P~i~ 的值为第 i 组(由该校验位校验的数据位)所有值求异或。

第四步:检测并纠错
每个校验组分别利用校验位和参与形成该校验位的信息位进行奇偶校验检查:

纠错方法1:找到不满足奇偶校验的分组取交集,再与满足奇偶校验的分组取差集,得到的就是错误位。

例如,4号校验码和1号校验码出错,取交集得5、7位中有错误,再因为2号校验码正确,7位无错,所以错误位是5。
纠错方法2:校验位和参与形成该校验位的信息位全部异或,校验方程S~3~S~2~S~1~的计算结果就是错误位的位号。

小结

流量控制与可靠传输机制
数据链路层的流量控制只针对发送方,由接收方来控制(控制方法:收不下就不回复确认),只限制发送方的帧的发送速率。
流量控制是为了让传输过程中的发送速度和接受速度匹配,减少传输出错与资源浪费。
流量控制方法:

窗口大小:
- 停止-等待协议:发送窗口大小 = 1,接收窗口大小 = 1。
- 后退N帧协议(GBN):发送窗口大小 ≥ 1,接收窗口大小 = 1。
- 选择重传协议(SR):发送窗口大小 > 1,接收窗口大小 > 1。
注:这三个协议的窗口大小都是固定的。
可靠传输:发送端发送什么,接收端就要接收到什么。

注:数据链路层的流量控制是点到点的,而传输层的流量控制是端到端的。
停止-等待协议(Stop-and-Wait)

停止-等待协议的无差错情况:

停止-等待协议的有差错情况:
- 数据帧丢失或出错
- ACK丢失
- ACK迟到
停止-等待协议的特点:
- 简单
- 信道利用率低。大部分时间数据都在路上,发送方很长时间闲置,资源浪费
停止-等待协议的性能分析:

信道利用率 & 信道吞吐率 :
