WRT54G DD-WRT 内部架构

说到研究 RT-AC68U 工作原理,就不得不谈一下经典的 WRT45G / DD-WRT 了,两者的工作原理是非常相似的。

幸运地找到了迄今为止见过最好的内部工作原理图:

WRT54G Internal Architecture

原理简述:

WRT54G 内部有三大组成部分

  1. SoC – 路由器

  2. 一个6口交换机

  3. 无线模块

交换机端口划分成 port 0-3 (路由器上的 LAN 端口编号是不一样的)是本地局域网端口 port 4 是 WAN 端口。交换机的 port 5 与路由器的 eth0 连接。共6个端口。

为了隔离 WAN 和 LAN 流量,交换机使用了 VLAN 本地局域网流量被标记为 vlan0 互联网流量被标记为 vlan1

注解: eth0.0 => vlan0 eth0.1 => vlan1 图中采用 Ethernet alias 代表 VLAN 的标记方式。

交换机 port 5 和路由器 eth0 之间的连接叫做 trunk – 允许多个 VLAN 流量通过。Ethernet frame 会被打上 VLAN 标记,这样的话 trunk 才可以识别 Ethernet frame 是属于哪个 VLAN 的,当数据帧从一个网络接口流出时它知道自己属于哪一个 VLAN 。

注解: trunk 上未标记的流量默认被标记为 VLAN0 也叫做 native VLAN 。

两个 VLAN 之间的流量是由路由器通过 iptablesip route 命令来控制的,所有从 LAN 进出到 WAN 的数据包都是流经路由器的。

无线模块的接口 eth1 (不是交换机的一部分),通过 Linux Bridge – br0 和 vlan1 桥接起来,可以看作是交换机 <=> 虚拟交换机 <=> 无线模块,流量视为本地局域网流量处理。

备注: Linux Bridge 可以认为是虚拟交换机,在二层做包的转发,转发是基于 Ethernet addresses 而非 IP 地址(比如路由器)。

其实是把搞 XenServer 学到的网络知识套到路由器工作原理上,很快就融会贯通了。

简述就是:无线模块通过 eth1 接到 SoC 上, SoC 和6口交换机部分通过 trunk 连接。在 CPU 上的网桥 br0 (相当于虚拟交换机)把 eth0 eth1 和 trunk 包括了 VLAN 桥接了起来,打 vlan0 标签的 frame 就作为 LAN 流量来处理,打 vlan1 的则是互联网流量。