数据链路层帧传输的三个基本问题

来源:互联网 发布:拍照软件 编辑:程序博客网 时间:2024/05/22 14:04
  1. 封装成帧
  2. 透明传输
  3. 差错控制

封装成帧 :
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。
用控制字符进行帧定界的方法举例 :
这里写图片描述

  • SOH(Start Of Head):0x01
  • EOT(End Of Transmission):0x04

透明传输 :

这里写图片描述

解决透明传输问题:字节填充(byte stuffing)或字符填充(character stuffing)
发送端的数据链路层在数据中出现的控制字符“SOH”或“EOT”前插入一转义字符“ESC”。接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。 ESC:0x1B

如果转义字符也出现数据当中,怎么办?
在转义字符前面再插入一个转义字符。

ESC


差错控制 :
在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。 误码率与信噪比有很大的关系。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。 在数据链路层传送的帧中,广泛使用循环冗余检验 CRC 检错技术。

循环冗余检验的原理:
在发送端,先把数据 M 划分为组。假定每组 k 个比特,则需在 M 后面再添加供差错检测用的n 位冗余码一起发送。

n 位冗余码的计算方法
假设 M 分为一组,即 k = length(M) .

  1. 选定长度为 (n + 1) 位的除数P
  2. 用二进制模 2 运算进行 2n 乘M 的运算,并以此结果为被除数。
  3. 将得到的 (k + n) 位被除数除以除数P,得出商Q ,余数R,余数R即为所求n位冗余码。

例:M = 101001(k = 6)
设 n = 3, 除数 P = 1101, 被除数是 2nM = 101001000。 模 2 运算的结果是:商 Q = 110101, 余数 R = 001。 把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2nM + R 即:101001001,共 (k + n) 位。
这里写图片描述

接收端对收到的每一帧进行 CRC 检验

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

但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。 只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。
仅用循环冗余检验CRC差错检测技术只能做到无差错接受(accept)。“无差错接受”指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制

帧检验序列 FCS
在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。
CRC、FCS区别 :

  • CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
  • FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。

例:
要发送的数据为1101011011 。采用CRC的生成多项式是P(X) = X4 + X + 1 。

  1. 试求应添加在数据后面的余数。
  2. 数据在传输过程中最后一个1变成了0,问接收端能否发现?
  3. 数据在传输过程中最后两个1变成了0,问接收端能否发现?
  4. 采用CRC检验后,数据链路层的传输是否就变成了可靠的传输?

P(X) = X4 + X + 1 。// 第0、1、4位为1,其余位为0 。
P = 10011, n = 4 。// p有5位,所以n = 5 - 1 = 4 。
24 * 1101011011 = 11010110110000 。
11010110110000 / 10011 余数为 1110 。
添加的检验序列是1110;2、3均可发现。
缺乏重传机制,数据链路层的传输是不可靠的传输。

原创粉丝点击