如何自己制作一个路由器?

转载自:https://www.zhihu.com/question/30121257?sort=created

如何自己制作一个路由器?

硬件方面需要哪些?路由器上的一些协议也自己实现,有哪些资料参考?

关注者

167

被浏览

30,194

4 个回答

Andrew Song

Andrew Song

华为技术有限公司 硬件工程师

我建议题主先写下要求,比如转发容量是多少?出多少端口,时候需要支持灵活插卡。你描述的越详细,回答会越贴近你的要求。

下班后详细回家你这个问题。

----------------------------------------------------------------

下班更新:

我还没有回答,就开始点赞/感谢的人,我表示你们太抬举我了,我定不负你们的支持。

我对路由器的研究也有一段时间了,随未称为路由器专家,但也小有心得,给题主提供个参考。

一下实现按难以程度逐步递增:

1.刷路由器类

硬件:购买家用路由器,支持openwrt 等各个wrt

软件:刷openwrt等软件。

实现:自己写一些APP或者如果有能力看懂或实现简单的协议。

优点:目前主流的路由器玩法,硬件容易购买,软件开源,目前比较火爆,各种教程充斥网络,上手容易。

详细可参考:

如何从零开始学习OpenWrt? - 无线路由器

开发openwrt,除了需要懂linux外,还需要哪些技能? - Linux

不再赘述

2.低端集成网口的单片机类:

硬件:带网口的单片机,如TI 的LM3S8962(当年我玩的东西)

软件:一般这类单片机不带MMU,无法使用linux,可以使用无操作系统的lwIP,或者ucOS加lwIP等

实现:要看芯片的手册了,进来的数据包会触发什么样的中断?中断处理函数怎么写,你可以任意实现从2~7层的所有协议,比如我当年就写了个简单的ARP应答。

优点:更容易看清下数据连路层,网络层的工作方式,也可以不带OS,协议栈,完全自己写,会遇到很多问题,这时候才能看协议的精妙。

3.高端处理器开发板类

硬件:Freescale QorIQ系列 P1020WLAN

QorIQ P1 WLAN Appliance Solutions|Freescale=

软件:openwrt 或者自带的 linux都行,

实现:手册都是全的,你完全可以自由发挥。和上面一样,但是这个就可以作为一个企业级路由器的项目了。数据包处理能力也是贴近于真正的路由器的。

优点:基本能实现你所有你想要学习,实践的所有功能,只要你知识储备充足。

4.高端FPGA开发方案

硬件:多网口的FPGA

软件:linux,verilog(也算硬件吧)

实现:主要可以实现硬件上的二层三层转发。比如进来个数据包,你可以先存在你的内存里面,然后根据你FPGA里面的转发表,转发到这个数据包应该进的地方。

优点,你可以学习到数据的二三层转发。协议什么的,不是这个的关键。

下面要开大招了,下方高能量小心:

5.CPU + FPGA方案

硬件:自己画板,加工,找地方加工单板。

FPGA链接多个端口,可以使用FPGA自带的PHY,或者外接PHY,但鉴于非正式产品化,且PHY的几个供应厂家的样片,数据手册都非常难拿到,所以建议使用xilinx自带PHY功能的FPGA

软件:linux 或者 wrt

实现:现在FPGA中实现数据包进来以后,根据查找表,查找出接口,查找表由CPU通过控制通道下发到FPGA中,这个通道建议做成pcie,localbus,mdio等。

FPGA其中的一个通道连接到CPU上,作为数据包上送CPU处理的通道。

也就是说,路由表是由CPU通过控制通道发送到FPGA中,在由FPGA负责来转发到端口,还是转发给CPU

优点,已经开始实现现代路由器的架构了。

6.控制平面,转发平面分离,支持主备互相备份。

将刚才FPGA的那部分拆分出来,独立做一块单板

CPU单独做一块单板。然后每个路由器使用2块单板。

刚才说下路由器表的控制通道拆分成2部分。

CPU1-------主备通道-------CPU2

| |

|------------ FPGA------------|

既路由表可以通过CPU1下发给FPGA,也可以通过FPGA2下发。

同事FPGA上送给CPU的报文,这时候要通过FPGA自身备份下同事发给CPU1,CPU2.

路由协议报文要求CPU1,CPU2获得相同的报文,计算结果也是相同的,同事CPU1,CPU2引入主备用竞争,主备监控,平时主用CPU负责下发路由表,备用CPU只是监控,当主用CPU死掉,由备用CPU负责下发路由表,这样保证当主用的CPU失效的时候,备用CPU立即替代它的职责,保证FPGA转发不会断流量。

7.转发平面1:1备份

从上面6我们发现一些不足,就是 如果FPGA挂掉了,是不是流量就会断,我们路由器要保持稳定啊!那怎么做?聪明的你一定想到,FPGA也要备份啊。

具体:

CPU1---主备通道---CPU2

| \ / |

| \ / |

| \ / |

| X |

| / \ |

FPGA1 FPGA2

| |

|------转发卡[1:N]------|

转发卡可以通过FPGA1转发,也可以通过FPGA2转发,FPGA1和FPGA2也引入主备机制。

CPU下发的路由表要同时下发给FPGA1 FPGA2,正常情况主用FPGA负责转发,但是备用FPGA中也有同样的转发表,但是没有数据进来,当主用FPGA挂掉的时候,转发卡将数据倒到备用FPGA中,由于备用FPGA也有同样的转发表,所以可以直接转发,也不会断流量。

8.当然了,备份也少不了电源,风扇等,暂不在讨论之列

关于上面的几点说明:

1)后面提到的CPU不是只代表CPU而是代表控制平面,即路由器中的主控板MPU,里面可能有CPU,FPGA,CPLD等,但是他不负责转发数据包。

2)同理后说的FPGA已不代表只是FPGA,而代表转发平面,即路由器中的转发板LPU,或NPU板。这个单板不负责计算路由器协议,不直接接受用户命令,只接受 主控板的转发表项。

3)大家会问道为什么你不用CPU+LSW(lanSwitch)因为LSW的资料一般 博通,马威尔外面都找不到资料,不具备可行性。相比而言使用FPGA简单灵活,便于后续功能扩展。

需要学习的资料:

硬件相关的就不说了,因为如果你使用前几种,估计是你是不感知硬件的。

软件方面:

TCP/IP详解 第一卷 讲的是各种原理,必须要看的。基础知识要牢固

TCP/IP详解 第二卷 具体讲代码,将数据结构的设计,建议你根据第一卷自己先尝试实现,遇到问题再回来看,你会发现他们的代码是经过深思熟虑的。

如果要实现各种协议,各大厂商的教程(目前正式出版的好像只有思科)会帮助你快速理解,当然如果想深研究,得看各种IEEE 802协议了,RFC,G.xxxx这些东西。

最后的建议,如果想搞路由器玩玩就搞使用方案1.买路由器刷 wrt,简单实惠。

如果要是想彻底研究TCP/IP,建议使用方案2.3,你可以从下到上,比如先写ARP,对方发出ARP请求,你回复个ARP Reply,在电脑上arp -a看看学没学到,然后在尝试写相应IP报文,响应ping命令等,再回头看看TCP/IP详解 第二卷 你会很有体会。

太晚了,有空继续更的详细点。明天还要上班。。。。。作于2015.05.06凌晨

编辑于 2015-05-06

 

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值