网上看到一篇探讨同一主题的文章,热度不低,我也来探讨一下这个经典的网络问题。
一、问题分析
从这个问题本身可以看出,提问者具备一定的网络基础知识。
他知道,距离主机最近的网络设备,往往不是能够识别和管理IP地址的路由器,而是无法直接识别IP的交换机。
同时,网络通信又无法绕过交换机进行,于是便产生了本文标题中的疑惑。
二、常见误区
或许有人会说,自己从未使用过交换机,家里上网直接连接路由器即可。
其实在这种情况下,使用了路由器就等于使用了交换机。因为现实中的网络设备大多具有向下兼容的特性。例如,路由器通常会集成交换机功能,而交换机又可能集成集线器的功能。

另一个常见的误区是,许多人将交换机简单地理解为集线器,认为它只是用来提供更多网络接口、连接更多设备而已。实际上,交换机是具备识别和管理MAC地址功能的智能设备。
回到核心问题:既然交换机是实际离主机最近的网络设备(之后才是路由器),且交换机无法识别IP地址,那么两台使用IP进行通信的主机,究竟是如何完成通信的呢?
三、一个生动的比喻
在正式解答前,我们可以用一个生动的比喻来理解。这就像我请朋友吃饭,用餐中途我去洗手间时,顺道把账单结了。
之后,我和朋友吃完饭,一起起身径直离开了餐厅。这时,我的朋友突然发问:为什么我们可以不用买单就直接离开呢?
四、根本原因
本文的问题,与上面那位“朋友”的疑问颇为相似。他们都犯了一个相同的认知错误:认为自己没有亲眼看到的过程,就等于没有发生。
实际情况是,如果仅使用MAC地址进行网络通信,确实不一定需要IP地址。但是,一旦使用了IP地址,你就一定用到了MAC地址。
因为IP所属的网络层位于MAC所属的链路层之上,后者是前者的基础。好比一栋楼,二楼是三楼的基石,除非你会飞,否则不可能不经过二楼而直接到达三楼。

说得更具体一些:IP报文是被封装在MAC报文之中,然后才在网络中进行传输的。
这就像一个包子,MAC地址是包子皮,IP地址是包子馅。你不可能在不咬破(或拆开)包子皮的情况下,直接吃到里面的馅。

如果你觉得自己做到了,那一定是因为有人(或某个系统)先替你“咬破了包子皮”,然后把“馅”喂给了你。
提出本文问题的朋友,他的“包子皮”就是由操作系统和网络协议栈自动处理掉的。他以为自己只是在用IP地址通信,实际上他也使用了MAC地址。只不过,对MAC地址的处理是由链路层协议自动、透明地完成的。
而MAC地址,正是交换机能够识别并进行转发的依据。
五、扩展阅读
希望这个解释能帮助你理清网络层与链路层的关系。如果你对网络原理有更多疑问,欢迎在云栈社区 的技术论坛中与大家共同探讨。