两个设备在同一个局域网中进行通信.
具体来说:
- 同一局域网内
- 两个同类型数据链路节点(如网卡、交换机)之间
- 直接传递数据帧
以太网协议
以太网帧格式


| 字段 | 长度(字节) | 作用 |
|---|---|---|
| 目的地址 | 6 | 接收方 MAC 地址,用于局域网内寻址 |
| 源地址 | 6 | 发送方 MAC 地址 |
| 类型 | 2 | 标识上层协议类型(如0x0800=IPv4,0x0806=ARP) |
| 数据 | 46~1500 | 承载上层协议数据(如 IP 数据报、ARP 报文等) |
| CRC | 4 | 循环冗余校验,用于检测帧传输错误 |
认识MAC地址
- 核心作用 :MAC地址是数据链路层中用于唯一标识相连节点的硬件地址,负责在局域网内完成设备间的寻址与数据交付。
- 格式与长度 :长度为48位(6字节) ,通常采用
XX:XX:XX:XX:XX:XX的十六进制冒号形式表示,例如:08:00:27:03:fb:19。 - 唯一性与可变性 :
- 物理网卡的MAC地址在出厂时固化,理论上全球唯一,不可随意修改。
- 虚拟机的MAC地址 为虚拟分配,并非真实硬件地址,可能出现地址冲突。
- 部分网卡支持用户手动配置MAC地址(即MAC地址克隆/修改),存在一定灵活性。
认识MTU
MTU(最大传输单元,Maximum Transmission Unit)可以类比为快递包裹的尺寸限制,它是不同数据链路对应的物理层所产生的传输长度约束。
- 以太网帧数据长度约束 :以太网帧中数据段的长度被规定为最小46字节 、最大1500字节。若ARP数据包长度不足46字节,需要在其后填充补足(PAD字段)。
- 以太网MTU定义 :以太网数据段的最大长度1500字节,即为以太网的最大传输单元(MTU);不同网络类型对应不同的MTU值。
- 跨链路分片机制 :当数据包从以太网路由至拨号链路等其他链路时,若数据包长度超过目标链路的MTU,就需要对数据包进行**分片(fragmentation)**处理,拆分为符合目标链路MTU要求的多个分片。
- MTU的差异性:不同数据链路层标准(如以太网、PPP、令牌环等)所规定的MTU数值各不相同。
使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU
MTU对UDP协议的影响
- 分片阈值计算 :在以太网MTU=1500字节的场景下,UDP携带的有效数据若超过1472字节(计算:1500 - 20字节IP首部 - 8字节UDP首部),就会在网络层被拆分为多个IP数据报。
- 分片的可靠性风险 :UDP本身无重传机制,而IP层重组要求所有分片必须完整到达。只要任意一个IP分片丢失,整个UDP数据报的重组就会失败,最终导致完整UDP报文丢失。因此,UDP报文被分片后,数据丢失的概率会显著上升。
MTU对TCP协议的影响(MSS相关)
- MSS定义 :TCP单个数据报的最大消息长度称为 MSS(Max Segment Size,最大分段大小),它的大小受限于MTU。
- 存储位置 :MSS的值存储在TCP首部的40字节变长选项 中,类型为
kind=2。 - 理想MSS取值:最理想的MSS值,是让IP层不需要分片处理的最大长度,即:
MSS=MTU−IP首部长度−TCP首部长度 \text{MSS} = \text{MTU} - \text{IP首部长度} - \text{TCP首部长度}MSS=MTU−IP首部长度−TCP首部长度
(以太网场景下,MTU=1500,IP首部20字节,TCP首部20字节,因此理想MSS=1460字节)
- MSS协商机制 :
- TCP在三次握手建立连接时,通信双方会通过SYN报文进行MSS协商。
- 双方会在TCP头部的**变长选项(kind=2)**中,写入自己能支持的MSS值。
- 最终会选择双方MSS值中较小的那个 ,作为本次连接的有效MSS。

局域网中具体通信过程---共享式以太网广播通信原理

这张图展示了**共享式以太网(如集线器环境)**的广播通信机制:
- 广播发送特性 :主机A发送的以太网帧(目的MAC为
macE,源MAC为macA,类型0800代表IP协议)会被广播到所有连接在同一总线/集线器上的主机(B、C、D、E都会收到该帧)。 - 目标匹配过滤 :
- 只有目的MAC地址匹配的主机E会接收并处理该帧的数据。
- 主机B、C、D因自身MAC地址与帧中目的MAC
macE不匹配,会直接丢弃该帧,不做任何处理。
加入交换机后的通信行为解析
初始状态(交换机MAC地址表为空)
- 主机A发送目的MAC为
macE、源MAC为macA的以太网帧。 - 交换机收到该帧后:
- 学习MAC地址 :将源MAC
macA与接收端口绑定,写入MAC地址表(CAM表)。 - 泛洪转发 :因MAC地址表中无
macE的条目,交换机会将该帧广播到除接收端口外的所有其他端口(B、C、D、E都会收到)。
- 学习MAC地址 :将源MAC
- 主机B、C、D因MAC不匹配丢弃帧;主机E匹配目的MAC
macE,接收并处理该帧。
交换机学习到macE后(MAC地址表已包含macA和macE)
- 主机A再次发送目的MAC为
macE的帧:- 交换机查询MAC地址表,发现
macE对应主机E的端口。 - 精准单播转发 :仅将该帧转发到主机E所在端口,不会广播到B、C、D。
- 交换机查询MAC地址表,发现
- 只有主机E收到并处理该帧,其他主机完全感知不到此通信,带宽和安全性大幅提升。

每次通信,交换机都进行学习,当把主机都学习完毕后,下次通信,可以直接发送到交换机,由交换机直接发送消息到达指定主机,而不进行广播.
只要交换机完成 MAC 地址学习,后续通信就可以精准单播转发
ARP协议
在网络通信中,源主机虽然知道目的主机的IP 地址和端口号,但无法直接获知其硬件 MAC 地址:
- 网卡仅接收硬件地址与本机匹配的数据包,地址不符则直接丢弃。
- 若没有目的 MAC 地址,以太网帧无法正确封装和交付,通信无法建立。
- 因此,通信前必须通过 ARP 协议将目的 IP 地址解析为对应的 MAC 地址,才能完成局域网内的数据传输。
ARP协议核心作用 : 建立了主机 IP地址 和 MAC地址 的映射关系.
ARP不是⼀个单纯的数据链路层的协议, 而是⼀个介于数据链路层和网络层之间的协议.
网络层与数据链路层的核心协议关系

"类型" 指的就是以太网帧头部的类型字段,它是上层协议的标识,决定了数据链路层如何交付给上层。
| 类型值 | 对应上层协议 | 作用 |
|---|---|---|
| 0x0800 | IP 协议 | 表示以太网帧的数据部分是 IP 数据报,交付给网络层 IP 协议处理 |
| 0x0806 | ARP 协议 | 表示数据部分是 ARP 请求 / 应答,交付给数据链路层 ARP 协议处理 |
| 0x8035 | RARP 协议 | 表示数据部分是 RARP 请求 / 应答,交付给数据链路层 RARP 协议处理 |
- IP → 以太网:IP 数据报封装进以太网帧时,类型字段设为0x0800,告知对方法数据是 IP 协议。
- 以太网 → ARP/RARP:当类型字段为0x0806或0x8035时,以太网帧直接将数据交给 ARP/RARP 协议处理,无需经过网络层。
- ARP → 以太网:ARP 报文封装进以太网帧时,类型字段设为0x0806,用于 IP 到 MAC 的地址解析。
- RARP → 以太网:RARP 报文封装进以太网帧时,类型字段设为0x8035,用于 MAC 到 IP 的地址解析。
ARP协议的工作流程

- ARP 请求 :源主机以广播方式(目的 MAC 为FF:FF:FF:FF:FF:FF)发送 ARP 请求,询问 "192.168.0.1对应的 MAC 地址是多少",确保本网段所有主机都能收到该查询。
- ARP 应答 :只有 IP 地址匹配的目的主机,会单播回复ARP 应答 ,将自身 MAC 地址告知源主机,完成 IP→MAC 的地址映射。
ARP缓存表
每台主机都维护⼀个ARP缓存表 ,可以用arp -a命令查看。缓存表中的表项有过期时间(⼀般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
bash
syb@VM-8-5-ubuntu:~$ arp -a
_gateway (10.1.8.1) at fe:ee:6b:e3:2a:f8 [ether] on eth0
ARP数据报的格式

报文整体结构
- 以太网首部(14字节):目的MAC地址(6B)、源MAC地址(6B)、帧类型(2B,ARP 为 0x0806)
- ARP 数据部分(28字节):硬件类型、协议类型、地址长度、操作码、发送端/目的端的 MAC+IP 地址
| 字段 | 含义与取值 |
|---|---|
| 硬件类型 | 链路层网络类型,以太网为 1 |
| 协议类型 | 要转换的地址类型,IPv4 为 0x0800 |
| 硬件地址长度 | MAC 地址长度,以太网为 6字节 |
| 协议地址长度 | IP 地址长度,IPv4 为 4字节 |
| op(操作码) | 1 = ARP 请求,2 = ARP 应答 |
| 地址冗余 | 源/目的 MAC 地址在以太网首部和 ARP 报文中各出现一次,以太网场景下冗余,但兼容其他链路层协议 |