路由器本身就是一台计算机,如果连着键盘、鼠标、显示器,操作系统里再安装个 Office,就可以当做办公电脑使用了。
但是,如果真把路由器当电脑用,那真是太屈才了,好比开着坦克去菜场买菜! 路由器的“高效的 IP 报文的硬件转发能力”就被严重浪费了。
路由器到底是干什么的?
如图所示,A 网络信封数据,是如何沿着箭头的方向,先到达 B 网络,再到达 C 网络,然后到达 D 网络,最后到达目的地主机的?
逻辑很简单,路由器在信封数据产生之前,已经和自己的邻居路由器,通过路由协议数据报文,同步了整个网络(互联网)的 IP 路由表。
当 IP 报文到达时,路由器知道如何将接收到的 IP 报文,转发给自己的邻居。邻居也知道如何将接收到的 IP 报文,转发给更靠近目的地的路由器。通过连续接力的方式,最终 IP 报文到达了目的地。
A 网络与 B 网络、B 网络与 C 网络、C 网络与 D 网络相交处,都有一个椭圆形的图标。这些椭圆形的图标就是路由器!
路由器为了连接多个网络,通常有多个网络接口。接口的类型取决于连接的是什么网络。
读者可能会说,这有什么稀奇的?在普通电脑的扩展插槽中,插入这些接口卡,电脑不是一样可以实现路由器功能?这也许是题主真正想表达的意思,对吗!
完全可以,只要两个网卡就可以在普通电脑上实现路由器的功能。
很少有人会用这样的路由器,为什么呢?
转发效率太低了!
问大家一个问题,TCP/IP 协议栈是软件还是硬件?
当然是软件了。
当电脑充当路由器时,从一个接口收到的 IP 报文,是否要交由 IP 协议来处理?
没错!
既然 IP 协议是软件实现,那么转发 IP 报文的工作,全部由软件来实现。
软件完全依靠电脑的 CPU 作为计算的引擎,所以 CPU 直接决定着 IP 报文的转发效率。
CPU 很忙的,是整个电脑的计算中枢。要处理各种计算工作,还要兼顾着来自硬件外设的中断信号,CPU 高速运转的间隙,还要处理来自网卡的中断信号。
CPU 计算能力大小、同时竞争 CPU 资源的事务的多寡,将直接决定着 CPU 转发 IP 报文的效率。
一般的电脑 IP 报文的转发效率,无法达到每秒几百万次的转发效率。商业的路由器是可以达到的!
接下来的问题是,路由器是如何做到的?
硬件加速
一个 IP 报文在路由器内部的行走轨迹,不过是从入口流入,从出口流出的过程,对吗?
屁大点事,为何要劳烦日理万机的 CPU 大驾?
于是,路由器将这些简单判断逻辑的工作,统统外包给了硬件转发芯片。
硬件转发芯片,拥有自己的硬件转发表,也有出口下一跳对应的 MAC 地址,压根不需要 ARP 的参与,这些内容 CPU 已经统统提前告诉了硬件芯片。
CPU 语重心长地对着硬件转发芯片说:孩子,我已经给了你所有的转发信息,你可以独立处理转发事务了。
但要记住一点,有两种情况你必须要通知我来处理:
通过以上外包的方式,路由器的 CPU 从繁杂的 IP 报文转发事务中解脱了出来。把更多的 CPU 资源用于处理“路由协议”的路由表的同步工作,以及物理链路失效,如何快速检测失效并快速将失效消息通告给所有的邻居,让所有的邻居都意识到某一条链路已经失效,从而在路由算法中将该条链路剔除出去。
最终,整个网络的路由器的路由表又一次同步(达成一致),这个过程就叫网络收敛!
路由器成就了互联网,互联网又推动了路由器向更快、更强、更安全的方向发展。