OpenWrt(二):路由
本期是OpenWrt基本原理系列的第二期,这次来简单说说路由。本期不会涉及任何算法问题,首先是篇幅有限,本专栏目的是为了简单介绍,其次路由算法学习有很多书籍或者博客资料可供查阅,咕咕不想重复造轮子~~(而且并不能造好)。
路由器对于很多小伙伴来说再熟悉不过了,每当家里WIFI信号不好的时候,大家往往会选择添加一台路由器或者更换路由器,但是不知道有没有好奇的小伙伴们想过,WIFI和路由器有什么关系呢?或者说家里的发射WIFI的东西,为什么要叫“路由器”这个听起来有些奇怪的名字呢?路由器的“路由”又有什么含义吗(或者说从家里发出的数据是怎么传到需要访问的服务器的)?
没错,其实这些都是我曾经的疑惑。

无线路由器(WIFI)
现如今无线路由器(边缘路由器),本质上是有线路由器、NAT主机、防火墙、交换机、WIFI分享器、AC控制器等等的集成设备,但是每个功能单独开来却又十分的残废,路由十分简单,NAT功能很简单,基本不能调控,防火墙该防的防不了,交换机交换效率低下,WIFI信号和设备承载数量普通,组网质量一般,组网设备有限,控制功能很少,就有些类似于全能本,全都不能的境况。
记得07年家里装宽带时,想上网,需要从Modern接出来一根网线,连接到电脑上拨号,但是家里有两台电脑,都想上网怎么办呢?于是爸爸就🍑买了一个有线路由器,那时我第一次知道路由器这个名字奇怪的东西,只知道它能让很多很多台电脑上网,并且插上网线就能直接用(每次玩电脑都要手动拨号真的很麻烦)。
后来,大概是08年,爸爸给那台东芝笔记本电脑装上了无线网卡,买了一台单天线的无线路由器,再以后,无论家里路由器换了几次,它的形态就再也没有变过了(无非是加几根天线,或者隐藏天线)。嗯嗯,就是这样。

家庭网络路由
家庭网络环境非常简单,不论你的家庭网络(局域网)有多少台设备,即使有双宽带或者更多宽带做叠加(负载均衡),在路由层面都可以极其简单的拓扑为二端网络,即WAN和LAN,只有唯一的外网出口和唯一的内网入口,所以数据包路由时,如果不是需要转发到内网端口(192.168.1.0/24,10.0.0.0/8等等),只能毫无选择的全部路由到WAN端口(即0.0.0.0/0)。所以是一种基于端口的路由,或者说是基于NAT的路由。也许严格来说,并不能是路由。

即是说是一些企业或者工业路由器,路由功能基本也是这样,允许手动添加静态路由表,内网拓扑复杂一些,多分了几个子网段,应用功能层面是多了一些行为管控和审计,接入控制,VPN管理,NAT管理,包过滤防火墙等等这些与路由毫无关联的额外功能。

路由(好吧,说到现在,才正式进入本章主题)
路由(Routing),是为了给源地址发来的数据,寻找到能连通到目的地址路径的一种功能,用专业的话来说,是指分组从源到目的地时,决定端到端路径的网络范围的进程。
举个例子来说,假如我想在厦门的某个不知名末流大专院校里访问在上海的B站服务器,那么在路由层面发生了什么呢?

可以看出,从最初IP(183.255.88.113)到B站CDN服务器的IP(120.240.75.131),有很多中间IP,即通过AS9808骨干网的路由节点转发。那么,此路由节点是怎么知道数据要这样路由转发呢?

路由协议
静态路由
即路由表固定,需要人工手动或者依据某种预先设定的规则而非算法(例如依据NAT子网网段自动添加子网的路由)自动添加路由表。
这种路由协议广泛运用在家庭路由器、企业工业路由器这种用于相对简单网络环境中的路由设备,优点很明显,安全性高,路由转发迅速,消耗硬件资源少,不用担心因为路由造成广播风暴等等。
但是,缺点也很明显,对于一定网络规模的路由表配置,就非常繁琐,甚至难以找到最优路由路径,导致降低路由效率。同时,静态路由表也很难自适应网络变化,每当链路状态改变,都需要人工手动重新计算路由,寻找最佳路径,来添加或者删除路由,过程相当繁琐等等。
动态路由
目的是为了解决静态路由的缺点,目前主流的有:RIP、BGP、OSPF等,当然他们又可以细分为:①依据距离跃点数的路由协议、②依据链路状态的路由协议。
不同的路由协议有自己的路由算法,有兴趣可以学习,其还是十分有趣的。其中算法的设计和选择需要考虑一些细节,比如考虑路由收敛/发散、是否会引起网络泛洪,对于庞杂网络如何划分网络以路由汇总来简化非常庞大的路由表,以及跨运营商网络甚至是跨境网络如何调节路由等等。
于是183.250.88.113路由节点通过路由协议学习得来的路由表,告诉了路由器这个目标地址为B站CDN的数据包,要转发到(112.48.160.93 *** 112.50.222.153)路由节点,这个节点的下一跳能够连接B站的CDN服务器,至此路由通路生成,我就能愉快的访问B站啦!

总结
路由协议有很多,其中也不乏一些未公开的私有路由协议,总之,无论哪种路由协议,最终目的都是为了得到一份在一定情景下还算可靠的路由表,有了这份可靠的路由表和路由协议,不论网络关系如何变化,路由协议都能在限定要求内收敛,找到新的最佳路由路径。