数据链路层功能: 在物理层物理链路的基础上验证数据差错,为上层的网络层提供无比特差错传输服务。
一.数据链路
①链路: 一个结点连接到相邻节点的一段物理线路
②数据链路: 物理线路+通信协议
- 网络适配器: 实现协议的软/硬件
二.数据链路层的传输
由于计算机网路分层的独立性和灵活性,再学习某一个层时,可以忽略上下层,以逻辑链路的情况学习该层
- 封装帧: 将网路层传输的IP数据报,添加首部尾部封装
- 生成帧检验序列: 在帧封装过程中,添加帧检验序列,用于检测在传输过程中是否发生了比特错误。
- 传输帧: 帧传输到物理层进行实际的传输
- 接收帧: 物理层接收到传输过来的帧,并将它们进行解码,恢复为二进制数字
- 检验帧: 接收端的数据链路层会检验接收到的帧
- 提取帧: 数据完整性通过时,数据链路层会解析帧头,提取发送端封装的数据部分
- 传递数据: 将提取到的数据传递到网络层进行进一步处理
三.封装成帧
基于分组(IP数据报)传输的原理封装(打包)
首部和尾部能起到帧定界的作用
- 帧定界: 让计算机明确帧的完整性
- MTU: 帧数据传输上限
定界符: 区分帧的开头和结尾,确认数据是否完整。
- SOH: ASCLL码中的开始控制符(00000001)
- EOT: ASCLL码中的结束控制符(00000100)
四.透明传输
错误定界: 当数据部分恰好出现定界符,帧会错误区分头尾
解决方法
- 转义字符(字符填充): 在数据部分中的SOH/EOT(干扰识别)前面添加转义字符ESC使其透明化
五.差错检测
比特差错: 比特在传输过程中出错。
误码率: 错误比特传输在总比特传输的占比
循环冗余检验: 确定长度为(n+1)的p,进行CRC检验
举例:
①假定传输的数据M=101001(k=6)
②假定商定好的传输除数P=1101(n=3位)
③模2运算:
2
n
∗
m
2^n*m
2n∗m得出被除数据
M
∗
2
n
=
101001
∗
1000
=
101001000
=
M
+
(
3
个零
)
M*2^n=101001 * 1000=101001000=M+(3个零)
M∗2n=101001∗1000=101001000=M+(3个零)
商Q=110101
余数R=001作为FCS
发送端发送数据为:101001拼001=1011001001
结论:
发送端发送:
2
n
∗
M
(数据)
∗
F
C
S
冗余码
2^n*M(数据)* FCS冗余码
2n∗M(数据)∗FCS冗余码
接收端: 接受数据后进行CRC检验若余数为0 则数据无差错,接受数据,反之有差错,丢弃数据。
①只能保证数据的无差错接受
②将可靠传输问题抛出到下一层
六.数据链路层检测情况
在OSI中,数据链路层要实现可靠传输,所以有CRC校验,帧编号,帧确认,帧重传 的策略机制
通信质量好的传输链路: 不进行帧确认,帧重传,出错了由上层进行改正。
通信质量差的传输链路: 进行帧确认,帧重传,向上层提供可靠传输。