如何自己製作一個路由器?

硬體方面需要哪些?路由器上的一些協議也自己實現,有哪些資料參考?


我建議題主先寫下要求,比如轉發容量是多少?出多少埠,時候需要支持靈活插卡。你描述的越詳細,回答會越貼近你的要求。

下班後詳細回家你這個問題。

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

下班更新:

我還沒有回答,就開始點贊/感謝的人,我表示你們太抬舉我了,我定不負你們的支持。

我對路由器的研究也有一段時間了,隨未稱為路由器專家,但也小有心得,給題主提供個參考。

一下實現按難以程度逐步遞增:

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凌晨


偏軟體就PC做路由,偏硬體就rt5350+SDK


製作路由器以前,你需要拿到一個協議,如果你是準備市場上流通的話。硬體方面需要晶元,外殼設計,天線等


推薦閱讀:

openwrt一線多撥,多線多撥有什麼區別,負載均衡如何實現?
路由器,網件的好還是華碩的好?
千兆無線路由器都做到百元之內了,千兆有線怎麼還這麼貴呢?
無線路由的2.4G的最高速率是多少?
筆記本電腦網速不佳的時候移動十厘米,網速會明顯得到改善,為什麼會這樣?

TAG:軟體開發 | 計算機網路 | 無線路由器 | 通信技術CT | 網路硬體 |