数据链路层,以太网帧, ARP 协议

2961 字
15 分钟
数据链路层,以太网帧, ARP 协议

一、 数据链路层与以太网基础#

1.1 数据链路层与网络层的核心定位#

  • 概念解释:数据链路层 (Data Link Layer) 是 OSI 模型中的第二层,负责在两个直接相连的物理节点(同一种数据链路节点)之间可靠地传递数据帧。与之对比,网络层 (Network Layer) 负责在不同网络之间进行路由选择和端到端的数据分发。

  • 笔记:

    • 对比理解(唐僧之白龙马比喻):

      • IP 地址(网络层):描述的是路途总体的起点和终点(例如从大唐到西天)。

      • MAC 地址(数据链路层):描述的是路途上的每一个区间的起点和终点(例如从某一站到下一站,由白龙马负责具体的一段路程)。

1.2 以太网技术标准与局域网特性#

  • 概念解释:

  • 以太网 (Ethernet) 并非指代某一种具体的网络硬件,而是一种广泛应用的技术标准。它既包含了数据链路层的内容,也定义了部分物理层规范(如网络拓扑结构、访问控制方式、传输速率等)。

  • 碰撞域 (Collision Domain) 是指在以太网(特别是早期共享介质网)中,同一时刻只能有一个节点发送信号,否则信号会互相干扰的物理网络范围。

  • 笔记:

    • 以太网特性:以太网是当前应用最广的局域网技术。并列的技术还包括令牌环网、无线 LAN 等。它规定了诸如必须使用双绞线、传输速率(10M, 100M, 1000M)等细节。

    • 局域网碰撞域与独占:局域网是一个“碰撞域”,在物理介质上,以太网是一个“独占资源”。

    • 发送效率思考:因为网络占用是独占的,使用的时间段越短越好。因此,主机发送的数据帧在数量上越少越好,以减少占用时间和碰撞概率。

1.3 核心标识:MAC 地址#

  • 概念解释:MAC 地址 (Media Access Control Address),即网卡的物理硬件地址,用于在数据链路层中唯一识别相连的节点。

  • 笔记:

    • 长度为 48 位(6 个字节),通常用 16 进制数字加冒号表示(如 08:00:27:03:fb:19)。

    • 通常在网卡出厂时固化,不可修改且保证唯一性。但在某些场景下(如虚拟机生成的并非真实 MAC,或者部分网卡支持用户配置),可能会出现冲突。

二、 以太网帧格式与数据边界限制#

2.1 以太网物理封装与帧结构#

  • 概念解释:以太网帧 (Ethernet Frame) 是数据链路层传输的基本协议数据单元。它由帧头(源/目的 MAC 及类型)、数据载荷、帧尾(CRC 校验)组成,是真正在网络物理介质上流动的数据封装格式。

  • 笔记:

    • 物理层与链路层的交接:主机在发送网络数据包前,必须经历一波物理封包。物理层面上流动的是 0101 比特流,但网络介质上真正流动的数据结构是数据帧。

    • 路由数据包流向实例(手写拓扑重点):

      • 逻辑路径:源 IP 192.168.2.2 →\rightarrow 目标 IP 172.168.2.2。

      • 物理网关:网关1 192.168.2.1 →\rightarrow 网关2 172.168.2.1。

      • 实际报文变换:源 MAC_A、目标 MAC_网关 →\rightarrow 源 MAC_网关、目标 MAC_B。物理网络流动的数据仅看到:源 MAC_A →\rightarrow 目标 MAC_B,携带数据包。主机的路由表决定了数据交给哪个物理机(网关)。

    • 帧格式拆解 (RFC 894):

      • 目的地址 (6字节) + 源地址 (6字节)。

      • 类型 (2字节):0800 代表 IP 数据报,0806 代表 ARP 请求/应答,8035 代表 RARP 请求/应答。

      • 数据 (46 ~ 1500 字节)。

      • CRC校验码 (4字节)。

2.2 数据帧大小的限制机制 (MTU)#

  • 概念解释:MTU (Maximum Transmission Unit) 即最大传输单元,这是由不同的数据链路层对应的物理硬件特性产生的包裹尺寸限制。

  • 笔记:

    • 大小界定:整个数据帧既不能太长,也不能太短(数据域不能太长也不能太少)。

    • 下限:数据域最小 4646 字节。如果应用数据(如 ARP 包)不够 4646 字节,必须在末尾加 PAD 进行填充(PAD 填充位可达 18 字节以补齐)。

    • 上限:数据域最大 15001500 字节,这被称为以太网的 MTU。

    • 帧总大小范围:64∼151864 \sim 1518 字节(包含 18 字节的以太网帧首尾开销)。不同的数据链路标准(如 FDDI 拨号链路)MTU 是不同的。

2.3 MTU 对网络层与传输层的影响#

  • 概念解释:分片 (Fragmentation) & 重组 (Reassembly):当网络层传下来的数据包大小超过链路层的 MTU 限制时,IP 层必须将大包切割成多个携带相同标识的小包进行传输,这极大地增加了数据传输的脆弱性。

  • 笔记:

    • 对 IP 协议的影响(分片机制):

      • 切割大包,给每个小包打标签,要求每个小包 IP 头部的 16 位标识 (id) 完全相同。

      • IP 头部 3 位标志字段:第 2 位置 0 表示允许分片;第 3 位表示结束标记(当前是否是最后一个小包,是的话置为 1,否则置为 0)。

      • 致命弱点:接收端按序重组,若任意一个小包丢失,会导致整个网络层重组失败。且 IP 层不负责重新传输数据。

    • 对 UDP 协议的影响:

      • UDP 携带数据若超过 14721472 字节(1500−201500 - 20 字节 IP 首部 −8- 8 字节 UDP 首部),会在网络层被强制分片。整个 UDP 报文丢失的概率随分片急剧增加。
    • 对 TCP 协议的影响 (MSS 机制):

      • MSS (Max Segment Size):TCP 单个数据报的最大消息长度。

      • 建立连接时的协商:通信双方在发送 SYN 时,会在 TCP 头部的 40 字节变长选项中(kind=2)写入自己支持的 MSS 值,随后双方选取较小值作为最终 MSS。

      • 理想状态:MSS 的最理想值是刚好使 IP 层不需要分片的最大长度(受制于数据链路层的 MTU),即 MTU−IP头部−TCP头部MTU - IP 头部 - TCP 头部。

💡 发散思维与深入解析:为什么以太网帧规定了 4646 字节的最小数据长度?

解答:这源于早期以太网的冲突检测机制 (CSMA/CD)。在共享网络中,发送方必须在发送完整个帧之前,能够检测到网络最远端可能发生的碰撞。这就要求数据帧在物理链路上的传输时间必须大于往返延迟时间 (RTT)。对于 10Mbps 的以太网,这个最小时间对应的比特数转换成字节就是 64 字节。减去帧头和帧尾的 18 字节,数据载荷必须至少有 46 字节,否则在发生冲突时网卡无法准确识别是谁发生了碰撞。

三、 ARP 地址解析协议深度剖析#

3.1 ARP 协议的定位与作用#

  • 概念解释:ARP (Address Resolution Protocol, 地址解析协议) 建立主机 IP 地址与 MAC 地址的映射关系。它不是单纯的数据链路层协议,而是介于数据链路层与网络层之间的协议。

  • 笔记:

    • 核心痛点:源主机的应用程序只知道目的主机的 IP 地址和端口号,但在局域网物理介质中,网卡只认 MAC 地址。如果接收到的数据包目标硬件地址不符,网卡会直接丢弃。

    • 作用:将 IP 地址(逻辑地址)解析转换为以太网帧必须的 MAC 地址(硬件地址),使得数据帧能成功组装并发送。

3.2 ARP 工作流程与缓存管理#

  • 笔记:

    • 第一步(广播请求):源主机发出 ARP 请求:“IP地址是某某的硬件地址是多少?”,并将此请求在局域网内广播(以太网首部目的 MAC 填全 F FF:FF:FF:FF:FF:FF)。

    • 第二步(单播应答):目的主机收到广播后,比对 IP 发现是自己,于是单播发送一个 ARP 应答包给源主机(只给发信人,一对一),包中带有自己的 MAC 地址。局域网内的其他主机也会收到请求,但因 IP 不符而静默。

    • 缓存表机制:

      • 每台主机都维护一张临时映射表。如果在一段时间(通常 20 分钟)内没有再次使用某个表项,则其失效。

      • 通过 arp -a 命令可以查看本机的 ARP 缓存表。

💡 发散思维与深入解析:为什么 ARP 缓存表项必须要有过期时间(如 20 分钟)?为什么不永久有效?

解答:网络环境是动态的。如果目标机器更换了网卡(物理 MAC 改变),或者局域网内通过 DHCP 重新分配了 IP,那么原本缓存的 IP-MAC 映射就变成了“死链”。如果永不过期,源主机将永远把数据发往一个错误的、甚至不存在的 MAC 地址,导致网络直接断开。加入过期时间能强制机器定期发起新的 ARP 广播,维持动态网络状态下的连通性。

3.3 ARP 报文格式详拆#

  • 笔记:

    • 整个以太网帧结构:以太网首部(1414 字节) + ARP 请求/应答(2828 字节)。

    • 字段解析:

      • 硬件类型 (2字节):链路层网络类型,1 表示以太网。

      • 协议类型 (2字节):要转换的地址类型,0x0800 表示 IPv4 地址。

      • 硬件地址长度 (1字节):以太网为 66 字节。

      • 协议地址长度 (1字节):IP 地址为 44 字节。

      • 操作码 op (2字节):1 表示 Request 请求,2 表示 Reply 应答。

    • 地址填充逻辑:

      • 源和目的 MAC 会在【以太网首部】和【ARP 请求数据体】各出现一次(在以太网中看似冗余,但对其他类型的网络链路则是必要的)。

      • 请求包:目的 MAC 填 空/0(因为还不知道)。

      • 应答包:将自己的 MAC 填入源地址,操作码置为 2 返回。

3.4 严重安全隐患:ARP 欺骗 (ARP Spoofing)#

  • 概念解释:ARP 欺骗 (ARP Spoofing) 是一种局域网常见的中间人攻击手段。攻击者向网络中发送伪造的 ARP 应答包,欺骗目标机器将特定的 IP 地址(通常是网关的 IP)与攻击者的网卡 MAC 地址绑定。

  • 笔记:

    • 隐患根源:局域网内的任何主机,都可能收到 ARP 请求,也可能收到 ARP 应答。且一台机器可能故意隐瞒请求,或者发出虚假应答。

    • 动态映射的弱点:局域网内 IP 与 MAC 的关系“不一定”永远不发生变化。在 MAC 初始化以及无线缓存 ARP 刷新时,协议如果没有进行强力校验(明文传输),恶意主机可以发送伪造帧强制覆盖其他机器的 ARP 缓存表项。

    • 后果:直接导致局域网内部数据被监听、篡改,形成危害极大的中间人攻击。

四、 核心网络诊断命令#

在 Linux / Unix 终端下,常使用以下命令管理和诊断链路层数据:

4.1 网络接口配置与查询 (ifconfig)#

用于查看当前网卡的 IP、MAC 地址,以及当前硬件支持的 MTU 限制。

Bash

[tangzhong@tz ~]$ ifconfig
enpos3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.108 netmask 255.255.255.0 broadcast 192.168.1.255
ether 08:00:27:03:fb:19 txqueuelen 1000 (Ethernet)
# 能够直观看到 mtu=1500 和 本机 MAC 地址 (ether)

4.2 ARP 缓存表查询 (arp -a)#

用于查看本机目前缓存在内存中的 IP 到 MAC 的映射关系。

Bash

[tangzhong@tz ~]$ arp -a
? (192.168.1.107) at e4:f8:9c:be:af:41 [ether] on enpos3
gateway (192.168.1.1) at 10:bd:18:08:af:62 [ether] on enpos3

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Profile Image of the Author
HandlerOne
おかえり
公告
本站已整理 138 篇技术笔记,并按 8 条主线排成学习路线(141 站);站内搜索与桌宠对话均已上线。
分类
标签
最新动态
站点统计
文章
138
分类
12
标签
42
总字数
597,044
站点信息
构建平台
腾讯云 · Nginx
博客版本
v6.16.8
文章目录