数据链路层的地位
数据链路层信道类型
3.1.1 数据链路和帧
- 链路(link):
- 一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
- 一条链路只是一条通路的一个组成部分。
- 也叫物理链路。
- 数据链路(datalink):
- 把实现控制数专输的协议的硬件和软件加到链路上,就构成了数据链路。
- 也叫逻辑链路。
- 典型实现:适配器(即网卡)
数据链路层协议数据单元:帧
使用点对点信道的数据链路层:
3.1.2 三个基本问题
1. 封装成帧
-
封装成帧:在一段数据的前后分别添加首部和尾部,构成一个帧。
-
首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。
-
最大传送单元MTU :规定了所能传送的帧的数据部分长度上限。
- 用控制字符作为帧界定符
- 控制字符SOH放在一帧的最前面,表示帧的首部开始。
- 控制字符EOT放在一帧的末尾,表示帧的结束。
2. 透明传输
问题:如果数据中的某个字节的二进制代码恰好和SOH或EOT一 样,数据链路层就会错误地’找到帧的边界",导致错误。
透明:
指某一个实际存在的事物看起来却像不存在一样。
“在数据链路层透明传送数据"表示:无发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层。因此,对所传送的数据来说,这些数据就“看不见”数据链路层有什么妨碍数据传输的东西。或者说,数据链路层就对这些数据来说是透明的。
用“字节填充”或“字符填充”法解决透明传输的问题:
具体的方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。
3. 差错检测
在传输过程中可能会产生比特差错:1→0,0→1。
循环冗余检验CRC原理:
- 在发送端,先把数据划分为组。假定每组k个比特。
- CRC运算在每组M后面再添加供差错检测用的n位冗余码,然后构成一个帧发送出去。一共发送(k+n)位。
CRC冗余码的计算:
双方事先约定一个(n+1)位除数P,用(k+n)位的数除以除数P,得出商是Q而余数是R(n位,比P少一位)。R就是CRC码。
这种为了进行检错而添加的冗余码常称为帧检验序列FCS。
循环冗余检验CRC和帧检验序列FCS并不是同一个概念。CRC是一种检错方法,而FCS是添加在数据后面的冗余码,在检错方法上可以选用CRC,但也可不选用CRC。
CRC冗余码计算举例:
计算方法如下:
实例:
广泛使用的生成多项式P(X):
例如:
“1101”用作除数。
注意:
- 仅用循环冗余检验CRC差错检测技术只能做到无差错接受。 即:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错"。 即:“凡是接收端数据链路层接受的帧均无差错’。
- “无比特差错"与“无传输差错"是不同的
- 可靠传输:数据链路层的发送端发送什么,在接收端就收到什么。
- 传输差错可分为两大类: ①比特差错;②传输差错:帧丢失、帧重复或帧失序等。
- 在数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。
- 要做到可靠传输,还必须再加上帧编号、确认和重传等机制。
参考资料:《计算机网络(第8版)》—— 谢希仁。