概述
我们在配置静态路由时,下一跳通常有两种选择,一种是配置一个接口,另一种是配置一个IP地址,如下图所示:
下一跳的两种方式
这两种方式配置以后,看起来网络都是通的,好像没有什么区别。但实际情况不是这样哦,老司机都推荐下一跳使用IP地址,有没有想过为什么呢?我们今天就使用一个例子来阐述老司机的选择。
举例:下一跳配置接口
1. 拓扑
拓扑
- 按照拓扑搭建好测试环境
- 在R1上访问25.1.1.0/32网段,然后查看ARP表项
2. R1的配置
(1) R1的接口配置
R1的F0/0接口配置
(2) R1上配置一条24网段的静态路由,这条静态路由的下一跳使用接口
下一跳使用接口
(3) 查看路由表
查看路由表
3. R2的配置
R2在两个接口上配置IP,其它的就不需要了
R2配置
4. R5的配置
R5的配置可以不关注,它配置接口IP + 静态路由:
R5的接口配置
静态路由
5. 测试过程
在R1上分别ping 20.1.1.5,20.1.1.6,20.1.1.200,查看ARP表项:
查看ARP表项
6. 结论
如果配置下一跳为接口,则路由器会认为这是一个LAN接口,访问和这条route在同一个网段的所有主机地址,都会发送一个ARP去请求。
例如此例子中,访问任何在25.1.1.0/24网段中的主机,R1都会发送一个ARP Request,去请求对应的MAC地址。
不知道你有没有关注到MAC地址,为什么这些MAC地址是R2呢?并且所有在同一个网段的IP,对应的MAC地址都是一样的?
MAC地址
这就涉及到ARP代理的功能的了,R2知道25.1.1.0/24如何转发,所以用它自己的MAC地址回复了。关于ARP代理的内容,如果还有疑问,参加我之前的文章:ARP代理
举例:下一跳配置IP
1. R1配置
组网和配置和上面的相同,只是R1上的下一跳配置为IP地址,如下图所示:
查看路由表:
路由表
2. 测试
在R1上分别ping 20.1.1.5,20.1.1.6,20.1.1.200:
ping三个地址
查看ARP表项:
ARP 表项
有没有觉得很奇怪,只有一条静态路由对应的ARP表项,其它的都没有,这样是正确的吗?
这样是正确的,因为配置的下一跳是IP,所以R1访问所有在这个网段的主机,都会使用下一跳(12.1.1.2)对应的MAC去封装。也就是说,R1只需要发送一次ARP Request就可以了,只要这个ARP表项没有老化,后续所有访问25.1.1.0/24网段的主机都使用这个表项。
总结
各位小伙伴看完上面的对比,应该理解老司机为啥要推荐下一跳使用IP地址了吧?
是的,就是你想的那样,因为下一跳使用接口时,会有如下的问题:
- 路由器访问每一个在同一个网段的主机时,都会发送ARP Request去获取MAC,增加网络中的无效流量。
- 如果掩码很小,则路由器需要维护的ARP表项会非常大,耗费大量的设备的CPU和内存。
- 极端情况,如果默认路由的下一跳使用接口,则路由器访问任何地址都需要发送ARP请求并且创建ARP表项,这耗费的资源就非常大了。
而下一跳配置IP地址就没有问题了,对于一个网段的所有主机,路由器只需要生成一条ARP表项就可以了,这样就节省很多的资源。