路由器本身就是一台計算機,如果連著鍵盤、滑鼠、顯示器,操作系統里再安裝個Office,就可以當做辦公電腦使用了。

但是,如果真把路由器當電腦用,那真是太屈才了,好比開著坦克去菜場買菜! 路由器的「高效的IP報文的硬體轉發能力」就被嚴重浪費了。

路由器到底是幹什麼的?

如圖所示,A網路信封數據,是如何沿著箭頭的方向,先到達B網路,再到達C網路,然後到達D網路,最後到達目的地主機的?

邏輯很簡單,路由器在信封數據產生之前,已經和自己的鄰居路由器,通過路由協議數據報文,同步了整個網路(互聯網)的IP路由表

當IP報文到達時,路由器知道如何將接收到的IP報文,轉發給自己的鄰居。鄰居也知道如何將接收到的IP報文,轉發給更靠近目的地的路由器。通過連續接力的方式,最終IP報文到達了目的地。

A網路與B網路、B網路與C網路、C網路與D網路相交處,都有一個橢圓形的圖標。這些橢圓形的圖標就是路由器

路由器為了連接多個網路,通常有多個網路介面。介面的類型取決於連接的是什麼網路。

  • 連接的是乙太網,使用乙太網介面。
  • 連接的是ATM網,使用ATM介面。
  • 連接的是ISDN網,使用E1/T1介面。

讀者可能會說,這有什麼稀奇的?在普通電腦的擴展插槽中,插入這些介面卡,電腦不是一樣可以實現路由器功能?這也許是題主真正想表達的意思,對嗎!

完全可以,只要兩個網卡就可以在普通電腦上實現路由器的功能。

很少有人會用這樣的路由器,為什麼呢?

轉發效率太低了!

問大家一個問題,TCP/IP協議棧是軟體還是硬體?

當然是軟體了。

當電腦充當路由器時,從一個介面收到的IP報文,是否要交由IP協議來處理?

沒錯!

既然IP協議是軟體實現,那麼轉發IP報文的工作,全部由軟體來實現。

軟體完全依靠電腦的CPU作為計算的引擎,所以CPU直接決定著IP報文的轉發效率

CPU很忙的,是整個電腦的計算中樞。要處理各種計算工作,還要兼顧著來自硬體外設的中斷信號,CPU高速運轉的間隙,還要處理來自網卡的中斷信號。

CPU計算能力大小、同時競爭CPU資源的事務的多寡,將直接決定著CPU轉發IP報文的效率。

一般的電腦IP報文的轉發效率,無法達到每秒幾百萬次的轉發效率。商業的路由器是可以達到的!

接下來的問題是,路由器是如何做到的?

硬體加速

一個IP報文在路由器內部的行走軌跡,不過是從入口流入,從出口流出的過程,對嗎?

  • 查路由表,找出口
  • 根據出口的介面類型,決定介面的封裝方式
  • 要麼點對點,PPP/HDLC封裝
  • 要麼ATM,ATM信元封裝
  • 要麼乙太網,EthernetII 封裝

屁大點事,為何要勞煩日理萬機的CPU大駕?

於是,路由器將這些簡單判斷邏輯的工作,統統外包給了硬體轉發晶元。

硬體轉發晶元,擁有自己的硬體轉發表,也有出口下一跳對應的MAC地址,壓根不需要ARP的參與,這些內容CPU已經統統提前告訴了硬體晶元。

CPU語重心長地對著硬體轉發晶元說:孩子,我已經給了你所有的轉發信息,你可以獨立處理轉發事務了

但要記住一點,有兩種情況你必須要通知我來處理:

  • IP報文的目的IP = 路由器任何介面的IP
  • 硬體晶元無法處理的複雜邏輯,比如無法找到IP報文的對應的硬體轉發表

通過以上外包的方式,路由器的CPU從繁雜的IP報文轉發事務中解脫了出來。把更多的CPU資源用於處理「路由協議」的路由表的同步工作,以及物理鏈路失效,如何快速檢測失效並快速將失效消息通告給所有的鄰居,讓所有的鄰居都意識到某一條鏈路已經失效,從而在路由演算法中將該條鏈路剔除出去。

最終,整個網路的路由器的路由表又一次同步(達成一致),這個過程就叫網路收斂

路由器成就了互聯網,互聯網又推動了路由器向更快、更強、更安全的方向發展。

更多文章請閱讀:https://mp.weixin.qq.com/s/9OuF3N9eokbOrA6KCnD8OA

電子書以色列:一個國家的誕生作者 十一點半去查看?


這個要看你對路由器和集成的定義了。

如果你想說的是用計算機取代普通家用的無線路由器的話,這個是沒有問題的。這也是x86軟路由得以實現的基礎。

普通的家用路由是nat路由,DHCP伺服器,防火牆,DNS伺服器,無線AP的集合體。普通計算機要實現NAT路由功能,需要有兩個以上的網路埠;要實現無線AP功能,則需要一張無線網卡。只要硬體滿足了,都可以通過安裝特定的操作系統或者軟體實現。

網上有很多相關的教程,例如Gentoo:https://wiki.gentoo.org/wiki/Home_router

計算機本身需要跑Windows,可以找Windows下實現相應功能的軟體,或者單獨跑一個虛擬機實現。

只不過,沒有特殊需要的話,買一張有線網卡,一張無線網卡,加上計算機的高功耗帶來的電費,以及你學習這些教程和配置相關軟體的時間成本,遠高於你買個2-300塊錢的路由器就是了。


當然可以。

不過不建議走物理機。Windows 內核網路棧性能很差,普通 Linux 的網路棧性能有限。

普通的軟路由系統都是基於 Linux 改的(如 RouterOS),四層能夠有一定的硬體卸載功能(看平台)。

CSR1000v 支持 DPDK,能夠在 Linux 內核的基礎上實現更高的吞吐量和實時性。

不過這種在 baremetal 直接跑路由器的做法也有非常糟糕的結果,這個伺服器的 SLA 只有兩個 9,因為 windows server 的 MCE 找不出哪一條 ECC 內存有故障,早期不會重啟。由於機器的帶外管理接到了千兆電口橋到了內置 RouterOS,這種情況就會導致得人工重啟。

所以除非你的機器有非常可靠的帶外管理和 remote hand,否則沒事別這麼做。


先看家用路由器存在的必要性:便宜可靠省電壞了不心痛。

裝雙網卡的計算機天然就是一台路由器,可以作為網關供局網內計算機上網,軟體方面,windows可以裝winroute wingate之類的軟體,Linux直接配置就可以。

主要問題在於:

1、家用PC機不是設計用來24*7小時開機的,可靠性不行。

2、如果只用一個路由功能,PC機強勁的CPU/GPU/內存/硬碟/介面都浪費了。

3、PC機的功耗幾百瓦,散熱要求還高,體積還大。

路由器是什麼?一個沒顯示器沒鍵盤的塑料殼子,不用昂貴的CPU,專用電路批量生產,FAST之類的品牌便宜到1百多塊錢一隻,功耗僅10多瓦,還不用風扇,隨便放在通風不好的弱電盒裡,用一年壞了就扔也不心疼,用兩年感覺很賺。。。

傻瓜才會去用個PC機。。。用樹莓派+CENTOS還能當個極客。。。

再看骨幹路由器的必要性:PC機做不了這麼專業和關鍵的事情。

1、骨幹路由器上介面眾多,包括NN塊板卡,有的卡全是千兆光口,有的卡全是以太口,有的是混合配置,如果用PC機,機箱都插不下。

2、由於埠實在太多,每個埠要1000M 的話,匯流排上的帶寬要求就要1000M乘以埠數,如此高的背板帶寬要專門設計電路。

3、埠之間需要快速轉發,轉發的時候還有規則需要處理,需要快速處理,否則整個網路就延遲。

一個選擇是用CPU+大內存對付,另一個選擇是用ASIC。

4、核心路由器壞掉影響大太了,我們都是裝了精密空調+防雷+雙動力線路+遠程容災+智能UPS等一堆東西來保護關鍵設備的,普通計算機做以上這些事情太累了。

所以骨幹路由器骨子裡也是一種超級強勁的計算機。

最後繼續感嘆一下,當年思科的6509是多好多結實多靈活的機器啊!自從用了12000.。。。真香。。。。


計算機是沒有邊界的。一個硬碟用SATA插著主板他就是計算機的一部分,難道用USB來連他就不是計算機的一部分嗎?路由器同理,網線也是線,wifi也是線,一樣的。

人家只是沒有打包在一起而已,你用透明膠纏上就好了(逃


推薦閱讀:
相关文章