目录
数据链路层使用的信道主要有以下两种类型:
点对点信道:这种信道使用一对一点对点通信方式。
广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。
链路(link):链路就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
一条链路只是一条通路的一个组成部分
数据链路 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
* 现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
* 一般的适配器都包括了数据链路层和物理层这两层的功能。
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
首部和尾部的一个重要作用就是进行帧定界。接收方必须正确识别每个帧的开始和结束。
每一种链路层协议都规定了帧的数据部分长度的上限,即最大传送单元 MTU(Maximum
Transfer Unit,MTU)。
我们希望数据链路层提供的是一种“透明传输”的服务,即对上层交给的传输数据没有任何限制,就好像数据链路层不存在一样。1、字节填充法
2、零比特填充法
对于面向字符的物理链路,使用字节填充(byte stuffing)或字符填充(character stuffing)方法。
发送端的数据链路层在数据中出现的标记字符前面插入一个转义字符(例如,也用一种特殊的控制字符“ESC”)。
在接收端的数据链路层对转义字符后面出现的标记字符不再被解释为帧定界符,并且在将数据送往网络层之前删除这个插入的转义字符。
如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。
当物理链路提供的是面向比特的传输服务时(物理链路传送连续的比特流),帧定界标志可以使用某个特殊的比特组合,例如,后面将要介绍的PPP协议所使用的“01111110”。
由于帧的长度不再要求必须是整数个字节,可以采用开销更小的比特填充(Bit Stuffing)来实现透明传输。
在发送端,只要发现有 5 个连续 1,则立即填入一个 0。接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
数据链路层使用的信道主要有点对点信道和广播信道两种。
链路是从一个结点到相邻结点的一段物理线路,数据链路则是在链路的基础上增加了一些必要的硬件和软件的逻辑链路。
数据链路层传送的协议数据单元是帧。封装成帧就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
封装成帧要解决帧定界和透明传输问题(使用字符填充法和比特填充法)。
在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。误码率与信噪比有很大的关系。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
在帧的尾部设置一个差错检验字段存放整个帧(包含首部和数据)的差错检测码
这个差错检验字段常称为帧检验序列(Frame Check Sequence,FCS)
设原始数据 D 为 d 位二进制数
如果要产生 r 位CRC校验码 R,事先选定一个 r+1 位二进制位模式 G (称为生成多项式,收发双方提前商定),G 的最高和最低位为1
将原始数据 D 乘以 2 r (相当于在 D 后面添加 r 个 0),产生 d+r 位二进制位模式,用 G 对该位模式做模 2 除法,得到余数 R(r 位,不足 r 位前面用0补齐)即为CRC校验码
在接收端把接收到的数据除以同样的除数生成式G(模2运算),然后检查得到的余数,即进行 CRC 检验。
若得出的余数 R = 0,则判定这个帧没有差错,就接受。
若余数 R 0,则判定这个帧有差错,就丢弃。
只要经过严格的挑选,并使用位数足够多的除数 G,那么出现检测不到的差错的概率就很小很小。
在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。
循环冗余检验 CRC 和帧检验序列 FCS并不等同。
CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。
使用CRC这样的差错检测技术,只能检测出帧在传输中出现了差错,并不能纠正错误。
虽然任何差错检测技术都无法做到检测出所有差错,但通常我们认为:凡是接收端数据链路层通过差错检测并接受的帧,我们都认为这些帧在传输过程中产生差错的概率几乎为零。
要想纠正传输中的差错可以使用冗余信息更多的纠错码进行前向纠错。通过纠错码能检测数据中出现差错的具体位置,从而纠正错误。这种方法开销非常大。
通常采用下次课(可靠传输)将要讨论的确认重传机制来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,由上层协议去解决数据丢失的问题。