数据链路层

作用

数据链路关注的是相邻两个节点的那一段逻辑线路。在这一层中数据单元是帧。

信道

数据链路层使用的信道主要有两种类型:
  • 点对点信道:一对一
  • 广播信道:一对多

点对点通信

  1. 结点A的数据链路层将网络层交下来的IP数据报添加首部和尾部封装成帧。
  1. 结点A把封装好的帧发送给结点B的数据链路层
  1. 若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报上交给上面的网络层;否则丢弃这个帧。

三个基本问题

  • 封装成帧
  • 透明传输
  • 差错检测

封装成帧

封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。
接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部的一个重要作用就是进行帧定界,即确定帧的界限,此外首部和尾部还包含许多必要的控制信息。
notion image
请注意,SOH和EOT都是控制字符的名称。它们的十六进制编码分别是01(二进制是00000001)和04(二进制是00000100)。SOH(或EOT)并不是S,O,H(或E,O,T)三个字符。

透明传输

由于帧的开始和结束的标记是使用专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧定界的控制字符的比特编码一样,否则就会出现帧定界的错误。
为了解决透明传输问题,就必须设法使数据中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。具体的方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B,二进制是00011011)。而在接收端的数据链路层在把数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。
notion image

差错检测

现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这就叫做比特差错。目前在数据链路层广泛使用了循环冗余检验CRC (Cyclic Redundancy Check)的检错技术。