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

一.封装成帧

  • 封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。
  • 接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
    数据链路层协议的三个基本问题_第1张图片
  • 分组交换的一个重要概念:所有在互联网上传送的数据都以分组(即 IP数据报)为传送单位。网络层的IP数据报传送到数据链路层就称为帧的数据部分。在帧的数据部分的前面和后面分别添上首部和尾部,构成了一个完整的帧。首部和尾部的一个重要作用就是进行帧定界。此外,首部和尾部还包含许多必要的控制信息。
  • 每一种链路层协议都规定了所能传送的帧的数据部分长度上限 ------ 最大传送单元MTU
  • 当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。ASCII码是7位编码,一共可组合成128个不同的ASCII码,其中可打印的有95个,而不可打印的控制字符有33个。控制字符SOH放在一帧的最前面,表示帧的首部开始。另外一个控制字符EOT表示帧的结束。请注意,SOH和EOT都是控制字符的名称。如下图所示
    数据链路层协议的三个基本问题_第2张图片

二.透明传输

  • 当传送的帧是用文本文件组成的帧时(文本文件中的字符都是从键盘上输入的),其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放在这样的帧中传输过去,因此这样的传输就是透明传输。
  • 但当数据部分非ASCII码的文本时(如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地"找到帧的边界",把部分帧收下(误认为这是个完整的帧),而把剩下的那部分数据丢弃(这部分找不到帧定界控制符SOH)。
    数据链路层协议的三个基本问题_第3张图片
  • 上图所示的帧的传输显然就不是透明传输,因为当遇到数据中碰巧出现字符EOT时就传不过去了。数据中的EOT将被接收端错误地解释为传输结束的控制字符,而在其后面的数据因找不到SOH被接收端当做无效帧而丢弃。但实际上在数据中出现的字符EOT并非控制字符而仅仅是二进制数据00000100
  • 为了解决透明传输问题,就必须设法使数据中可能出现的控制字符SOHEOT在接收端不被解释为控制字符。具体做法是:发送端的数据链路层在数据中出现控制字符SOHEOT的前面插入一个转义字符ESC(其十六进制编码是1B,二进制是00011011)。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充或字符填充。如果转义符也出现在数据当中,那么解决方法任然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。
    数据链路层协议的三个基本问题_第4张图片

三.差错检测

  • 现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错: 1 可能会变成 0 ,而 0 也可能变成 1。这叫做比特差错。
  • 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER。
  • 目前在数据链路层广泛使用了循环冗余检验CRC的检错技术。
  • 在接收端对收到的每一帧经过CRC检验后,若判定这个帧没有差错,就接受。反之,就丢弃。在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接受
  • 传输差错可分为两大类:一类就是前面所说的最基本的比特差错,而另一类传输差错则更复杂些,这就是收到的帧并没有出现比特差错,但出现了帧丢失,帧重复或帧失序。例如,发送方连续传送三个帧:[#1]-[#2]-[#3],假定接收端的每个帧都没有比特差错,但却出现了下面几种情况
    传输差错
  • 为了让数据层向上提供可靠传输,所以在CRC检错的基础上,增加了帧编号确认重传机制。收到正确的帧就要向发送端发送确认。发送端在一定的期限内若没有收到对方的确认,就认为出现了差错,因此就进行重传,直到对方的确认为止。
  • 对于通信质量良好的有限传输链路,数据链路层协议不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务。如果在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务就由上层协议(如,传输层TCP协议)来完成。
  • 对于通信质量较差的无线传输链路,数据链路层使用确认和重传机制,数据链路层向上提供可靠的传输服务。

你可能感兴趣的:(计算机网络)