在Linux网络中,数据链路层位于物理层之上,网络层之下,其主要职责是将网络层的IP数据包封装成帧,并通过物理链路发送到目标设备。同时,它还负责接收来自物理层的帧,并将其解封装为数据包,传递给网络层。在Linux网络中,最常见的数据链路层协议是以太网协议(Ethernet)。
以太网
以太网帧格式
- 源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址), 长度是 48 位,是在网卡出厂时固化的
- 帧协议类型字段有三种值,分别对应 IP、ARP、RARP
- 帧末尾是 CRC 校验码
MAC 地址
MAC 地址是网络设备的唯一标识符,用来识别数据链路层中相连的节点。其在网卡出厂时就确定了, 不能修改。其长度为 48 位, 即 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。
以表格展示了MAC地址和IP地址的主要区别:
特性 | MAC地址 | IP地址 |
---|---|---|
定义 | 数据链路层的物理地址,用于标识网络设备。 | 网络层的逻辑地址,用于标识设备在网络中的位置。 |
地址长度 | 48位,通常以12位十六进制数表示如00:1A:2B:3C:4D:5E 。 | IPv4:32位(4字节),以点分十进制表示(如192.168.1.1 )IPv6:128位,以冒号分隔的八组四位十六进制数表示(如2001:0db8:85a3::8a2e:0370:7334 )。 |
作用范围 | 局域网内(LAN),不会跨越路由器。 | 可跨越局域网、广域网和互联网,通过路由器转发。 |
分配方式 | 由IEEE分配给制造商,烧录到硬件中,通常不可更改。 | 由网络管理员或自动分配服务(如DHCP)分配,可更改。 |
传输单位 | 数据帧(Frame),用于同一局域网内的通信。 | 数据包(Packet),用于跨网络的通信。 |
设备识别 | 用于同一局域网内的设备识别。 | 用于跨网络的设备识别。 |
MTU
MTU(Maximum Transmission Unit,最大传输单元)是指网络中能够传输的单个数据包的最大字节数,它是数据链路层的概念,用于限制链路层一次性转发的数据帧的最大尺寸。
以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,即 MTU 为 1500,ARP 数据包的长度不 够 46 字节,要在后面补填充位。不同的网络类型有不同的 MTU,如无线网络 MTU 为1492,蓝牙 MTU 为672.
由于数据链路层 MTU 的限制, 对于较大的 IP 数据包要进行分包。IP 协议格式如下:
将较大的 IP 包分成多个小包, 并给每个小包打上标签,每个小包 IP 协议头的 16 位分片标识都是相同的。每个小包的 IP 协议头的 3 位标志字段中, 第 2 位置为 0, 表示允许分片, 第 3 位来表示结束标记(当前是否是最后一个小包, 是的话置为 1, 否则置为 0)。
到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是 IP 层不会负责重新传输数据。
- MTU 对 UDP 协议的影响:一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)), 那么就会在网络层分成多个 IP 数据报。这多个 IP 数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果 UDP 数据报在网络层被分片, 整个数据被丢失的概率就大大增加了.
- MTU 对于 TCP 协议的影响:TCP 的一个数据报也不能无限大, 还是受制于 MTU. TCP 的单个数据报的最大消息长度, 称为 MSS(Max Segment Size),TCP 在建立连接的过程中, 通信双方会进行 MSS 协商. 最理想的情况下, MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU). 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值. 然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS.

ARP 协议

ARP 数据报的格式
- 注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次, 对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的
- 硬件类型指链路层网络类型,1 为以太网
- 协议类型指要转换的地址类型,0800 为 IP 地址,0806为 ARP 协议,0835 为 RARP 协议
- 硬件地址长度对于以太网地址为 6 字节
- 协议地址长度对于和 IP 地址为 4 字节
- op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答
ARP协议的工作原理
ARP协议的工作流程主要包括以下步骤:
步骤 | 操作 |
---|---|
1. 查询缓存 | 发送设备(如主机A)首先在本地ARP缓存中查找目标设备(如主机B)的MAC地址。如果找到,则直接使用该MAC地址发送数据。 |
2. 发送ARP请求 | 如果缓存中没有目标设备的MAC地址,主机A会广播一个ARP请求报文。该报文包含主机A的IP和MAC地址,以及目标设备的IP地址,MAC地址填 FF:FF:FF:FF:FF:FF,op填1。 |
3. 接收并响应 | 网络中的所有设备都会收到ARP请求,但只有目标设备(主机B)会响应。主机B会发送一个ARP响应报文,包含其MAC地址,op填2。 |
4. 更新缓存 | 主机A收到ARP响应后,将目标设备的IP和MAC地址映射关系存储到ARP缓存中,以便后续通信。 |
5. 数据传输 | 主机A使用目标设备的MAC地址将数据封装到以太网帧中,并发送给目标设备。 |
