详解路由器对数据包查表转发的处理行为(与操作、最长匹配、递归查找)

参考阅读

网络100问之交换技术(壹)
网络100问之路由技术(壹)
IP冲突的本质是什么?

数据包查表转发的行为

一些解释:

  • 查表转发查询的表就是路由器上根据各种各样的路由协议学习来的路由表项,,这些表项是通过控制层面的学习来的,数据的收发为数据层面
  • 数据包有各种各样的封装,即经典的OSI7层、TCP/IP5层模型,当数据包来到路由器时,路由器会解封装其中的网络层,并查看其中的目的IP(注意这里是数据包传输过程中的解封装过程,即封装好的数据包要到达目的地,需要不断的解封装)
  • 接下来路由器就要查询本地的路由表

查询路由表是有序、有规律、有算法的,如下所示
1、按位与操作
2、最长前缀匹配
3、递归查找

下面就根据实验详细展开这三步的逻辑及背后的道理

1、按位与操作

在这里插入图片描述
简单解释一下:目的IP跟路由表的所有条目中的mask 按位与,若得来的值和条目中的目的地字段相等,则匹配成功;定义过于干涩,直接上路由表

实验拓扑如下,这也是后面两步需要用到的测试实验
在这里插入图片描述

R1-R2之间的链路地址为12.1.1.0/24
R2-R3之间的链路地址为23.1.1.0/24
R3-R4之间的链路地址为34.1.1.0/24

查看R1上的路由表,第一列中有Destination/Mask,这个就是的dj和mj,每一行就是一个条目,即j
在这里插入图片描述
例1:
若此时R1路由器想要访问12.1.1.2这个地址,第一步就是要查表,按照上面的算法

第一行条目:
12.1.1.2 ^ 255.255.255.0
00001100.00000001.00000001.00000010
11111111.11111111.11111111.00000000
=
00001100.00000001.00000001.00000000 即12.1.1.0
12.1.1.0 与这个条中目的地址(12.1.1.0)相等,则匹配

同样的,第二行条目
12.1.1.2 ^ 255.255.255.255
00001100.00000001.00000001.00000010
11111111.11111111.11111111.11111111
=
00001100.00000001.00000001.00000010 即12.1.1.2
12.1.1.0 与这个条目中目的地址(12.1.1.1)不相等,则不匹配

后面的条目类似,都不匹配;即只有第一行的条目可以匹配

2、最长前缀匹配

若根据第一步中的匹配原则,匹配出多条符合算法的路由条目时,就要按照最长匹配的原则进行选取

  • 匹配出多条路由条目时,选取其中mask最长的作为转发依据

放到实验中来看,此时在R1上配置两条静态路由,目的地址为23.0.0.0/24,即R2-R3之间的链路
1、缺省路由
2、精确目的地

[R1]ip route-static 0.0.0.0 0 12.1.1.2     
[R1]ip route-static 23.1.1.0 24 12.1.1.2

在这里插入图片描述例2:
此时,若R1想要访问23.1.1.3;同样的,按照匹配的算法,可以看出这两个条目都可以被匹配到

第一个红框条目:
23.1.1.3 ^ 0.0.0.0
00010111.00000001.00000001.00000011
00000000.00000000.00000000.00000000
=
00000000.00000000.00000000.00000000 即0.0.0.0
匹配

第二个红框条目:
23.1.1.3 ^ 255.255.255.0
00010111.00000001.00000001.00000011
11111111.11111111.11111111.00000000
=
00010111.00000001.00000001.00000000 即23.1.1.0
同样匹配

此时就会选择mask长度为24的这个条目进行路由

所以此时的算法变成了如下所示:
在这里插入图片描述

3、递归查找

前面一直将目光放到了路由表条目中的Destination/Mask,用于判断匹配与否,长度与否;在做了如上的判断后,还要关注最重要的出接口与下一跳;一条路由条目有如下的信息时最为重要的

  • 目的地
  • 掩码
  • 下一跳
  • 出接口
  • 其次还有protocol、preference、cost等

接下来我们将目光聚集在下一跳与出接口上,所谓递归查找,就是说确定了走哪条路由条目后,得看从哪个接口出去,即next-hop是多少,就拿例2来说,下一跳是 12.1.1.2
在这里插入图片描述

把这个地址作为目的IP,继续与操作、最长匹配,即回到了例1,匹配到如下这条条目
在这里插入图片描述此时,目的IP为12.1.1.1 然后咋办?还是老一套做法,继续递归,递归的意义就在于一定要拿到结果再返回!
在这里插入图片描述
可以看到,想要访问23.1.1.3 下一跳是12.1.2
想要访问12.1.1.2 下一跳是127.0.0.1(这个就是本地的回环地址)出接口是G0/0/0
最终通过本地的G0/0/0接口将目的地为23.1.1.3的数据包转发出去,即找到了direct_next_hop(直连下一跳)

此时就可以更新算法了,如下所示:
在这里插入图片描述

总结

  • 路由条目中有什么样的内容,哪些是关键字段?
Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

key:Destination、Mask、NextHop
  • 如何递归?
    递归就是在不断地做与操作、最长匹配
  • 怎么与、最长匹配?
    在这里插入图片描述

最后来一个例子作为结尾~
例3:
在R1上配置这样一条静态路由

[R1]ip route-static 34.1.1.0 255.255.255.0 23.1.1.3

查看路由表:
在这里插入图片描述
分析一下,R1想要访问34.1.1.4这个目的IP时的整个操作步骤


  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值