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

来自b站韩立刚老师的PPT总结

1、封装成帧

封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧

确定帧的界限首部和尾部的一个重要作用就是进行帧定界

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

  • 最大传输单元MTU(Maximum Transfer Unit):帧数据部分长度上限。 
  • 控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission)表示帧的结束。他们的十六进制编码分别是01(二进制是00000001)和04(二进制是00000100)

 试想:帧还未发送完,发送端出了问题,只能重发该帧。接收端却收到了前面的“半截子帧”,它会抛弃吗?为什么?

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

2、透明传输

若传输的数据是ASCII码中 “可打印字符(共95)个”时,一切正常,若传输的数据不是仅有 “可打印字符” 组成时,就会出现问题。如下图

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

用字节填充法解决透明传输的问题

  • 发送端的数据链路层在数据中出现控制字符“SOH"或“EOT”的前面插入一个转义字符“ESC"(其十六进制编码是1B)。 
  • 字节填充(bytestuffing)或字符填充(characterstuffing)一接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
  • 如果转义字符也出现数据当中,那么应在转义字符前插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个
  • 当传送的帧是用文本文件组成的帧时(文本文件中的字都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输

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

3、差错控制

  • 传输过程中可能会产生比特差错: 1可能会变成0而0也可能变成1。
  • 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(BitErrorRate)。
  • 误码率与信噪比有很大的关系。
  • 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。

法一:循环冗余检验(CRC)的检错技术。

法二:在数据后面添加上的冗余码称为帧检验序列FCS(FrameCheckSequence)

循环冗余检验CRC和帧检验序列FCS并不等同。

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

小结:

仅用循环冗余检验CRC差错检测技术只能做到无差错接受(accept)。

  • “无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。
  • 要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
  • 考虑:帧重复、帧丢失、帧乱序的情况  可以说“CRC是一种无比特差错,而不是无传输差错的检测机制”
  • OSI/RM模型的观点:数据链路层要做成无传输差错的!但这种理念目前不被接受!

4、MAC帧格式

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

  • 帧的长度不是整数个字节;
  • 用收到的帧检验序列 FCS 查出有差错;
  • 数据字段的长度不在 46 ~ 1500 字节之间。
  • 有效的 MAC 帧长度为 64 ~ 1518 字节之间。
  • 对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧