一、前言
一套通信协议的实现除了硬件编/解码与信号传输之外,其余的部分均可以有所选择的由软件或者硬件实现。好比最普通的RS232协议,如果你的硬件系统集成了相关模块,CPU直接从缓冲区读写数据即可,否则就要自己模拟时序,深入到协议细节里去。TCP/IP协议也一样,一般的通信芯片都会集成两层和三层的转发控制,MAC表和路由表都存在通信芯片的寄存器里(片内ram区),用户只要将关键信息写入寄存器即可实现转发。
至于如何平衡软件控制与硬件控制,由项目的实际需求与工程师的具体经验决定。在通信行业,一个庞大的项目会面临巨大的均衡负载的问题。此时,一个好的架构/解决方案也许卖得比一套产品还贵。而对于一个相对较小的项目,比如SOHO级别的家用路由器,压缩单个产品的成本就显得至关重要。动辄几十美刀的通信芯片显然太贵,于是主芯片只集成wifi模块,其余大部分协议用软交换实现的路由器芯片就有了用武之地。
接下来我想分析一下linux软路由的实现方式,顺便回忆一些过去的工作。
二、主要架构分析
路由器可以简单得抽象成一个图灵机,即在输入给定封包的情况下,输出处理过后的封包。但同时要实现一定的用户接口,一旦用户通过用户接口输入命令后,图灵机的内部算法就应该有所改变。大致的模型如下图:
用户接口可以由网页和命令行来提供,也可以由远程的TR069封包来实现。之所以用linux,是因为linux内核里实现了tcp/ip协议,并有相当丰富的文档和开源代码,大部分代码都无需重构,只需要稍作修