1. 帧(Frame)结构
1)什么是帧
在以太网里,主机之间真正传输的不是"裸数据",而是:
帧(Frame)
可以理解成:
链路层的数据包
如果说:
-
应用层传的是消息
-
传输层传的是报文段
-
网络层传的是 IP 数据报
那么链路层传的就是:
帧
2)为什么需要帧
因为在局域网里,数据不能直接"散着发",必须封装好,告诉网卡和交换机:
-
这是从谁来的
-
要发给谁
-
里面装的是什么类型的数据
-
数据有没有损坏
所以帧就是:
给链路层设备看的"包装"
3)以太网帧典型结构
一个典型以太网帧可以粗略记成:
目的MAC | 源MAC | 类型 | 数据 | 校验
更完整一点可写成:
前导码 | 目的MAC | 源MAC | EtherType/Length | Payload | FCS
4)每部分什么意思
① 目的 MAC 地址
告诉链路层:
这个帧是发给谁的
② 源 MAC 地址
告诉链路层:
这个帧是谁发出来的
③ 类型字段
说明帧里装的上层内容是什么,比如:
-
IPv4
-
ARP
-
IPv6
也就是说交换机主要看 MAC,而操作系统还要看类型字段,决定把数据交给哪个协议处理。
④ 数据部分(Payload)
这里面装的通常就是网络层的数据,比如:
IP 数据报
⑤ FCS / 校验
用于检错,看看帧在传输过程中有没有损坏。
2. MAC 地址
1)什么是 MAC 地址
MAC 地址是:
网卡在局域网中的硬件地址
可以理解成:
局域网里的"物理门牌号"
常见格式像这样:
00:1A:2B:3C:4D:5E
一共 48 位,通常写成 6 组十六进制数。
2)MAC 地址的作用
MAC 地址主要用于:
同一局域网内的二层转发
也就是说,在一个交换网络里,交换机不看 IP 也能转发帧,因为它主要看的是:
目标 MAC 地址
3)MAC 和 IP 的区别
IP 地址
表示:
逻辑地址
它解决的是:
"这个主机在网络体系中的哪儿"
MAC 地址
表示:
局域网二层地址
它解决的是:
"在当前链路里,这个帧该送到哪块网卡"
4)为什么同时需要 IP 和 MAC
因为网络通信分层了:
-
IP 负责跨网络寻路
-
MAC 负责当前这一跳的实际交付
你可以这样记:
IP 决定"去哪台机器"
MAC 决定"这一跳交给哪块网卡"
3. ARP(IP → MAC)
1)ARP 是干什么的
ARP 的作用就是:
已知对方 IP,查询对方 MAC
因为主机发数据时,上层通常知道的是目标 IP,但真正封装以太网帧时必须填写:
目标 MAC
这时就需要 ARP。
2)ARP 的工作过程
假设主机 A 想给主机 B 发数据:
-
A 的 IP:192.168.1.10
-
B 的 IP:192.168.1.20
A 已经知道目标 IP 是 192.168.1.20,但不知道它的 MAC。
于是:
第一步:查 ARP 缓存
A 先看自己本地有没有记录:
192.168.1.20 → 某个 MAC
如果有,就直接用。
第二步:没有就广播询问
A 发一个 ARP 广播,大意是:
谁是 192.168.1.20?
请告诉我你的 MAC 地址
这个广播会发给局域网里的所有设备。
第三步:目标主机响应
B 发现"问的是我",就回复:
192.168.1.20 的 MAC 是 aa:bb:cc:dd:ee:ff
第四步:A 记入 ARP 表
A 把这条映射缓存起来,后续就不用再问了。
3)ARP 表是什么
ARP 表就是:
IP 地址 和 MAC 地址 的对应关系表
Windows:
arp -a
Linux:
ip neigh
示例:
192.168.1.1 aa-bb-cc-dd-ee-01
192.168.1.20 aa-bb-cc-dd-ee-20
192.168.1.30 aa-bb-cc-dd-ee-30
含义就是:
这个 IP 对应这个 MAC
4)ARP 表重点看什么
1. IP
表示局域网中的某个设备。
2. MAC
表示这个设备网卡的物理地址。
3. 状态
有时会看到:
-
dynamic:动态学习到的
-
static:手动配置的
-
stale / reachable / delay:Linux 下常见状态
5)常见问题
情况一:ARP 表里有记录
说明:
本机最近和这个 IP 通信过
或者已经解析过它的 MAC
情况二:ARP 表里没有记录
说明:
还没解析
或者缓存过期
情况三:ARP 表异常
比如:
-
同一个 IP 对应的 MAC 频繁变化
-
某个 IP 一直解析不到 MAC
-
出现不合理的重复映射
这可能意味着:
-
目标主机不在线
-
网络不通
-
ARP 欺骗
-
交换机/链路异常
4. 交换机工作原理
1)交换机是干什么的
交换机的作用是:
在局域网中按 MAC 地址转发帧
2)交换机和集线器的区别
集线器
收到数据后:
所有端口都发一遍
相当于"无脑广播"。
交换机
收到帧后:
只转发到目标 MAC 所在的端口
所以交换机效率高得多。
3)交换机怎么知道 MAC 在哪个端口
交换机内部有一张表:
MAC 地址表 / 转发表
表项类似:
MAC A → 端口1
MAC B → 端口3
MAC C → 端口5
4)交换机如何学习这张表
交换机不是一开始就知道所有 MAC 在哪里,它是"边收边学"的。
例如:
第一步
某个帧从端口 2 进来,源 MAC 是 AA
交换机就学到:
AA 在端口 2
第二步
以后如果看到目标 MAC 是 AA,它就知道该往端口 2 发。
所以交换机的核心机制叫:
基于源 MAC 学习
基于目标 MAC 转发
5)交换机转发的三种典型情况
情况一:知道目标 MAC 在哪
如果交换机表里有:
BB → 端口 4
那交换机就只把帧发到端口 4。
情况二:不知道目标 MAC
如果没查到目标 MAC,交换机会:
泛洪
也就是除了入端口外,其余端口都发一遍。
情况三:目标是广播地址
如果是广播帧,比如 ARP 请求,交换机会把它发到所有端口。
5. 同一局域网通信过程
1)通信过程
假设:
A 主机:192.168.1.10
B 主机:192.168.1.20
子网掩码:255.255.255.0
A 要给 B 发数据。
第一步:A 先判断 B 是不是和自己在同一个局域网
A 会根据 IP 和子网掩码计算网段。
比如:
192.168.1.10/24
192.168.1.20/24
都属于:
192.168.1.0/24
所以 A 判断:B 和我在同一局域网。
于是 A 不需要找路由器转发,而是准备直接发给 B。
第二步:A 需要知道 B 的 MAC 地址
因为在以太网里,真正发帧时靠的是:
目标 MAC 地址
不是目标 IP 地址。
所以 A 会查自己的 ARP 缓存表:
-
如果已经知道
192.168.1.20对应的 MAC,就直接发 -
如果不知道,就发 ARP 广播
第三步:ARP 广播
A 会发一个广播帧,大意是:
谁是 192.168.1.20?
请把你的 MAC 地址告诉我
广播的特点是:
局域网里所有主机都能收到
第四步:B 回复 ARP
只有 B 发现"问的是我",于是回复:
192.168.1.20 的 MAC 是 aa:bb:cc:dd:ee:ff
这个回复通常是单播,不再广播。
第五步:A 正式发数据
A 拿到 B 的 MAC 后,就会封装以太网帧:
-
源 MAC:A 的 MAC
-
目标 MAC:B 的 MAC
-
上层内容:IP 数据报
然后把帧交给交换机,交换机再转发给 B。
2)常见问题
你要能回答:
为什么同一局域网通信不能只靠 IP?
答案是:
IP 负责逻辑寻址
MAC 负责局域网内实际交付
也就是说:
先靠 IP 判断"该不该直发"
再靠 ARP 找到 MAC
最后靠交换机送达