假设在人群中,有人喊了一声“罗小浩”,你便会循声转头,发现是老同学贾小龙。接下来便是老友重逢的寒暄与打闹……

你为什么会转头?
因为你知道“罗小浩”这个关键词指的是你,它就像一个过滤器(Filter),帮你屏蔽了不相关的杂音。如果喊的是“王小明”,你多半不会理会,因为它已经被过滤掉了。
实际上,我们的大脑本身无法直接“听见”声音。于是,它将“接收(Rx)”声波信号的任务委托给了耳朵。其工作原理大致是:将模拟的声波信号,通过生理结构过滤出感兴趣的信号,并将其转换为生物电信号传递给大脑。这个过程,可以理解为一种特定的输入(Input),简称 I。
同理,大脑也无法直接“发出”声音。它将“发送(Tx)”声波信号的任务委托给了嘴巴,将生物电信号转化为声波并传播出去。这个过程,可以理解为一种特定的输出(Output),简称 O。
物理层(Physical Layer)
耳朵与嘴巴这一对黄金组合,共同完成了输入/输出(I/O),即Rx/Tx。从感性认知上,这就是物理层。
计算机中的网卡(NIC) 是地地道道的物理层设备,它的核心任务同样是 I/O(Rx/Tx),其工作流程可类比于耳朵和嘴巴。
然而,如果不给网卡配置一个过滤器,它将接收所有经过的信号。这极其糟糕,会导致CPU疲于处理大量不属于自己的数据包。
数据链路层(Data Link Layer)
为了解决上述问题,我们引入数据链路层,并在这一层添加链路层过滤器。对于以太网卡而言,这个过滤器就是 MAC地址。
网卡会根据以下规则进行过滤:
- 目的MAC是本机MAC,则接收。
- 目的MAC是广播地址,则接收。
- 目的MAC是感兴趣的组播地址,则接收。
- 其他MAC地址的数据帧,一律丢弃!
你可能会问:既然链路层已经有了MAC地址过滤器,为什么还需要网络层的过滤器(如IP地址)?
别忘了网络中有路由器这样的设备。
对于一个到达路由器的数据包:
- 情况一:目的MAC == 路由器MAC 且 目的IP == 路由器IP → 说明此包就是发给路由器自身的,接收并上交给上层处理。
- 情况二:目的MAC == 路由器MAC 但 目的IP ≠ 路由器IP → 说明此包需要路由器进行转发(Forward)。
- 情况三:目的MAC ≠ 路由器MAC(且非广播/感兴趣的组播)→ 丢弃!
通常,网卡硬件负责物理层和大部分数据链路层功能。而操作系统内核中的TCP/IP协议栈,则负责网络层(如IP协议)及以上的处理。
因此,链路层过滤器和网络层过滤器都是必不可少的。本质上,无论是链路层地址(MAC)还是网络层地址(IP),对于发送方而言是“地址”,但对于接收方而言,它们都是“过滤器”。一旦深刻理解了这个核心观点,很多网络基础概念都会变得清晰起来。
数据包被成功交付给网络层的TCP或UDP后,又会经历一个复杂但逻辑清晰的过滤过程(例如通过五元组哈希匹配到正确的Socket)。
从有线网络来看,数据链路层(L2)、网络层(L3)、传输层(L4) 都拥有自己的过滤器机制。理解了“过滤”,就掌握了计算机网络大半的精髓。甚至在无线网络(如Wi-Fi 5/6/7)中,物理层本身也具备初步的过滤能力。
一个生动的比喻
假设王老师想传一张纸条给“罗小浩”,纸条上写着“罗小浩收”。
- 王老师将纸条递给队伍的第一位同学。
- 第一位同学递给身后的第二位同学。
- 第二位同学递给身后的第三位同学。
- …
- 第N位同学最终将纸条递给了罗小浩本人。
游戏结束,因为“数据包”已经抵达最终目的地。
故事中第1、2、3…N-1位同学,扮演的就是路由器(Relay) 的角色,负责数据包的转发。
- 为什么中间同学会接收并传递不属于自己的纸条?
因为纸条上写的当前接收人(类比目的MAC地址)就是他。
- 为什么中间同学不留下来,而是继续传递?
因为纸条的最终收件人(类比目的IP地址)是“罗小浩”,而不是他,所以必须转发。
分层设计的必要性
如果大脑自身就具备听说能力,那确实可以不分层,无需耳朵和嘴巴。但现实是,人体通过不同器官(分层)来专精特定功能,实现了高效协作。
计算机网络分层 的设计思想亦是如此!通过清晰的层次划分,每一层专注解决特定问题,并使用标准的接口与上下层交互,从而实现了复杂网络通信系统的模块化、可靠与高效。
|