前言

数据链路层是 TCP/IP 协议栈中最底层的协议。

其解决的问题是:局域网内相连的主机之间数据的交付问题。

本文主要基以太网来进行数据链路层的介绍。

1. 数据链路层简介

  • 数据链路层

    主要负责在同一个本地网络(局域网)中的两个设备之间进行数据的传输。(但是数据链路层也可以实现广域网下的两个设备之间数据的传输,此时就不涉及 MAC 了)

    • 常见的局域网通信的协议:以太网、WIFI、令牌环……

本文主要探讨的数据链路层通信的是:局域网协议以太网协议

数据链路层的核心功能:

  1. 成帧

    将从网络层接受到的数据包(IP 数据包、局域网的 ARP 请求/应答包)大伯,添加当前数据链路层的报文信息。例如:以太网在头部添加报头信息,在尾部添加信息,形成的数据称为“帧”。这个帧在数据链路层的传输的基本单位

  2. 物理寻址

    数据链路层还需要得到当前的目标主机(可以是路由器)的 MAC 地址(Media Access Control Address,介质访问控制地址)。在本地网络中,设备之间是不能通过 IP 地址进行直接进行通信的,而是通过一个唯一的、烧录在网卡上的物理地址 MAC 地址来进行的。


MTU

上面谈到了数据链路层需要对上层的数据进行成帧处理。对于上层交付的数据,数据链路层是有要求的。

  • MTU

    MTU(Maximum Translation Unit,最大传输单元)相当于是对传输的数据的限制。这个限制对于不同的数据链路层对物理层进行的限制。例如:以太网中规定,以太网帧中的数据最小长度是 46 字节(当数据量不足 46 字节的时候,以太网会自己填充),最大数据长度是 1500 字节。注意这个数据量是没有计算自己的报头信息的。

由于下层数据链路层对传输的数据有大小的限制,则对上层网络层协议就会产生一定的影响:

  • 当上层传输层交付的数据大于了 MTU 的时候,网络层就需要对数据进行分片。但是分片的丢包风险是很大的,所以进一步我们需要减少分片的可能。

    1. TCP:TCP 协议对数据量的传输进行了限制。滑动窗口控制发送的数据量,每一次发送的 MSS 也会受到下层 MTU 的影响。
    2. UDP:UDP 协议并没有对数据量的传输进行限制。如果需要实现流量控制,就需要应用层来限制每次发送的数据大小了。

MAC

  • MAC 地址:设备的“身份证”。

    为了精准地管理交通,每台联网设备在底层数据传输都必须有一个独一无二的标识。这就是 MAC 地址:也叫做 物理地址硬件地址

    格式:通常是一个 48 位的十六进制数,看起来像这样:00-1A-2B-3C-4D-5E 或 00:1A:2B:3C:4D:5E。

    全球唯一:这个地址在设备出厂时就被固化在网卡(NIC)中,理论上全球没有两个相同的 MAC 地址。

    作用:在本地网络中(家庭Wi-Fi),数据帧的传递是靠 MAC 地址来寻址的,而不是 IP 地址。交换机通过记录每个端口对应的 MAC 地址来知道该把数据帧转发给谁。

    关于交换机,小编不做介绍,大家可以自行了解。

    如果大家想要了解数据链路层如何获取对应主机的 MAC 地址,可以参考小编的另外一文ARP协议


2. 以太网帧报文格式

  • 如下图:

    在这里插入图片描述


  • 我们需要解决两个问题:

    1. Q:以太网协议中的报头和有效载荷如何分离?

      A:以太网协议采用固定长度的报头。在数据首部有14字节的内容和尾部有4字节的内容。

    2. Q:有效载荷是如何交付给上层的?

      A:在以太网协议中有一个字段:2为类型。通过两位的类型就能得知上层是利用的上面类型的协议了。


下面我们来详细介绍一下这些字段:

  1. 目标地址 && 源地址

    指明了目标主机/当前主机的 MAC 地址。

  2. 类型

    这是一个关键字段。指明了当前数据的上层协议是什么。例如:IPv4(0x0800)、IPv6(0x86DD)……

  3. 数据

    上层交付的数据。通常是 46~1500字节。如果不够 46 字节会进行填充。

    • 上层交付的数据会有哪些呢?

      数据链路层的上层是网络层,但是交付数据的不一定就是 IP 协议。还可能交付数据的是 ARP 协议内容 / RARP 协议内容。

  4. CRC:

    CRC(循环冗余校验)只,用于差错检测。覆盖范围从 “目标 MAC 地址”到“数据”结束。

  5. 这里小编省略了两个字段:前导码、帧起始界定符。读者有兴趣自行了解。

3. 以太网工作场景

在以太网中进行通信,主要的设备就是交换机

  • 交换机的记录:

    • 当一台设备(比如说:主机A)第一次发送一个帧的时候,交换机就会把这个帧的源 MAC 地址和它来自哪一个端口号不是传输层的端口,而是物理的端口)记录在字节的 MAC 地址表中。很快地,交换机就会获取到整个局域网中所有设备的 MAC 地址和端口的对应关系。
  • 交换机的工作:

  1. 当一个帧到达交换机的时候,交换机查看帧的目标 MAC 地址。

  2. 然后查看自己的 MAC 地址表:

    • 进行单播:如果表中有这个目标 MAC 地址,交换机就会把这个帧从对应的端口进行发送。完成精准投递。
    • 进行广播:如果目标 MAC 地址是 FF:FF:FF:FF:FF:FF,交换机就会把这个帧从除了来源端口的所有端口都发送出去。
    • 进行未知单播:如果目标 MAC 不存在,则采取广播方式。
Logo

纵情码海钱塘涌,杭州开发者创新动! 属于杭州的开发者社区!致力于为杭州地区的开发者提供学习、合作和成长的机会;同时也为企业交流招聘提供舞台!

更多推荐