网络核心三张表:路由表、ARP 表、MAC 地址表深度解析

深入解析网络通信的核心三张表——路由表、ARP表和MAC地址表,以及它们在跨网段通信中的联动机制。从底层原理到实战排障,帮你彻底看透数据包的生死流转。

一、路由表 (Routing Table):跨网段通讯的"卫星导航地图"

1.1 路由表

路由表是路由器(或三层交换机)的大脑,工作在网络层(OSI 第三层)。当设备收到一个数据包时,它只关心一件事:这个包的目的 IP 地址在哪?该把它往哪发送出去?

查看路由表

  • 在华为设备上执行 display ip routing-table,你会看到以下几个决定生死的关键字段:
字段 说明
Destination/Mask(目的网段/掩码) 数据包要去的终点站
Proto(协议) 这条路由是怎么学来的
Pre(优先级) 路由选路标准之一,越小越优
Cost(开销) 路由选路标准之二,越小越优
NextHop(下一跳) 核心中的核心!指明数据包离开本地后,下一个接手的路由器 IP 地址
Interface(出接口) 数据包从本地哪个物理网口扔出去

路由表示例

  • Windows CMD执行 route print -4
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C:\Users\PC>route print -4
===========================================================================
接口列表
 11...40 b0 76 9f 83 df ......Intel(R) Ethernet Connection (2) I219-V
 14...41 42 48 b6 30 6b ......Bluetooth Device (Personal Area Network)
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.142     25
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
      192.168.1.0    255.255.255.0            在链路上     192.168.1.142    281
    192.168.1.142  255.255.255.255            在链路上     192.168.1.142    281
    192.168.1.255  255.255.255.255            在链路上     192.168.1.142    281
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    331
        224.0.0.0        240.0.0.0            在链路上     192.168.1.142    281
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
  255.255.255.255  255.255.255.255            在链路上     192.168.1.142    281
===========================================================================
永久路由:
  网络地址          网络掩码  网关地址  跃点数
          0.0.0.0          0.0.0.0      192.168.0.1     默认
===========================================================================
  • Linux shell 命令行执行 sudo routeip route
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ sudo route
[sudo] macs 的密码:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    600    0        0 wlp3s0
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 wlp3s0
192.168.0.0     0.0.0.0         255.255.255.0   U     600    0        0 wlp3s0
198.18.0.0      0.0.0.0         255.255.255.252 U     0      0        0 Meta


$ ip route
default via 192.168.0.1 dev wlp3s0 proto static metric 600
169.254.0.0/16 dev wlp3s0 scope link metric 1000
192.168.0.0/24 dev wlp3s0 proto kernel scope link src 192.168.0.201 metric 600
198.18.0.0/30 dev Meta proto kernel scope link src 198.18.0.1

1.2 Proto 协议类型详解

路由的来源决定了它的可信度和生命周期:

  • Direct(直连):接口配置了 IP 地址并处于 UP 状态后自动生成的路由,优先级最高(Pre=0),最为可靠。
  • Static(静态):管理员手工配置的固定路由,相当于"焊死"的路径。适合小型网络或作为默认路由。
  • OSPF/RIP/EIGRP/BGP(动态):通过路由协议自动学习和维护的路由,能够适应网络拓扑变化。

1.3 路由选路原则

去同一个地方有多条路时,路由器遵循以下规则:

  1. 最长匹配优先:掩码最长的路由条目优先匹配。
  2. 先比优先级(Pre):优先级数值越小越优。
  3. 再比开销(Cost):优先级相同时,开销越小越优。

实战要点:路由器是典型的"甩手掌柜"。它不关心路线全貌,只看下一跳。如果路由表里找不到匹配的目的地,并且也没有缺省路由(0.0.0.0/0),路由器会毫不犹豫地把包丢弃,并回一个 ICMP “目标不可达"消息。

二、ARP 表 (ARP Table):IP 到 MAC 的"翻译官”

2.1 ARP 表怎么看

在局域网的物理线路上,数据帧的传输只认 MAC 地址,不认 IP 地址。路由器虽然查了路由表知道了"下一跳"的 IP,但在发包前,必须知道对方的 MAC 地址才能封装以太网帧。ARP(Address Resolution Protocol,地址解析协议)就是用来做这个翻译工作的。

在电脑上执行 arp -a,或在网络设备上看 ARP 表,你会看到:

字段 说明
IP Address(互联网地址) 局域网内目标设备的 IP
MAC Address(物理地址) 对应的网卡硬件地址
Type(类型) Dynamic(动态学习,带老化时间)或 Static(手工绑定,防欺骗)

ARP 表示例

2.2 ARP 协议工作原理

ARP 的工作流程可以概括为四个步骤:

  1. 检查本地缓存:主机首先在自己的 ARP 缓存表中查找目标 IP 对应的 MAC 地址。
  2. 发送 ARP 请求(广播):如果缓存中没有,主机发送一个 ARP Request 广播帧,询问"谁是 xx.xx.xx.xx?请告诉你的 MAC 地址!“这个帧的目标 MAC 是 FF:FF:FF:FF:FF:FF
  3. 收到请求的设备回复 ARP 响应(单播):目标 IP 对应的设备收到广播后,用自己的 MAC 地址回复一个 ARP Reply。
  4. 更新缓存:发起方收到回复后,将 IP-MAC 映射存入 ARP 缓存,后续通信直接使用。

2.3 跨网段通信时的 ARP 误区

跨网段 ARP 示例

划重点跨网段通信时,你的 ARP 表里只有你们网关(路由器)的 MAC,不会有目标主机的 MAC! 你的电脑不能直接学到公网服务器的 MAC 地址了。

这是一个非常经典的面试考点和排障误区。很多初学者会疑惑:“为什么我 Ping 百度的时候,ARP 表里没有百度的 MAC 地址?“答案很简单:因为百度不在同一个广播域里,你的数据包首先要交给网关,而网关就是最后一跳的 MAC 地址。

2.4 ARP 安全

ARP 协议本身没有认证机制,因此存在多种攻击面:

  • ARP 欺骗/投毒:攻击者发送伪造的 ARP 响应,将自己伪装成网关或其他主机,实施中间人攻击。
  • 防御手段
    • 静态 ARP 绑定:arp -s <IP> <MAC>
    • 交换机侧启用 DAI(Dynamic ARP Inspection)
    • 部署 ARP 监控工具

三、MAC 地址表 (MAC Table):局域网的"花名册”

3.1 查看 MAC 地址表

MAC 地址表是二层交换机的大脑。交换机看不懂 IP 地址,只看以太网帧头部的 MAC 地址。它的作用就是在同一个局域网内,实现数据的精准投递,避免到处广播扰民。

在华为设备上执行 display mac-address,表结构极其简单:

字段 说明
MAC Address 学习到的主机网卡硬件地址
Port(接口) 这个 MAC 地址插在交换机的哪个物理端口上
VLAN 这个 MAC 属于哪个虚拟局域网

MAC 地址表示例

3.2 交换机三大核心行为

交换机的工作原理只有三板斧:

  1. 基于源 MAC 学习:收到帧时,记录源 MAC 地址和进入端口的对应关系,写入 MAC 地址表。
  2. 基于目的 MAC 转发:查 MAC 地址表,如果找到匹配项,从对应端口单播发出。
  3. 未知目的 MAC 泛洪:如果 MAC 地址表中没有目的 MAC 的记录,就将帧从除接收端口外的所有端口广播出去(Broadcast Flooding)。

3.3 MAC 地址表老化

动态学习的 MAC 表项不是永久有效的。交换机会定期清理长时间没有活动的表项,默认老化时间通常为 300 秒(5 分钟)。这意味着如果一台主机 5 分钟内没有发送任何数据,它在交换机上的 MAC 表项就会被删除,下次通信时需要重新学习。

3.4 MAC 泛洪攻击与防护

端口安全防护

防身术:黑客最喜欢搞 MAC 泛洪攻击,用伪造的海量源 MAC 发包,瞬间把你的交换机表项塞满,导致正常数据全变成广播,借机抓包窃听。

应对大招是配置 port-security(端口安全),限制每个接口最多学习的 MAC 数量:

1
2
3
4
5
# 华为/H3C 示例
interface GigabitEthernet 0/0/1
 port-security enable
 port-security max-mac-count 5
 port-security protect-action restrict

这样即使黑客发送了大量伪造源 MAC 的帧,交换机也只学习前 5 个,超出部分会被丢弃或触发告警。


四、实战推演:一个 Ping 包的跨网段生死流转

光说不练假把式。下面用一个完整的场景,演示三张表是如何协同工作的。

场景设定

  • PC1:IP 192.168.1.2,网关 192.168.1.1
  • PC2:IP 192.168.2.2,网关 192.168.2.1
  • 路由器:连接两个网段,接口分别为 192.168.1.1192.168.2.1
  • 操作:PC1 Ping PC2

4.1 PC1 的判断与 ARP 求助

PC1 收到 Ping 指令后,首先判断目的 IP 192.168.2.2 是否在同一网段。通过子网掩码计算,发现不在同一网段,于是决定将数据包发送给网关。

此时 PC1 查自己的 ARP 缓存表,寻找网关 192.168.1.1 的 MAC 地址:

  • 如果 ARP 表中有记录:直接使用,进入下一步。
  • 如果 ARP 表中没有记录:发送 ARP 广播:“谁是 192.168.1.1?请告诉你的 MAC 地址!”

网关收到 ARP 请求后,回复自己的 MAC 地址。PC1 将 IP-MAC 映射存入 ARP 缓存。

PC1 封装好数据包:

1
2
源 IP: 192.168.1.2 (PC1)     目的 IP: 192.168.2.2 (PC2)
源 MAC: PC1_MAC              目的 MAC: 路由器进接口 MAC

4.2 交换机的 MAC 表转发

交换机收到以太网帧后,执行两个动作:

  1. 学习:记录 PC1 的源 MAC 地址和进入端口,写入 MAC 地址表。
  2. 转发:查询 MAC 地址表,找到路由器进接口 MAC 对应的端口,将帧从该端口转发给路由器。

4.3 路由器的拆包与换皮(核心环节!)

路由器收到帧后,执行以下操作:

  1. 解封装:撕开 MAC 层伪装,露出 IP 层数据包。
  2. 查路由表:发现去往 192.168.2.0/24 网段的直连路由,出接口为连接 PC2 的那个接口。
  3. 查 ARP 表:在出接口所在网段中查找 192.168.2.2(PC2)的 MAC 地址。如果 ARP 表中没有,路由器也会发送 ARP 请求来获取。
  4. 重新封装(最关键的一步):
1
2
源 IP: 192.168.1.2 (PC1) ← 保持不变!    目的 IP: 192.168.2.2 (PC2) ← 保持不变!
源 MAC: 路由器出接口 MAC ← 被改写!      目的 MAC: PC2_MAC ← 被改写!

核心结论:IP 地址在整个跨网段传输过程中始终保持不变,它们是端到端的标识;而 MAC 地址在每一跳都会被重新封装,因为它们只具有链路本地的意义。

4.4 抵达终点

PC2 收到帧后:

  1. 检查目的 MAC 地址,确认是自己的网卡。
  2. 解封装,检查目的 IP 地址,确认是 192.168.2.2,正是自己。
  3. ICMP Echo Reply 回包过程同理,方向相反。

Ping 包跨网段流转示意图


五、三张表联动总结

网络通信的底层真相,就藏在这套逻辑链里:

1
2
3
4
5
6
7
查路由表找下一跳 IP
查 ARP 表找下一跳 MAC
交换机查 MAC 表找物理出接口
数据帧逐跳转发,IP 不变,MAC 每跳重写

一句话记住精髓数据包在网络中传递时,源 IP 和目的 IP 始终不变,指引着最终方向;但源 MAC 和目的 MAC 每经过一个路由器(每一跳),都会被无情地撕掉重写一次!

排障思维模型

现象 可能原因 排查命令
能 Ping 通网关但 Ping 不通外网 路由表缺少默认路由 display ip routing-table
Ping 不通网关 网关 ARP 表项缺失或错误 display arp
同 VLAN 内两台主机不通 MAC 地址表异常/VLAN 配置错误 display mac-address
网络中出现大量广播 MAC 表被泛洪攻击 display mac-address flapping
间歇性断网 ARP 缓存中毒 arp -a 检查表项是否正确

六、延伸思考

6.1 为什么需要三张表?能不能合并?

三张表分别工作在不同的 OSI 层级,职责不可互相替代:

  • 路由表:网络层决策——“包该往哪个方向走”
  • ARP 表:网络层到数据链路层的桥梁——“下一跳的 MAC 是什么”
  • MAC 地址表:数据链路层决策——“这个 MAC 在哪个端口上”

如果只有路由表没有 ARP 表,路由器知道往哪走但不知道如何封装帧;如果只有 ARP 表没有 MAC 表,局域网内的交换就退化为集线器式的广播。三者缺一不可。

6.2 IPv6 时代的变化

IPv6 引入了 NDP(Neighbor Discovery Protocol,邻居发现协议) 来替代 ARP,功能类似但更加完善。 NDP 基于 ICMPv6 实现,支持无状态地址自动配置(SLAAC),安全性也有所提升。不过核心思想是一致的:IP 地址到链路层地址的映射。


参考资源

  • RFC 826 — An Ethernet Address Resolution Protocol
  • RFC 4861 — Neighbor Discovery for IP version 6 (IPv6)
  • Cisco — Understanding and Troubleshooting ARP
  • 华为 — IP Routing Configuration Guide