路由器本身就是一台计算机,如果连著键盘、滑鼠、显示器,操作系统里再安装个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也是线,一样的。

人家只是没有打包在一起而已,你用透明胶缠上就好了(逃


推荐阅读:
相关文章