网络架构教程 篇八:“你家的路由器是垃圾”后续——看看不垃圾的路由器是什么样子的
阅读前的小tips:之前的一篇文章标题是有那么一点点标题党,但要知道的是iN说的是一个事实。在看过了今天这篇文章后,你再回头去看自己的家用路由器或许它们就成了你眼中最厌恶的东西之一。
今天谈的是一个正常的路由器的处理功能,这是“家用路由器”不具备的,而且是很多“软路由”无法真正触及的部分。
这一系列的文章是在回应网友的要求来讲讲网络架构。第一篇《先认清一个事实,你家里的路由器就是一块电子垃圾》只是为了给大家建立一个基本上的概念,概念很简单——你家的路由并不是真正意义上的路由器。
那么真正概念上的路由器到底是什么呢?路由器的基本概念是连接两个或多个网络的硬件设备,在网络间起网关的作用,读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。
上面这段话里面就有关键词了连接两个或多个网络、读取每一个数据包、决定如何传送、智能性设备以及起网关作用。
在大多数情况下,家用路由器仅仅起到了一部分“起网关作用”的功能,并且这个功能还被大量阉割,仅仅是一个带有NAT转换能力的拨号器罢了。
这就意味着,当你在家中使用家用路由器时,它并不真正拥有路由器的全部功能。它的主要任务是将来自多个设备的数据流量管理好,允许它们共享同一个外部IP地址,并在内部网络中分配本地IP地址。这听起来似乎已经有很多功能了,但实际上,家用路由器的功能相当有限,而且在处理复杂的网络任务时会显得力不从心。
别急着为你家的路由器站台,甚至也先别提软路由,继续往下看!
路由器干嘛的?——上网的呗!——错!路由器是通过分析发送入路由器中的每个数据包,智能的决定网络数据包如何传输的设备。注意一下,这是一个智能设备,它并不是一个简单的NAT转换器。
今天的第一个硬通货概念——路由表。刚刚说了,路由器是一个决定网络数据包如何传输的设备,那么决定“如何传输”的功能就是依靠路由表来实现的。路由器在处理每一个数据包的时候都会查一下路由表。
这是一个存储于路由器内部的对照表,当数据包传递到路由器中后路由器会依据数据包内的地址标签进行查询,然后决定将这个数据包发送到哪一个网关端口中。
所以说,对数据包的处理是“上网的呗”这一主观印象底层的真正实质。那么“家用路由器”和路由器之间有着什么区别呢?
这是iN随手接入到网络中的一个家用路由器,你会发现它的路由表很简单,通常家用路由器的路由表会包含一项内容:0.0.0.0/0 ->WAN IP,也就是将所有数据流量全部导入到路由器的拨号端口。这就是你家上网的关键了,家用路由器做且仅做这一个动作。
当然了,你还可以通过手动设置,给家用路由器增加一些路由表信息,但真正对于你的帮助几乎为零,毕竟家用路由器的接入端口也就只有那么一个。
但一台真正可以操控的路由器的路由表就不只如此了:
往往可以根据不同的目的IP地址信息将数据发送到不同的网关(Gateway),这时候数据包通过路由器的时候就有了自己的选择性。
例如iN在自己家里的路由器上接入了一个猫棒。利用猫棒将宽带运营商的带宽接入到家里的路由器中。猫棒是一个可管理设备,有自己的IP地址,这个IP地址在10.0.100.0/24网段上。通常很多使用猫棒的人对猫棒进行维护的时候需要将维护机的IP地址改在10.0.100.0/24网段中,然后才可能连接到这条猫棒中。但实际上你只需两步操作就可以在内部网络的任意计算机上访问到这个猫棒。
第一步:给插入猫棒的路由器端口设置一个10.0.100.0/24的IP地址
第二步:在路由表中增加一条记录:
这样一来在这台路由器所统御的网络中只要有向10.0.100.0/24网段中传送的数据包,路由器都会转发到叫做“internet-WAN”的端口中,我们也就实现了在内部网络中直接访问猫棒的需求。
所以对于猫棒,很多数码博主告诉你,要把自己的电脑IP改成10.0.100.2然后才能访问到猫棒的说法其实并不是一个正确的做法。
这些做法都是一台路由器的基本操作,基操勿六;咱们再说一下高端一点的操作。
刚刚咱们提到路由器可以读取IP数据包内的目的地址信息,将数据发往不同端口,那么“数据包可以读取”就是路由器的一个基本功能了,扩展一下既然数据包可以读取,能不能写入呢?例如数据包的内容是“ABCDE……”,路由器能不能把数据包改成“AAADE……”?理论上有读取功能就可以有写入功能。只是路由器如果乱写数据包的数据,只能导致网络不通这一个结果。但有规则的去改写数据包内的数据也是一台真正路由器的基本功能之一。
以Router OS路由器为例,这个功能叫做“Mangle(篡改)”
通常,我们就是利用Mangle功能操控数据在路由器里面不走寻常路的。
在提到Mangle功能之前,我们需要纠一个观点,数据包进入路由器再转发出去这种网络拓扑结构并不能说明路由器的工作原理。
要搞懂路由器的工作你就得深究数据在路由器内部怎么流动和处理。
这是Router OS的数据处理过程,当数据从左下边的输入端口(INPUT INTERFACE)进入路由器后,经历了复杂的处理过程最终流动到右下边的输出端口(OUTPUT INTERFACE)。篡改(上图浅黄色标签)数据的过程可以出现在每个大的处理过程中。也就是说路由器给了你在几乎任意的处理节点篡改数据的权力。而路由器也会根据你篡改过的数据在后面的处理过程中进行相应的处理。
举个例子,假设你的路由器上有多个出口连接到互联网
那么访问本地网络的情况下我们就可以应用本地策略,而访问远端访问的时候则需要选择远端策略。
那么如何标记这些目的不同的数据包呢?这里就用到了Mangle功能。
首先,在prerouting(路由前)阶段利用Mangle中的过滤系统在路由器中设定过滤规则。
然后在动作中设置一个数据包“打标”(mark routing)
给过滤出来的数据包打一个合适的标签。
那么在后面的处理过程中,路由器就会依据这个标签对数据包的流向进行处理,让数据包选择合适的端口进入互联网,这样就很科学了。
这时候软路由用户就站出来说“我也能!”,但是机理上是有差别的,很多软路由用户是通过数据预先打包的方式来进行类似操作的,但那些数据打包的过程往往会消耗掉大量的CPU计算资源,整体上性能也就无法保证了。
同时,看到上面图片中Passthrough的复选框了吗?这是继续做下一步处理的标记,在真正专业的路由器上你可以对一个数据包做数十步处理在更细分的领域范畴内对数据包的流量做更精细的操控。
这样,咱们就可以对比一下“家用路由器”简单的一步处理是不是就仅仅是一个NAT转换器了?而“不垃圾的路由器”则可以让你精细的控制数据包流动的每个过程和节点。
当然,“不垃圾的路由器”本身的价格和资源也要远大于“家用路由器”的配给。
也只有这样,路由器才可以高性能的处理每秒数百万甚至数千万个数据包。所以以后这个系列文章中所提到的路由器基本上就并不包括现在你可以视为垃圾的“家用路由器”了。虽然对初级用户不友好,但是对于给大家将明白网络架构到底是什么是相当重要的。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
我不是法师
校验提示文案
缘之界限
校验提示文案
冷泉
校验提示文案
松江土著
校验提示文案
胡3胡4
校验提示文案
值友9792081766
校验提示文案
震宝宝金小坏
校验提示文案
Samn
校验提示文案
叩桥不渡
校验提示文案
大胖子胖大
校验提示文案
值友1649015193
校验提示文案
yim123x
校验提示文案
没钱也来看看
校验提示文案
axx1019
校验提示文案
想到什么聊什么
校验提示文案
邪恶机械兽v2
校验提示文案
成熟6仔
校验提示文案
寒风盖雪
校验提示文案
皮特G
校验提示文案
DarthZero
校验提示文案
CafeAlpha
校验提示文案
华南野迪王
校验提示文案
暗黑罗宾
校验提示文案
Raynor的三把刀
校验提示文案
值友1649015193
校验提示文案
值友1035399408
校验提示文案
值友3621980118
校验提示文案
劲风静水
校验提示文案
风间舞乐
校验提示文案
darouwan
校验提示文案
zhenmeiyin
校验提示文案
董PD
校验提示文案
micbox
校验提示文案
从来都是人往高处走
校验提示文案
小鱼儿的土豆哥
校验提示文案
红星哥941
校验提示文案
大胖子胖大
校验提示文案
取个名字真的好难好难
校验提示文案
啊啊啊发发发
校验提示文案
苹果酱2010
校验提示文案