概述
人生总是有很多的选择,而不同的选择会有不同的结果,你现在的生活状态就是你曾经选择,因此我们最好不要抱怨现在的生活,因为一切都是你自己选择的。
在网络世界里也是一样的,当路由器收到报文以后,选择哪条路由转发,也会有很多的选择。只不过它们的选择相对我们来说非常的不自由,因为它们要遵循一个规则:最长匹配。我们今天会以一个例子来阐述这种最长匹配工作原理,不过在此之前先来了解一下具体的规则。
最长匹配原则
我们都知道路由器收到一个报文以后,会取出报文的目的IP地址,然后根据目的IP地址查找路由表。
针对这个目的IP地址,在路由表中可能有多个条目都可以转发它,那我们该如何选择呢?
如下图的路由表,如果路由器收到目的IP为20.1.1.3的报文,该如何转发呢?
初学者会感觉很迷茫,因为会每一个条目看起来都可以使用,选择哪个条目都行。其实遇到这种情况我们不用慌张,只需要记住一句话就可以:在选路时,挑选那条最长、最细的路由转发数据。
例如上面的情况会进行如下的查找:
第一步:先在路由表中,查找最长(32网段)的路由是否匹配:路由20.1.1.2/32和目的IP 20.1.1.3的报文不匹配,所以继续查找;
第二步:在路由表中,查找次长(24网段)的路由是否匹配:路由20.1.1.0/24包含20.1.1.3,所以匹配,终止查找,从这条路由转发。
在工作中,情况有时还会复杂一些,我们还可能遇到子网,汇总,默认等不同的路由条目。我总结了一下,如下图来表示:
每次根据目的IP查找路由表时,都会按照从上到下的原则进行查找,只有上一条不匹配,才会查找下一个条目。这也是最长匹配名称的由来:看上面这些子网掩码,主机路由的子网为32,最长;缺省路由的子网为0,最小;其它的几个夹在中间,位置越上,子网掩码越大,越优先匹配。
实验
我们以一个例子来验证路由的这种最长匹配原则,拓扑图如下:
拓扑
- PC1想要访问PC2
- 在R1上针对PC2(20.1.1.2)分别配置三条静态路由:主机、子网、主网
- 在R2、R3、R4和R5相连的接口抓包,看报文的转发路径
配置
R1的静态路由配置和路由表:
R2-R4的配置都类似,只配置一条静态路由,指向PC2的方向
PC1 ping PC2以后,在R1和R2-R4连接的线路上抓包:
发现只有在R1和R2相连的链路上能抓到ICMP报文,则证明报文使用32位的主机路由进行转发了,如下图:
总结
详细经过上面的描述,相信各位小伙伴已经知道路由表时如何选择转发路径了吧?其实还是记住那句话:匹配最长、最细的那条路由。
如果各位小伙伴还是有疑问,欢迎留言讨论!也非常高兴小伙伴关注我的头条号,一起讨论网络问题!
最后给小伙伴来个简单的投票,看对路由的匹配原则是否了解:如下图所示的路由表,如果收到目的IP为30.1.1.2的报文,下一跳该如何选择呢?
閱讀更多 網絡之路 的文章