数据链路层(Data Link)

  • 链路:从1个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点

image.png

  • 数据链路:在一条链路上传递数据时,需要要对应的通信协议来控制数据的传输
    • 不同类型的数据链路,所用的通信协议可能是不同的
      • 广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
      • 点对点信道:PPP协议(比如 2个路由器之间的信道)
  • 数据链路层的3个基本问题

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

      数据链路层 - 封装成帧

      image.png
  • 帧(Frame)的数据部分

    • 就是网络层传递下来的数据包(IP数据包、Packet)
  • 最大传输单元MTU(Maximum Transfer Unit)

    • 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
    • 以太网的MTU为1500字节

      数据链路层 - 透明传输

      image.png
  • 使用SOH (Start Of Header),作为帧开始符

  • 使用EOT(End Of Transmission),作为帧结束符
  • 数据部分一旦出现了SOH、EOT, 就需要进行转义

image.png

数据链路层 - 差错检验

image.png

  • FCS是根据数据部分+首部计算得出的

    CSMA/CD协议

  • CSMA/CD (Carrier Sense Multiple Access with Collision Detectio)

    • 载波侦听多路访问/冲突检测
  • 使用了CSMA/CD的网络可以称为是以太网(Ethernet),它传输的是以太网帧
    • 以太网帧的格式有:EthernetV2标准、IEEE的802.3标准
    • 使用最多的是:EthernetV2标准
  • 为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节
  • 用交换机组建的网络,已经支持全双工通信,不需要再使用CSMA/CD,但它传输的帧依然是以太网帧

    • 所以,用交换机组建的网络,依然可以叫做以太网

      Ethernet V2帧的格式

      image.png
  • 首部:目标MAC + 源MAC + 网络类型

  • 以太网帧:首部 + 数据 + FCS
  • 数据的长度至少是:64 - 6 - 6 - 2 - 4 = 46字节

    Ethernet V2标准

  • 当数据部分的长度小于46字节时

    • 数据链路层会在数据的后面加入一些字节填充
    • 接收端会将添加的字节去掉

image.png

  • 长度总结

    • 以太网帧的数据长度:46~1500字节
    • 以太网帧的长度:64~1518(目标MAC + 源MAC + 网络类型 + 数据 + FCS)

      网卡

      image.png
  • 网卡接收到一个帧,首先会进行差错检验,如果检验通过则接收,否则丢弃

  • Wireshark抓到的帧没有FCS, 因为它抓到的是差错检验通过的帧(帧尾的FCS会被硬件去掉)

    • Wireshark抓不到差错检验失败的帧

      PPP协议(Point to Point Protocol)

      image.png
  • Address字段:图中的值是OxFF,形同虚设,点到点信道不需要源MAC、目标MAC地址

  • Control字段:图中的值是0x03,目前没有什么作用
  • Protocol字段:内部用到的协议类型
  • 帧开始符、帧结束符:0x7E