文章目录
- [3.3 使用广播信道的数据链路层](#3.3 使用广播信道的数据链路层)

3.3 使用广播信道的数据链路层
说明 :本章内容涵盖局域网的数据链路层、CSMA/CD 协议、使用集线器的星形拓扑以及以太网的信道利用率等内容。鉴于篇幅与博客总结侧重点,本小节博客只整理了最后的 以太网的 MAC 层。
以太网的 MAC 层
1. MAC 层的硬件地址
在局域网中,硬件地址又称为物理地址或 MAC 地址。
MAC 地址的定义
IEEE 802 标准中所说的"地址",严格来讲是每一个站的"名字"或标识符。
另外,如果连接在局域网上的主机或路由器安装有多个适配器(网卡),那么该主机或路由器就拥有多个"地址"。更准确地说,这种 48 位的"地址"应当是某个接口的标识符。
48 位 MAC 地址的结构
IEEE 802 标准规定 MAC 地址字段采用 6 字节(48 位)格式。IEEE 的注册管理机构 RA 负责向厂家分配地址字段的前三个字节(即高位 24 位),称为组织唯一标识符。
地址字段的后三个字节(即低位 24 位)由厂家自行指派,称为扩展唯一标识符。厂家必须保证生产出的适配器没有重复地址。

一个地址块可以生成 2 24 2^{24} 224 个不同的地址。这种 48 位地址称为 MAC-48,其通用名称是 EUI-48 。生产适配器时,6 字节的 MAC 地址已被固化在适配器的 ROM 中,因此 MAC 地址也被称为硬件地址 或 物理地址。
地址位的特殊含义
-
I/G 位 (Individual/Group):
- IEEE 规定地址字段第一字节的最低位为 I/G 位。
- 当 I/G 位 = 0 时 :地址字段表示一个单站地址(单播)。
- 当 I/G 位 = 1 时 :表示组地址,用来进行多播(组播)。
-
G/L 位 (Global/Local):
- IEEE 把地址字段第一字节的最低第 2 位规定为 G/L 位。
- 当 G/L 位 = 0 时 :是全球管理(保证在全球没有相同的地址),厂商向 IEEE 购买的 OUI 都属于全球管理。
- 当 G/L 位 = 1 时 :是本地管理,这时用户可任意分配网络上的地址。
2. 适配器对 MAC 地址的检查
适配器从网络上每收到一个 MAC 帧,首先用硬件检查 MAC 帧中的 MAC 地址。
- 如果是发往本站的帧,则收下,然后再进行其他处理。
- 否则,将此帧丢弃,不再进行其他处理。
"发往本站的帧"包括以下三种:
- 单播帧:一对一,即收到的帧的 MAC 地址与本站的硬件地址相同。
- 广播帧:一对全体,即发送给本局域网上所有站点的帧(全 1 地址)。
- 多播帧:一对多,即发送给本局域网上有一部分站点的帧。
混杂方式 :
以混杂方式工作的以太网适配器,只要"听到"有帧在以太网上传输,无论目的地址是否是自己,都会接收下来。这通常用于网络监听和分析。
3. MAC 帧的格式
常用的以太网 MAC 帧格式有两种标准:
- DIX Ethernet V2 标准(最常用)。
- IEEE 的 802.3 标准。
以太网 V2 的 MAC 帧格式
以太网 V2 帧主要由五个字段组成:
- 目的地址:6 字节。
- 源地址:6 字节。
- 类型 :2 字节。
- 类型字段用来标志上一层使用的是什么协议,以便把收到的 MAC 帧的数据上交给上一层的这个协议。
- 例如:
0x0800表示 IP 数据报。
- 数据 :46 ~ 1500 字节。
- 数据字段的正式名称是 MAC 客户数据字段。
- MTU:最大传送单元,即数据字段的最大长度为 1500 字节。
- 最小长度 :数据字段的最小长度为 46 字节。如果数据少于 46 字节,必须加入填充字段以保证 MAC 帧长不小于 64 字节。
- FCS:4 字节,即帧检验序列。

物理层的前同步码
在帧的前面,物理层会插入 8 字节的内容,但这不属于 MAC 帧的一部分:
- 前同步码:7 字节,用来迅速实现 MAC 帧的比特同步。
- 帧开始定界符:1 字节,表示后面的信息就是 MAC 帧。
MAC 示例:
各网卡MAC地址:
- eth0: 00:15:5d:62:ba:4d (物理网卡)
- br-d7cfc11ea37e: 3a:24:31:af:ae:b1 (网桥)
- br-e15858d2c99c: 6e:f3:cb:40:9d:53 (网桥)
- br-f2072db21258:3a:0d:df:d7:12:43 (网桥)
- docker0: 02:46:a8:42:55:19 (Docker默认网桥)
- veth62eb915: 2a:a4:c0:d2:76:cf (虚拟以太网设备)
4. 无效的 MAC 帧
对于检查出的无效 MAC 帧,以太网的处理方式是简单地丢弃,不负责重传。
无效 MAC 帧的判定标准:
- 数据字段的长度与长度字段的值不一致。
- 帧的长度不是整数个字节。
- 用收到的帧检验序列 FCS 查出有差错。
- 数据字段的长度不在 46 ~ 1500 字节之间。
- 有效的 MAC 帧长度范围为 64 ~ 1518 字节。
