欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!
文章目录
- 前言
- 1 通信信道类型
- 2 数据链路
- 3 帧
- 4 透明传输
- 5 差错检测
前言
在计算机网络通信中,数据链路层起着关键作用。它为直接相连的网络设备之间提供可靠的数据传输服务。本文将系统介绍数据链路层的通信方式、帧封装机制以及如何使用循环冗余检验 (CRC) 实现差错检测,确保无比特差错的传输。
1 通信信道类型
①点对点信道
点对点信道采用一对一的通信方式,在两个设备之间直接传输数据,常用于串行线路或某些专用网络中。
②广播信道
广播信道采用一对多的通信方式,将数据包发送给所有接入信道的设备。在广播信道上,主机需通过共享信道协议进行协调,以避免数据冲突和干扰。
2 数据链路
①链路 (Link)
链路是无源的点到点物理线路段,中间没有任何交换节点,也称为物理链路。
②数据链路 (Data Link)
当链路中添加控制数据传输的协议的硬件和软件后,就构成了数据链路,也称为逻辑链路。
3 帧
①封装成帧 (Framing)
在传输过程中,需要对数据进行封装,在一段数据的前后加上首部和尾部,构成一个帧。首部和尾部的主要作用是进行帧定界,即确定每一帧的开始和结束。
②最大传送单元 (MTU)
MTU 规定了每帧的数据部分的长度上限,避免数据包过大导致传输失败。
③控制字符作为帧定界符
- SOH (Start Of Header):放在帧的首部,表示帧的开始。
- EOT (End Of Transmission):放在帧的尾部,表示帧的结束。
4 透明传输
①定义
透明传输指的是在数据链路层中,无论发送的数据包含何种比特组合,都能确保数据按照原样、不受干扰地传输到接收端。
“透明”意味着即使数据中存在与控制字符(如 SOH、EOT 等)相同的比特模式,这些数据也不会被链路层误解为帧的起始或结束,从而避免数据边界的错误解析。
在数据链路层透明传送数据:无论发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层。
【情景引入】
如果数据内容中包含的某些字节的二进制代码与控制字符 (如 SOH、EOT) 相同,数据链路层可能会误判帧边界,导致传输错误。
【解决方案】
用“字节填充”或**“字符填充**”法解决透明传输的问题。
在检测到与控制字符冲突的字节时,通过添加特殊字符来避免错误解析。这种填充技术确保无论数据的比特组合如何,都能无误传输,实现透明传输。
5 差错检测
①误码率 (BER)
在数据传输过程中,比特可能出现错误(如 1 被误判为 0,或 0 被误判为 1)。
误码率 (BER) 是一段时间内错误比特占比特总数的比率,用于衡量传输质量。
②循环冗余检验 (CRC)
a. CRC 原理与计算
-
划分数据组:将数据划分为长度为 (k) 比特的组。
-
添加冗余码:CRC 运算会在每组数据后面添加 (n) 位冗余码,构成帧并发送。
-
计算步骤:
- 对数据 (M) 进行模 2 运算,将其扩展为 (k + n) 位。
- 用事先选定的多项式 (P)(长度为 (n + 1) 位)对扩展后的数据进行除法,得到商 (Q) 和余数 (R)。
- 将余数 (R)(长度为 (n) 位)作为冗余码附加到原数据 (M) 后,一起发送。
【CRC 冗余码的计算举例】
③帧检验序列 (FCS)
FCS 是在帧的末尾添加的冗余码,用于检测传输中的比特差错。
【注意】
循环冗余检验 CRC 和帧检验序列 FCS 并不等同:
- CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
- FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
④常用的 CRC 生成多项式
CRC 检验的效果取决于选用的生成多项式。以下是常见的生成多项式:
- CRC-16:(X^{16} + X^{15} + X^2 + 1)
- CRC-CCITT:(X^{16} + X^{12} + X^5 + 1)
- CRC-32:(X^{32} + X^{26} + X^{23} + X^{22} + X^{16} + X^{12} + X^{11} + X^{10} + X^8 + X^7 + X^5 + X^4 + X^2 + X + 1)
【注意】
“无比特差错”与“无传输差错”区别:
- 可靠传输:数据链路层的发送端发送什么,在接收端就收到什么。
- 传输差错可分为两大类:
- 比特差错;
- 传输差错:帧丢失、帧重复或帧失序等。
- 在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输。
- 要实现可靠传输,还必须再加上帧编号、确认和重传等机制。