定义
数据链路层的核心任务是在物理层提供的比特流基础上,提供可靠的数据传输,并确保数据能正确的从一个设备发送到另一个设备
功能
向网络层提供一个定义良好的服务接口
将数据封装成帧/从比特流中解析帧
错误检测和纠正
调节数据流
介质访问控制
帧(Frame)
在数据链路层,数据以帧的形式进行传输,每一帧通常包含以下三部分:
- 帧头:包含地址信息(源地址、目的地址)、帧类型、控制信息等
- 数据:承载来自网络层的数据报文
- 帧尾:通常包含校验和用于检测数据传输错误

网络层到数据链路层会将数据封装成帧
数据链路层到物理层将帧转换为比特流

字节计数法
在帧的头部添加一个字段,指明该帧的字节数

优点
简单易实现,占用的额外开销少
缺点
如果计数字段的数据被传输错误,会导致数据同步错误,接收端可能会错误地解析数据
字符填充法
使用特殊字符(如SOH和EOT),并在数据部分中避免特殊字符的冲突

如果数据中包含了SOH或EOT,则用ESC来填充,避免误判
优点
解决了字节计数法的同步问题,适用于字符流
缺点
增加了额外的转义字符,可能会占用带宽
比特填充法
使用特定的比特模式作为帧的起始和终止标志,并在数据部分中避免比特模式的冲突,数据中如果连续出现5个1,则自动填充0

优点
适用于任何比特流,不局限于字符编码
缺点
需要额外的比特填充,稍微增加了传输开销
物理层编码法
数据报封装成帧之后,直接在物理层使用信号的变化来标识帧的起始和结束,而不依赖特定的比特模式
优点
不需要填充比特,不会增加额外的开销
缺点
依赖物理层的编码方式,不适用于所有链路层协议
错误检测
数据在传输过程中,由于各种因素,可能导致比特错误。数据链路层提供错误检测机制,保证数据传输的可靠性,使得接收端可以检测出数据的错误并采取响应的措施(如请求重传)
奇偶校验
奇检验还是偶校验是发送方与接收方实现协商好的
不论是奇校验还是偶校验,判断依据都是数据中1的个数的奇偶性
数据1的个数+校验位 = 满足奇校验或偶校验的要求
优点
实现简单,开销小
缺点
检测能力弱,只能检测奇数个比特的错误,偶数个比特错误无法检测
校验和
校验和是一种常用的错误检测方法,广泛用于TCP/IP协议中,具体操作方法如下:
- 发送方将待发送的数据分成若干段
- 将这些数据段进行二进制求和
- 若求和过程中产生进位,则将进位部分回卷相加
- 最后将求和结果取反,作为校验和附加在数据后发送
- 接收方验证后如果结果全部是1,说明数无误,否则说明数据有问题
优点
比奇偶校验强,能检测更多错误,简单高效,计算量小
缺点
不能检测所有错误
循环冗余校验
CRC是一种广泛用于数据链路层的错误检测方法,常用于以太网、HDLC、PPP等协议
- 发送方和接收方事先约定一个叫做生成多项式的二进制序列
- 生成多项式如果有
n位,发送方在发送数据末尾添加n - 1个0 - 发送方使用末尾添加0的数据数据除以生成多项式,得到的余数为
CRC码 - 发送方发送原始数据
+CRC - 接收端收到数据之后,用同样的生成多项式去除,如果余数为0,则数据无误;否则数据有误
生成多项式
生成多项式不是随机的,也不是根据数据临时决定的,是事先由协议规定好的,固定不变的
- 每一种协议在制定之初就明确规定了使用的
CRC生成多项式 - 不同协议使用的生成多项式不同,且标准化
- 发送端和接收端都按照协议规定使用相同的固定生成多项式进行计算
错误检测方法对比
| 检测方法 | 附加开销 | 实现难度 | 错误检测能力 | 常用协议 |
|---|---|---|---|---|
| 奇偶校验 | 1bit | 简单 | 弱 | 串行通信 |
| 校验和 | 16bit | 较简单 | 中等 | TCP/UDP |
| CRC校验 | 16bit或32bit | 中等 | 非常强 | Wi-Fi,HDLC |
介质访问控制子层
该层属于数据链路层的一个子层,主要负责在共享介质上协调多个节点的传输,确保各节点按照一定规则访问信道
广播
当任何一个节点传输一帧数据时,其它节点都会收到一个副本
ALOHA协议
发送机制
- 节点一旦有数据就立刻发送,无需监听信道状态
- 不关心其它节点是否在发送,属于"盲发"
冲突处理
- 节点会等待一段时间(随机退避)后再尝试发送
理论最大信道利用率
- 大约有
18.4%
时隙ALOHA
- 将时间划分为"时隙",节点只能在时隙开始时发数据
- 冲突智能发生在同一个时隙内,不再有"部分重叠",冲突概率降低
- 理论信道利用率
36.8% - 要求各节点系统时间同步,增加了实现复杂度
载波监听多路复用协议
ALOHA:想说什么就说什么
CSMA:先听一下这个频道是不是有人在说话,如果没人说话,我才开口
| 协议类型 | 描述 |
|---|---|
| 1-坚持 | 监听到信道空闲时立即发送,若忙则持续监听直到空闲立刻发 |
非坚持CSMA |
如果信道忙就随机等待一段时间后重试,避免抢占引发"集体冲突" |
| p-坚持CSMA | 一般用于时隙信道:监听空闲后以概率p发送,1-p的概率继续等待下一个时隙 |
1坚持型载波监听多路访问
节点会不断监听信道,一旦发现空闲,立刻抢占发送
信道忙就继续监听,直到空闲就马上发,不等待、不犹豫、不随机
非坚持型载波监听多路访问
发送数据前监听信道,如果信道空闲,立刻发送
信道忙不会持续监听信道,随机等待一段时间后再重复上面的操作
p坚持型载波监听多路访问
再监听到信道空闲时,不一定马上发,而是以概率p发送,以概率1-p等待下一个时隙
这是一个折中的策略