大纲

脑子里应该有这样几幅图片

  1. 多个设备 在 以太网 共享信道

KeyWord

广播 网卡 CSMA/CD 信道划分

  1. 多台 交换机 将不同冲突域互连 形成的一个大的广播域

  1. 带有 路由器的 三层(协议)数据传输(包含了 路由表 和 NAT 表)

随着技术的进步,冲突域可以由交换机的 MAC 地址自学习 解决

交换机的 Flooding 泛洪行为是为了后续更好的实现 有约束的 寻mac

广播域 可以由 交换机 搭配 VLAN 技术 分割 或者 用 路由器的(ARP转发表 和 路由表)

ARP 协议复盘

ARP 是主机用的,不是交换机用的。交换机完全不懂 ARP,也不需要。

交换机眼里的世界

交换机只看以太网帧的 MAC 地址,它不拆开帧看里面是什么。ARP 报文对它来说就是一个普通的广播帧,它照样泛洪转发,完全不理解内容。

我们有了 MAC 可以寻址,为什么还需要 IP ?

MAC 地址是出厂烧死的,AA:BB:CC:DD:EE:FF 这串数字和地理位置毫无关系。全球有几百亿台设备,如果路由器要靠 MAC 转发,路由表就要存几百亿条记录,完全不可能。

IP 地址是按网段分配的192.168.1.x 一定在某个局域网,10.x.x.x 一定在某个大型内网。路由器只需要记”这个网段往哪走”,不需要记每一台设备。

ARP的定位

ARP 解决的是一个很具体的问题:

我知道目标的 IP(为什么主机知道 IP 不知道 MAC 呢?),但以太网帧需要填 MAC,我不知道对方的 MAC 是多少。

也叫做: ARP 广播 —— 主机自发完成的

主机 A 想发包给 192.168.1.20

→ 查路由表:目标在本局域网,直接发

→ 查 ARP 缓存:192.168.1.20 的 MAC?不知道

→ 广播 ARP 请求:"谁是 192.168.1.20?"

→ 192.168.1.20 回复:"我是,MAC 是 xx:xx:xx"

→ A 把这条记录存入 ARP 缓存

→ 封装以太网帧,目标 MAC 填进去,发出去

交换机在这个过程里只是透明地转发了那条广播,它完全不知道这是 ARP,更不维护 IP-MAC 映射。

三大表

几个容易记混的点:

交换机只有 MAC 地址表,它不懂 IP,所以 ARP 和路由表都与它无关。ARP 广播帧经过它时,它只是当普通广播转发,完全不理解内容。

主机和路由器都有 ARP 表和路由表,因为两者都需要发出以太网帧(需要 ARP 解析 MAC),也都需要决定包往哪走(需要路由表)。路由器的路由表条目多、靠动态路由协议维护;主机的路由表很简单,通常只有几条,默认路由指向网关就够了。

MAC 地址表只在交换机,主机和路由器不需要知道”哪个端口接着哪台设备”,那是交换机的事。

主机路由表

主机路由表里除了默认路由,还有一条直连路由,是网卡配置 IP 时自动生成的。

目标网络            网关        接口
192.168.1.0/24     直连        eth0   ← 自动生成,本网段直接发
0.0.0.0/0          192.168.1.1 eth0   ← 默认路由,其他都走网关

发包决策过程

目标是 192.168.1.20
    │
    ▼
查路由表:192.168.1.20 命中 192.168.1.0/24 → 直连
    │
    ▼
不需要经过网关,直接 ARP 询问 192.168.1.20 的 MAC
    │
    ▼
封帧直接发出去
目标是 8.8.8.8
    │
    ▼
查路由表:没有匹配条目 → 命中默认路由 0.0.0.0/0
    │
    ▼
下一跳是网关 192.168.1.1,ARP 询问网关的 MAC
    │
    ▼
封帧发给路由器

直连路由是配置 IP 地址时操作系统自动写入的,不需要手动填,所以容易被忽视。它的意思就是:“这个网段我直接认识,不用问任何人。“

MAC表 和 路由表

特性MAC 地址表 (数据链路层/二层)路由表 (网络层/三层)
寻址依据48位 MAC 地址(物理地址)32位(IPv4)或128位(IPv6) IP地址(逻辑地址)
匹配方式精确匹配(必须一模一样)最长前缀匹配(按网段范围匹配)
未知数据的处理泛洪(Flooding,向所有接口广播)丢弃,并向源头发送 ICMP 错误报文(除非有默认路由)
核心目的解决局域网内部精准投递问题解决跨网络、跨地域的路径规划问题