Overview
一直对路由器的内部设计存在疑惑,实际在找资料过程中也发现路由器有着不同的设计。
下面是我找到的一张路由器的参考设计:
这张图描述的路由器架构是十分清晰的。首先路由器对外接口有5个,这5个接口都接在一个可编程的交换机里面。
这些接口的数据随后会汇聚成一路,到路由器的芯片里面。
那么这5个物理接口是如何区分WAN口和LAN口的呢,这里是通过VLAN来将其引入路由器的核心模块。
因为这个交换机是可编程的,于是我认为经过稍加修改,这个路由器可以修改成为多WAN口的路由器。
外部的wifi接口通过桥接来巧妙地接到VLAN0上。
这里将WAN口单独赋予一个VLAN,可以将WAN口和LAN口区分开,因为最终要汇聚成一路来引入
到eth0里面。如果WAN口直接连接到CPU上,我想应该就不用为它单独划分一个VLAN了。
为它单独划分VLAN的好处我想是可以通过修改软件设计,将这个路由器改成一个5口的交换机。
提到改交换机这个思路,一般的做法是关闭路由器的DHCP,那么关闭DHCP后的路由器行为目前还不清楚,
我想就是将VLAN0和路由器内部一些机制的通路给关了,
后面通过学习openwrt应该可以进一步理解路由器的架构,不过不同路由器的架构设计是不一样的。
下面再看一下dlink825的设计,这里有6口的交换机,P0-P3是做LAN口,wifi直接连接到路由器芯片,
WAN口直通到eth1。这里大体的设计和上面的图是差不多的。
下面再分享一篇文章,有助于加深对路由器内部结构的理解。
http://www.diffen.com/difference/LAN_vs_WAN
下面是其中的一张表格(翻译)
LAN |
WAN | |
---|---|---|
代表 | 局域网 | 广域网 |
覆盖 | 本地(家庭,学校,办公室) | 广大的区域(比如城市) |
速度 | 1000Mbps | 小于150Mbps |
案例 | 一个办公室内的网络 | internet |
技术 | Ethernet | MPLS, ATM, Frame Relay 和 X.25 |
组成 | 二层的交换机和网桥 | 路由器、多层次的交换机,ATM,Frame-relay的交换机 |
产生的问题 | LAN很少出问题,因为只是管理很少的机器 | 因为是一个大的系统,所以比较容易出问题 |
数据传输错误 | 很少的传输错误 | 大量的传输错误 |
拥有者 | 个人也可以拥有 | WAN(像Internet) 不是属于任何人的,而是需要国际之间协作、维护的 |
花费 | 便宜 | 像海底电缆这样的设置肯定要花很多钱,但是使用WAN的成本是很低的 |
带宽 | 大量的带宽 | 带宽比较小,比如国家之间的出口带宽 |
拥堵 | 小 | 大量 |
因为个人用户一般是连接到ISP来上网的,带宽受限,所以设置一个WAN口来连接internet,多个LAN口来做局域网是合理的。
如果关闭DHCP,两台电脑连接到LAN口我想也可以互相通信(交换机模式),只要手动设置IP地址就可以了。
数据包分析
家用路由器不同于一般的路由器,一般教科书上所讲到的路由器是多WAN口的路由器,
而现在市面上的家用路由器只有一个WAN口,有多个LAN口。下面用数据包发送的流程来分析一下家用路由器的
工作流程。
家用路由器的和商业路由器的区别我认为有以下几点:
1.通过交换机实现多LAN口
2.单WAN口
3采用NAT来实现共享上网
4.成本低,功能少
1.通过交换机实现多LAN口
这个设计相当于一个交换机和一个路由器连接。下面仔细分析一下计算机间的通讯流程。
这里假设计算机里面已经有了指向网关(也就是路由器)的一个项路由表项。
一般用户需要使用网络,比如HTTP应用,都是在网络层之上的。而路由器和交换机工作在IP层和MAC层。
所以一般来说,用户的数据都需要加上IP头和MAC头。
DHCP
实际上DHCP就是方便计算机自动获取IP地址,这样用户就不用操心了,否则用户就需要自己配IP地址了。
LAN口之间的计算机通信
这种情况和两台电脑之间直连的情况是一样的。电脑上首先要填入自己的IP,默认的网关和子网掩码
当电脑发出去的包的目的IP是在同一个子网内的时候,会发送给同一个子网的电脑。所以说只经过交换机就行了。
当然了,802.3帧格式要求application前面要加上IP头和MAC帧头,所以需要知道对方的MAC地址。
通过广播ARP请求就可以知道对方的MAC地址,然后将帧包好发出去。
LAN口和WAN口之间的通讯
LAN口的计算机数据要过WAN口,需要通过交换机和路由器。
首先,电脑检测自己的目标IP地址不在同一个网段中,这时候就需要路由器帮忙了。
它会将这个数据发送给路由器,让路由器来处理。不过,有了IP地址不够,要在ethernet上传输
还需要有MAC地址,于是它发送一个arp请求给网关,然后就得到了网关的MAC地址。接下来就可以
将帧封装好发送给网关了。这里的网关就是家用路由器内部的路由器模块,更实际的说,是在一块CPU里面。
网关内部将这个数据包做NAT转换就可以发送到下一跳了,一般是ISP的机器。
WAN口到ISP之间的协议就不一样了,根据抓包可以看到多了一层PPPOE的协议
VLAN的处理
这里WAN口和LAN口做在了一个交换机上面。通过VLAN的隔离(MAC层隔离),交换机上的WAN口和LAN口的数据就不会互通了。VLAN的数据需要路由模块的转发。
2.NAT
关于NAT,网上的资料很多,这里就不提了。位于NAT内的机器是不能直接被暴露到
internet的。一些运营商的做法,使得家庭用户无法暴露自己的设备(如监控摄像头)到internet,因为
他们采用了NAT。部分网友采用投诉的办法来让运营商取消对自己做的NAT。