4.1.1 数据链路和帧

  • 数据链路和数据链路的区别
    • 链路(Link)是指的从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
    • 数据链路(Data Link)则是另一个概念,这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。不同的链路上协议也不同。

image.png

  • 数据链路层把网络层交下来的数据封装成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。
  • 在因特网中,网络层协议数据单元就是IP数据报(或简称为数据报、分组或包)。数据链路层封装的帧,在物理层变成数字信号在链路上传输。

image.png
本章探讨数据链路层,就不考虑物理层如何实现比特传输的细节,我们就可以简单的认为数据帧通过数据链路由节点A发送到节点B。
image.png

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

4.1.2.1 封装成帧

  • 封装成帧
    • 封装成帧,就是在将网络层的IP数据报的前后分别添加首部和尾部,这样就构成了一个帧。
    • 不同的数据链路层协议的帧的首部和尾部包含的信息有明确的规定,帧的首部和尾部有帧开始符和帧结束符,称为帧定界符。接收端收到物理层传过来的数字信号读取到帧开始字符一直到帧结束字符,就认为接收到了一个完整的帧。
    • 在数据传输中出现差错时,帧定界符的作用更加明显。
    • 每一种数据链路层协议都规定了所能够传送的帧的数据部分长度的上限—即最大传输单元 MTU(Maximum Transfer Unit),以太网的 MTU 为1500个字节。

image.png

4.1.2.2 透明传输

  • 透明传输
    • 帧开始符和帧结束符最好是不会出现在帧的数据部分的字符,通常我们电脑键盘能够输入的字符是ASCII字符代码表中打印字符,在ASCII字符代码表中,还有非打印控制字符,在非打印字符中有两个字符专门用来做帧定界符,代码SOH(Start Of Header)作为帧开始定界符,对应的二进制编码为0000 0001,代码EOT(End Of Transmission)作为帧结束定界符。

image.png

  • ASCII字符集中“头标开始”和“传输结束”是非打印控制字符。
  • 避免在用户使用键盘输入帧开始字符和帧结束字符。

image.png

  • 透明传输
    • 当数据部分是非ASCII字符代码表的文本文件时(比如二进制代码的计算机程序或图像等),情况就不同了。如果数据中的某一段二进制代码正好和SOH或EOT帧定界符编码一样,接收端就会误认为这就是帧的边界。
    • 现在就要想办法让接收端能够区分帧中EOT或SOH是数据部分还是帧定界符,我们可以在数据部分出现的帧定界符编码前面插入转义字符,
    • 如果传输的数据中,出现了帧开始字符和真结束字符,要添加转义字符,告诉接收端后面是数据。
    • 接收端收到后去掉转义字符,收到发送数据,这就是透明传输。
    • 不同的数据链路层协议,定义的转义字符不一样。

image.png

4.1.2.3 差错检验

  • 现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1,这就叫做比特差错。
  • 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的差错检验技术。
  • 要想让接收端能够判断帧在传输传输过程是否出现差错,需要在传输的帧中包含用于检测错误的信息,这部分信息就称为帧校验序列FCS(Frame Check Sequence)。

image.png

CRC运算示例:

  • 首先在要校验的二进制数据M=101001后面添加n位0,再除以收发双方事先商定好的n+1位的除数P,得出的商是Q,而余数是R(n位,比除数少一位),这个n位余数R就是计算出的FCS。
  • 假如要得到3位帧校验序列,就要在M后面添加3个0,就成为101001000,假定事先商定好的除数P=1101(4位),如图4-10所示,做完除法运算后余数是001,001将会添加到帧的尾部作为帧校验序列FCS,得到商Q=110101,这个商并没什么用途。

image.png