数据链路层

数据链路层使用的信道主要有以下两种类型:

  • 点对点信道:这种信道使用一对一的点对点通信方式。

  • 广播信道:这种信道使用一对多的广播通信方式。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。

数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:

  • 封装成帧

  • 透明传输

  • 差错检测

封装成帧

封装成帧(framing)就是在一段数据的前后分别添加首部尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。

透明传输

由于帧的开始和结束的标记使用专门指明的控制字符,因此,所传输的数据中的任何 8 比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。

“透明”表示:某一个实际存在的事物看起来却好像不存在一样。

“在数据链路层透明传送数据”表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层。

为了解决透明传输问题,就必须设法使数据中可能出现的控制字符在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现的控制字符的前面插入一个转义字符。

差错检测

现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1 可能会变成 0,而 0 也可能变成 1。这就叫做比特差错。比特差错是传输差错中的一种。

因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验 CRC(Cyclic Redundancy Check)的检错技术。

通过一个简单的例子来说明循环冗余检验的原理:

在发送端,先把数据划分为组,假定每组 k 个比特。现假定待传送的数据 M,CRC 运算就是在数据 M 的后面添加供差错检测用的 n 位冗余码 ,然后构成一个帧发送出去,一共发送(k +n )位

这 n 位冗余码可用以下方法得出:

  • 用二进制的模 2 运算进行 2n2^n 乘 M 的运算,这相当于在 M 后面添加 n 个0。

  • 得到的(k +n )位的数除以收发双方事先商定的长度为(n +1)位的除数 P ,得出商是 Q 而余数是 R(n 位,比 P 少一位)。

  • 这个余数 R 就作为冗余码拼接在数据 M 的后面发送出去。

这种为了进行检错而添加的冗余码常称为帧检验序列 FCS(Frame Check Sequence)

在接收端把接收到的数据以帧为单位进行 CRC 检验:把收到的每一个帧都除以同样的除数 P(模 2 运算),然后检查得到的余数 R。

  • 若余数 R =0,则判定这个帧没有差错,就接受(accept)。

  • 若余数 R ≠ 0,则判定这个帧有差错,就丢弃。

注意

在数据链路层若仅仅使用循环冗余检验 CRC 差错检测技术,则只能做到对帧的无差错接受,即:“凡是接收端数据链路层接受的帧,我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受。

Last updated