一个说不通的实验结果
两台电脑挂在同一个交换机下,互相能 ping 通。把其中一台的 IP 从 192.168.1.20 改成 192.168.2.20,掩码两边都是 255.255.255.0。网线没动,交换机没动。
结果:两台互相 ping 不通了,但两台都还能正常上网。
如果只知道“IP 就是机器的门牌号”,这件事没法解释。要解释它,得先认识 ARP。
MAC 地址是什么
每块网卡出厂时烧了一个 48 位地址,写成 12 个十六进制字符,比如 aa:bb:cc:00:11:22。它分两半:
- 前 24 位是 OUI(厂商标识)。同厂网卡前缀相同,靠它可以大致判断设备品牌。
- 后 24 位由厂商自行分配,约 1677 万种组合。
它需要保证唯一性的范围其实很小:同一个广播域内不重复就够了。跨网段之后,MAC 会被路由器整个换掉。
这也解释了一个细节:虚拟机和容器的 MAC 是软件生成的,偶尔会撞。两个容器配了同一个 MAC,又在同一个二层网络里,就会互相抢流量。
ARP 解决的问题
IP 包要交给网卡发出去,可以太网帧头要填的是目的 MAC,不是目的 IP。手里只有一个 IP 地址怎么办?
ARP 只干一件事:已知 IP,求对应的 MAC。
- 发一个广播帧,目的 MAC 全是
ff:ff:ff:ff:ff:ff,内容是“谁是 192.168.1.5?告诉 192.168.1.2”。 - 广播域内所有设备都收到,只有 IP 匹配那台回应,单播回自己的 MAC。
- 结果写进 ARP 缓存表,下次直接用。
缓存有老化时间:Windows 一般几十秒,Linux 默认几十秒到几分钟(随内核版本变化)。过期了要重新问一次。
最关键的一句话
跨网段通信时,ARP 解析的是网关的 MAC,不是目的主机的 MAC。
因为以太网只能把帧送到同一个广播域里的设备,而目标主机在别的网段,发出方根本够不到它,也就无从知道它的 MAC。网关是唯一在同一个广播域里、又愿意把包带出去的设备。
回头看开头那个现象。192.168.1.20 被改成 192.168.2.20(掩码仍是 /24)之后:
- 它 ping
192.168.1.30:一算不同网段,于是不看 192.168.1.30,转去查网关。 - 网关还是原来的
192.168.1.1,在它自己的掩码下属于“别的网段”。 - 但 ARP 广播不管网段,它照旧在同一个二层广播域里发出去,路由器收到了就回了自己的 MAC。所以它上网依然是通的。
- 反过来
192.168.1.30ping 它也认为不同网段,把包交给网关;网关只有192.168.1.0/24这一个接口,没有回192.168.2.0/24的路由,直接丢掉。 - 最终现象:能上网,但不能互访。
这个案例说明一件反直觉的事:能上网不代表内网配置对。上网只验证了“能到网关”,完全不验证“掩码与邻居一致”。
ARP 表长什么样
Windows:
C:> arp -a
接口: 192.168.1.2 --- 0x5
Internet 地址 物理地址 类型
192.168.1.1 aa-bb-cc-00-11-22 动态
192.168.1.30 aa-bb-cc-00-33-44 动态
Linux:
$ ip neigh
192.168.1.1 dev eth0 lladdr aa:bb:cc:00:11:22 REACHABLE
192.168.1.30 dev eth0 lladdr aa:bb:cc:00:33:44 STALE
STALE 不代表不可用,只是说“这个条目超过一定时间没确认,下次通信时先验证一下”。真正的故障状态是 FAILED 或 INCOMPLETE,那表示 ARP 请求没人应答。
ARP 相关的典型故障
1. IP 冲突
两台机器配了同一个 IP。表现是网络时通时断、ARP 表里同一个 IP 的 MAC 来回跳。查法:连续执行几次 arp -a,看同一个 IP 的 MAC 是否变化。根治办法是统一走 DHCP,别手工配。
2. ARP 欺骗
攻击者持续发送伪造的 ARP 应答,把网关 IP 对应到自己的 MAC。之后所有人的流量都从它那儿过。很多“网吧或宿舍突然断网、网页被插广告”就是这套原理。防护靠交换机端口安全(MAC-IP 静态绑定)、DHCP Snooping、动态 ARP 检测。
3. 静态 ARP 绑定
双向绑定(主机绑网关、网关绑主机)能防欺骗,但换网卡或换 IP 之后会变得极难排查。生产环境慎用,一定要记录在案。
4. VLAN 隔离下的 ARP 不通
两台机器在同一个 IP 网段,却被划进了不同 VLAN。它们会互相发 ARP 广播,但广播被隔离了,永远收不到回应。现象和“IP 配错”一模一样,只能靠交换机配置去查。
交换机侧:MAC 表从哪来
交换机靠“源 MAC 学习”建立 MAC 表:收到帧时记下源 MAC 和入口端口,不需要预先配置。反过来,如果某个端口上短时间内出现大量不同源 MAC,通常意味着那儿接了一台非管理型交换机,或者有人在搞 ARP 欺骗。
小结
IP 是逻辑地址,用于跨网段寻址;MAC 是物理地址,只在同一个广播域内有效。ARP 是两者之间的桥,而跨网段时这座桥只搭到网关为止。记住这一点,“配了 IP 还是不通”就能拆成三问:同不同网段?网关对不对?ARP 通不通?
算是否同网段别手算,用 IPv4 子网计算器 更稳。想先弄清交换机与路由器各自的分工,回到 交换机与路由器 那篇。
相关:DHCP 是怎么分到 IP 的——在问「这个地址是谁的」之前,得先有个地址。









暂无评论内容