WRT54G DD-WRT 内部架构
说到研究 RT-AC68U 工作原理,就不得不谈一下经典的 WRT45G / DD-WRT 了,两者的工作原理是非常相似的。
幸运地找到了迄今为止见过最好的内部工作原理图:
原理简述:
WRT54G 内部有三大组成部分
SoC – 路由器
一个6口交换机
无线模块
交换机端口划分成 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 之间的流量是由路由器通过 iptables
和 ip 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 的则是互联网流量。