数据链路层基础

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
最后靠交换机送达
相关推荐
ZenosDoron2 小时前
虚拟机软件(如 VirtualBox、VMware)通常提供三种主要的网络模式
网络·智能路由器
d111111111d3 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
乌托邦的逃亡者3 小时前
CentOS/Openeuler主机中,为一个网卡设置多个IP地址
linux·运维·网络·tcp/ip·centos
Advancer-3 小时前
第二次蓝桥杯总结(上)
java·算法·职场和发展·蓝桥杯
@insist1233 小时前
信息安全工程师核心考点:物理与环境安全(下篇)
网络·安全·软考·信息安全工程师·软件水平考试
ん贤3 小时前
加密算法(对称、非对称、哈希、签名...)
算法·哈希算法
念一不念二3 小时前
硬件通信协议
网络
@CLoudbays_Martin113 小时前
UniApp是否能够接入SDK游戏盾呢?
服务器·网络·网络协议·tcp/ip·安全
晚枫歌F4 小时前
三层时间轮的实现
网络·unity·游戏引擎