路由表里的子网掩码有什么作用?看这篇文章你就懂了(路由表的子网掩码怎么写)
求大神给具体答案,不要说什么精确选择路由路线什么的,我想知道一个ip过来后是怎么和这个掩码进行操作的,又和路由表里的目的ip进行了怎样的比较?
北京的老王打算来上海浦东川沙迪斯尼玩,老王是老司机,不屑用车载导航、手机导航,老王完全靠G2高速上的指示牌一路顺畅到达了迪斯尼。老王是如何做到的?
当老王的车子进入江苏境内时,前方有三个分岔口,分别指示:
- 上海
- 南京
- 合肥
老王毫不犹豫地选择了上海,这个动作非常简单,计算时间可能只有零点几毫秒,但是老王的大脑还是计算了。老王拿着自己的目的地:上海浦东川沙迪斯尼,与三者分别匹配,结果只有与上海匹配到两个字:“上海“。与其它两者没有任何的匹配,老王快速选择了上海。
老王三脚油门到了上海境内,前方又出现了三个岔路口,分别是:
- 上海嘉定
- 上海浦东
- 上海浦西
老王又用自己的目的地“上海浦东川沙迪斯尼“与三者进行匹配,匹配的结果分别为:
- 上海
- 上海浦东
- 上海
老王不傻,老王果断地选择了最长的匹配:上海浦东。老王一脚油门又走了30公里。前方又出现了三个岔路口,分别为:
- 上海浦东三林
- 上海浦东南汇
- 上海浦东川沙
老王快速计算,匹配结果为:
- 上海浦东
- 上海浦东
- 上海浦东川沙
老王最终选择了上海浦东川沙,下高速离很远就看到了迪斯尼的天鹅城堡。。。
路由器对IP包的路由决策,和老王的路由决策是非常相似的,每次做路由决策采用最长匹配原则。
最长匹配原则
将IP报文目的IP地址提取出来,与路由表的掩码做按位与操作,得到的结果,与路由表条目进行匹配,匹配最长胜出,采用该路由表指示的出口将IP包扔出。
二进制按位与操作
0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1
一个例子
IP报文的目的IP = 8.8.8.8,到达路由器,路由器有以下几条路由:
- 0.0.0.0/0 ———— > 中国
- 20.1.0.0/16 ———— > 江苏南京
- 8.8.0.0/16 ———— > 上海浦东川沙
- 8.1.8.8/32 ———— > 上海黄埔区中山东一路一号
匹配长度(二进制长度)为:
- 0
- 0
- 16
- 8
路由器选择了第三条路由:8.8.0.0/16,因为它匹配长度最长。
作者|车小胖谈网络|公众号