我家里安装了无线路由器(由 ISP 提供)。场景:
路由器 IP:192.168.1.1
我的机器 IP(X):192.168.1.2
机器Y的IP:192.168.1.3
现在当我从我的机器 X ping Y 时(从 192.168.1.2 ping 192.168.1.3)
My Routing table says:
192.168.1.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
这是一条本地路由,现在将查询 ARP 以获取 Y 的 MAC 地址。假设 Y 有 mac:yy:yy:yy:yy:yy:yy 因此,将从 wlan0 向路由器发送一个数据包,目标 mac 为 Y。
现在路由器将如何转发数据包?它将根据 MAC 进行交换还是使用第 3 层 IP 查找来转发数据包?
答案1
现实世界中的设备可能会做出奇怪而可怕的事情。但由于这两个设备位于同一网络中,我们预计路由器会像交换机一样运行,并根据 MAC 地址转发数据包。
答案2
家庭无线路由器结合了多种功能
- 一个(通常为 4 端口)交换机
- 路由器
- 无线接入点
我认为无线接入点会跟踪它们过去见过的 MAC,当然也会知道每个关联客户端的 MAC。因此,如果无线接入点从一个关联客户端接收流量,并且该流量将流向另一个关联客户端,并且未禁用“AP 隔离”,则无线硬件无需让路由器中的任何路由功能(通常是 CPU 代码,例如 Linux 或 VxWorks 内核)知道这一点。
硬件是否真的这样做则完全是另一回事(我可以想象一些廉价的无线硬件将发往同一子网上另一台无线主机的流量发送给 CPU)——但即使没有,路由功能(Linux 内核等)仍应将其路由回无线接口,因为这是路由表告诉它要做的事情。这样做效率低下,但如果出于成本原因这样做,我也不会感到惊讶。
假设您有 4 台计算机(A、B、C、D)连接到交换机,然后第 5 个端口连接到路由器。如果 A 想要与 B 通信,交换机将知道(通过记住经过它的 MAC 地址)或找出(通过将传出流量泛洪到所有端口并记住谁响应)A 和 B 位于哪个端口,并且可以直接转发,路由器永远不会参与其中。使用无线时,所有相关客户端基本上都在“无线交换机”上,并且它的工作方式(或应该工作方式)相同。
因此它应该基于第 2 层进行 BRIDGE(这是第 2 层的正确术语,而不是 ROUTE)。