Linksys Wireless-G Router (model WRT54G),Cisco / Linksys 在2003年发行的这款无线路由器使用802.11g标准使得带宽在理论上能够达到54M(2003年的时候),相对于当时业界普遍使用802.11b的11M带宽,不能不说实现了一次飞跃。它可以通过自带的DSL / Cable接口接入宽带互联网,对于内网则支持4个以太口交换与无线广播接入。
2005年初国内开始销售这款路由器。国外销售价格大概为$60,相对于其他产品来说的话就跟摆地摊的货差不多了。好了,不谈这些参数的问题。关键是:同年有好事者在 Linux Kernel Mailing List 搜索 WRT54G,发现它的IOS是基于Linux,然而Linux基于GPL发布许可证,就是 GNU General Public License。该许可证规定Cisco应该把WRT54G的IOS的源代码公开。本来Cisco拒绝公开源代码,最后,03年三月份的时候,基于公众压力Linksys公开了WRT54G的源代码。
故事本来到这里就结束了,然而相反,结果越闹越大:有了源代码以后,开发者便清楚知道代码如何控制路由器的硬件,并且掌握了一些通过增加新的代码到原有的IOS当中去 —— 使得硬件支持更多的Feature的技术。这些开发者组成了一个项目开发团队,不断对原来的IOS进行更新,编码,加入新的特性。现在他们手上的WRT54G无线路由器的能力已经大大超过了原来Cisco设计的地摊货的设计思路。不但如此,随着这两年互联网Web 2.0技术的发展,不同的开发团队之间找到了更好的协同工作平台,其规模不亚于TAC。他们最近建立了一个DD-WRT项目的Wiki站点将全套文档以及代码公开发布。使用DD-WRT项目提供的源代码,重新升级WRT54G以后你就能够获得一台相当于$600左右的中端无线路由器了。
OpenWrt
http://openwrt.org/
OpenWrtDocs
http://wiki.openwrt.org/
DD-WRT
http://www.dd-wrt.com/
由于做项目的需要和自己的爱好,最近在找关于无线路由器的资料,找到了些相关的资料,在这里总结一下。
一、无线路由器与无线AP的区别
(资料来源:详谈无线路由器与无线AP的区别)
AP为Access Point简称,一般翻译为“访问节点”,无线AP主要是提供无线工作站对有线局域网和从有线局域网对无线工作站的访问,在访问接入点覆盖范围内的无线工作站可以通过它进行相互通信。通俗的讲,无线AP是无线网和有线网之间沟通的桥梁。
当前的无线AP可以分为两类:单纯型AP和扩展型AP。
单纯型AP的功能相对比较简单,缺少路由功能,只能当无线集线器。它相当于一个无线交换机,接在有线交换机或路由器上,为跟它连接的无线网卡从路由器那里分得IP。
扩展型AP也就是市场上的无线路由器,由于它功能比较全面,大多数扩展型AP不但具有路由交换功能还有DHCP、网络防火墙和端口映射等功能。它是单纯型AP与宽带路由器的结合体;它借助于路由器功能,可实现家庭无线网络中的Internet连接共享,实现ADSL和小区宽带的无线共享接入 ,另外还可以把通过它进行无线和有线连接的终端都分配到一个子网,这样子网内的各种设备交换数据非常方便。简单地说,无线路由器就是AP、路由功能和交换机的集合体,支持有线无线主机组成同一子网,直接接上MODEM。
现在市场上的无线AP大多属于扩展型AP,它们在短距离范围内是可以相互联的;如果大家需要传输的距离比较远,那么就需要无线网桥和专门的天线等设备,其实无线网桥也是无线AP的一种。
二、理解路由的概念与原理
这里需要网络知识,可以稍微学习理解一下TCP/IP协议,以及数据链路层与网络层的交互。路由层的知识摘录如下:(资料来源:路由器原理及路由协议的基础知识)
路由器工作在OSI模型中的第三层,即网络层;同时也是TCP/IP协议的第三层,即网际层。 路由器利用网络层定义的“逻辑”网络地址(即IP地址)来区别不同的网络,实现网络的互连和隔离,保持各个网络的独立性。路由器不转发广播消息,而把广播消息限制在各自的网络内部。发送到其他网络的数据均先被送到路由器,再由路由器转发出去。
IP路由器只转发IP分组,把其余的部分挡在网内(包括广播),从而保持各个网络具有相对的独立性,这样可以组成具有许多网络(子网)互连的大型的网络。由于是在网络层的互连,路由器可方便地连接不同类型的网络,只要网络层运行的是IP协议,通过路由器就可互连起来。
网络中的设备用它们的网络地址(TCP/IP网络中为IP地址)互相通信。IP地址是与硬件地址无关的“逻辑”地址。路由器只根据IP地址来转发数据。IP地址的结构有两部分,一部分定义网络号,另一部分定义网络内的主机号。目前,在Internet网络中采用子网掩码来确定IP地址中网络地址和主机地址。子网掩码与IP地址一样也是32bit,并且两者是一一对应的,并规定,子网掩码中数字为“1”所对应的IP地址中的部分为网络号,为“0”所对应的则为主机号。网络号和主机号合起来,才构成一个完整的IP地址。同一个网络中的主机IP地址,其网络号必须是相同的,这个网络称为IP子网。通信只能在具有相同网络号的IP地址之间进行,要与其它IP子网的主机进行通信,则必须经过同一网络上的某个路由器或网关(gateway)出去。不同网络号的IP地址不能直接通信,即使它们接在一起,也不能通信。
路由器有多个端口,用于连接多个IP子网。每个端口的IP地址的网络号要求与所连接的IP子网的网络号相同。不同的端口为不同的网络号,对应不同的IP子网,这样才能使各子网中的主机通过自己子网的IP地址把要求出去的IP分组送到路由器上。
当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,对方就能收到。而要送给不同IP于网上的主机时,它要选择一个能到达目的子网上的路由器,把IP分组送给该路由器,由路由器负责把IP分组送到目的地。如果没有找到这样的路由器,主机就把IP分组送给一个称为“缺省网关(default gateway)”的路由器上。“缺省网关”是每台主机上的一个配置参数,它是接在同一个网络上的某个路由器端口的IP地址。
想要更好的学习无线路由器的技术和知识,最好的办法就是实践,搞一块无线路由的开发板。有幸的是,由于我们可敬的Linux hacker前辈们的努力,让现在许多MIPS芯片的无线路由产品变成了廉价的开发板,3、5百元有可以买到一个不错的。下面我就把搜到的资料分享一下:
三、开源的无线路由软件及相关产品
(参考资料:LINKSYS 摘记)
针对无线路由器进行刷新固件的操作并且开源是在Linksys产品中首次出现的。具体的原因请看《Cisco小失误,大麻烦》。
在这之后,Linux爱好者们利用这些资源发展出了很多无线路由的Linux发行版,下面介绍一下主流的无线路由的Linux发行版:
Open-WRT
国内最早兴起刷固件行动的人基本上都是将自己的设备刷新成Open-WRT,由此可见Open-WRT的影响力。 该固件通过SSH加密协议来配置,和Cisco设备在很多指令和操作上类似,不过由于该固件的开发进度非常缓慢,新版本更新比较慢,所以它的角色已被DD -WRT等新近“崛起”的固件所取代。
所支持的硬件 源码下载
DD-WRT
该固件是国内外目前最为流行的固件之一,它是在Open-WRT固件的基础上改进后发布的,很多功能都是取自Open-WRT。在应用范围上DD-WRT支持极多硬件平台,并且新版本的发布也很及时。
所支持的硬件 源码下载(源代码在others/sourcecode/目录下) DD-WRT Wiki
HyperWRT
以稳定著称的第三方固件,不过功能上要比前两种稍逊一筹。从核心代码上比较,它是最接近于Linksys官方Firmware的固件。对很多用户来说,新功能、新应用的出现是他们刷新固件的主要动力,如果只是单一的稳定,那么直接使用官方默认固件即可。
源码下载
Tomato
这是一款非常火爆、逐渐流行的固件,个头比较小,外号“番茄”,实际使用起来非常稳定(与DD-WRT比较,我同事亲身体验的),基于SVG的图形化流量图非常有特色。它是由 HyperWRT研发团队中的一个组员开发的。个小功能强是它的最大特点,这也是越来越多的玩家和无线路由器发烧友脱离DD-WRT阵营转投“番茄”门下 的主要原因。
所支持的硬件和源代码都在主页有
FreeWRT
也是一个比较不错的发行版,他的一个重要特点是:你不仅可以下载源码来自己配置编译,还可以通过网页直接产生定制的镜像文件!所支持的硬件
四、支持开源Linux的无线路由器产品及其购买指南
开源无线路由的硬件产品现在很多,都是MIPS核心的芯片,而且基本都是使用broadcom芯片为主CPU,并加miniPCI接口的无线网卡,flash存储器使用NOR flash,内存有大有小(小到8MB,大到128MB)。软件支持的硬件型号在发行版的网站上有说明。
但是产品哪里有售呢?买做好的产品,要是刷坏了不好办阿!所以一些商家把二手的无线路由加以改进(基本是加大RAM和Flash),并找出串口和JTAG口,引出USB口,拿裸板来卖,方便发烧友们折腾!这里我强烈建议买有引出JTAG接口的无线路由来折腾,这样比较安全,基本刷不死。
淘宝上有很多这些开发板性质的无线路由,但是最有名卖家还属恩山淘宝店铺,他们不仅有许多开发板性质的Linksys无线路由裸板,还有自己的论坛,技术支持有保证。同时您也可以在他们的论坛中的个人物品转让或求购专区中找到二手转让的板子。
经过我的搜索还有一个很强悍的无线路由开发板:RouterStation Pro,同时著名的无线设备生产商UBNT的产品,他们很值得一买,好像这个公司据说是UBNT的代理。
五、开源Linux的无线路由器刷机简要指南
对于刷机更新路由的固件,最简单的方法当然是在发行版的网站下载你所需要的刷机包(一个bin文件),通过登录路由的管理界面来更新,但设个方法可能并不能满足所有要求,特别是对于开发者来讲。
对于这些开源的Linux无线路由的所有软件都存在Nor flash里,而在flash里的内容主要有:
root@Tekkaman WRT:/dev# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "cfe"
mtd1: 007b0000 00010000 "linux"
mtd2: 004dd400 00010000 "rootfs"
mtd3: 00010000 00002000 "nvram"
mtd4: 001f0000 00010000 "ddwrt"
(以 WRT300N Version 1.1刷上了DD-WRT为例)
cfe:Common Firmware Environment 通用固件环境,也就是嵌入是系统中的bootloader,或者电脑中的BIOS,负责初始化主板,并启动操作系统,同时具备网络功能、刷写其他分区、修改启动参数和操作主板上的硬件的能力,可以说是一个功能强大的bootloader。在这里有详细的介绍,boardcom还提供其源码(包含说明文档)和开发工具的下载。在cfe分区中存放了cfe及其使用的参数。
linux:就是存放Linux内核的分区
rootfs:就是存放Linux系统必须的根文件系统的分区。
nvram:存放路由器在进入Linux系统后,运行路由和无线控制程序所需要的参数的分区,比如拨号是所需的帐户、秘密,路由器的名字、SSID等等,几乎所有关键的参数。顾名思义,Linux把这个分区当作非易失性的ram来使用。
ddwrt:应该是DD-WRT使用的分区,但我将其备份出发现,什么数据都没有,功能我尚不明确。
对于刷机来说,首先要有刷机的原料:刷机包或者bin文件。获得这些东西一是通过发行版的网站获得,还有就是从一台已经刷好的路由中备份出来,在者就是通过源代码编译出你所要的程序。在这里我之简要介绍一下如何从一台已经刷好的路由中备份出各个分区的其中一种简单的方法:(参考的帖子)
(1)打开路由的ftp服务;
(2)通过传口或者网口登录无线路由,并执行以下命令:
root@Tekkaman WRT:~# mount -t ramfs ramfs /mnt
root@Tekkaman WRT:~# dd if=/dev/mtd/0 of=/tmp/cfe.bin
512+0 records in
512+0 records out
root@Tekkaman WRT:~# cp /tmp/cfe .bin /mnt/
(3)通过PC机的ftp软件,下载已经在/mnt中的分区备份。
这样就简单的备份出了cfe分区。别的分区也可同样备份出来,对于DD-WRT的rootfs分区,可能可以备份出后解开镜像文件来研究,他是一个squashfs文件系统。
如果你的路由参数被破坏了,你还可以通过刷回备份的nvram分区来恢复,方法如下:
如前所诉,通过ftp发送nvram备份到路由,然后执行:
root@Tekkaman WRT:~# cd /mnt
root@Tekkaman WRT:/mnt# mtd write nvram.bin nvram
root@Tekkaman WRT:/mnt# reboot
这样重启后设置的内容都恢复了,别的分区也可如此恢复。
其实以上介绍的方法就是一种可以在路由器的系统还可运行,并可登录的情况下刷机的方法:将备份出的分区直接在Linux下刷入系统。
如果你的系统被破坏了,无法启动,那就的看破坏的程度了:
(1)如果是Linux分区被破坏了,无法进入Linux系统,但可以进入cfe,那就可以通过cfe的tftp方式恢复。
这种恢复方式需要连接出路由板上的UART接口(也就是论坛上说的TTL),你必须制作一个连接线,它本质上是通过一个USB转串口的芯片来实现。其实也可以将USB转串口芯片改成232电平转换芯片(比如MAX232),然后接至电脑的串口。这些东西学过电子的朋友一定不难;但是你如果嫌麻烦,你可以在恩山论坛或者淘宝购买。
路由和PC间连接好了TTL和网线后,你就可以在路由上电时,在PC的串口工具中按住CTRL-C来进入cfe命令行模式,使用tftp的方法刷机。
(2)如果是cfe都被破坏了,那就是有通过JTAG口来恢复了。
这种方法你必须现制作一个并口的JTAG线,使用网上的brjtag.exe来操作路由,他可以在路由器的所有软件都被破坏后对路由器进行擦除、刷机和备份等操作。所以可以说他是砖机的救星,所以这也是我在开头推荐大家购买有JTAG接口的路由的原因。
以上对于两种方法,内容比较多。由于篇幅有限,以后我会在博客中详细介绍,你也可以到恩山的论坛上找资料。
六、总结
在一个网络飞速发展的今天,了解一点网路的知识和原理是很有益的,对于一个普通的电子爱好者,对于一个电子工程师是很重要的,对于一个嵌入式系统的工程师是必须的。而学习实践网络的好机会就是“玩”无线路由。而最好“玩”的无线路由就是开源无线路由器,从中你可以学到很多知识和技术。本文整理并介绍了一点无线路由的基本概念、路由的运作原理、主流的开源无线路由的Linux发行版、硬件购买指南及简单的刷机指南,希望对于大家认识和学习开源无线路由有一点帮助。