探讨路由器静态路由下一跳指向

众所周知在路由器上面写静态路由的时候,下一跳可以写为IP地址形式,也可以写成下一跳出接口的方式,那两种方式的区别在哪里呢,本文就以此作为一个探讨。

实验环境

实验拓扑

环境介绍

环境如上图所示:

  1. 服务器使用路由器模拟,关闭路由功能。

  2. PC使用路由器模拟,关闭路由功能。

  3. 最终在每台PC上访问服务器,查看现象。

IP地址配置

设备接口 IP地址
Server 192.168.1.1/24
R1-e0/0 192.168.1.254/24
R1-e0/1 192.168.12.1/24
R2-e0/0 192.168.12.2/24
R2-e0/1 192.168.2.254/24
PC1 192.168.2.1/24
PC2 192.168.2.2/24
PC3 192.168.2.3/24

设备的基础配置

R1的配置

1
2
3
4
5
interface Ethernet0/0
ip address 192.168.1.254 255.255.255.0
!
interface Ethernet0/1
ip address 192.168.12.1 255.255.255.0

R2的配置

1
2
3
4
5
6
7
interface Ethernet0/0
ip address 192.168.12.2 255.255.255.0
!
interface Ethernet0/1
ip address 192.168.2.254 255.255.255.0
!
ip route 192.168.1.0 255.255.255.0 192.168.12.1

Server的配置

1
2
3
4
5
6
interface Ethernet0/0
ip address 192.168.1.1 255.255.255.0
!
no ip routing
!
ip default-gateway 192.168.1.254

PC1/PC2/PC3的配置

1
2
3
4
5
6
interface Ethernet0/0
ip address 192.168.2.x 255.255.255.0
!
no ip routing
!
ip default-gateway 192.168.2.254

现象查看

在R1上静态路由指向下一跳出接口

1
R1(config)#ip route 192.168.2.0 255.255.255.0 e0/1

先查看一下R1的arp表

1
2
3
4
R1#sh ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.12.1 - cc00.3410.0001 ARPA Ethernet0/1
Internet 192.168.1.254 - cc00.3410.0000 ARPA Ethernet0/0

目前只有自己的直连,然后分别在三台PC上ping 192.168.1.1(即模拟电脑访问服务器),然后再次查看R1的arp表

1
2
3
4
5
6
7
8
9
R1#sh ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.12.1 - cc00.3410.0001 ARPA Ethernet0/1
Internet 192.168.12.2 0 cc01.3410.0000 ARPA Ethernet0/1
Internet 192.168.2.2 0 cc01.3410.0000 ARPA Ethernet0/1
Internet 192.168.1.1 0 cc06.17ac.0000 ARPA Ethernet0/0
Internet 192.168.2.3 0 cc01.3410.0000 ARPA Ethernet0/1
Internet 192.168.2.1 0 cc01.3410.0000 ARPA Ethernet0/1
Internet 192.168.1.254 - cc00.3410.0000 ARPA Ethernet0/0

可以看到R1的arp表出现了很多条信息,再看Hardware Addr,会发现有大量的条目的硬件地址是一样的。

当我们查看R1的路由表的时候,我们就可以看到原因所在了,在R1上查看路由表:

1
2
3
4
5
R1#sh ip route
Gateway of last resort is not set
C 192.168.12.0/24 is directly connected, Ethernet0/1
C 192.168.1.0/24 is directly connected, Ethernet0/0
S 192.168.2.0/24 is directly connected, Ethernet0/1

在路由表里面,可以看到路由器认为去往192.168.2.0/24是自己的直连路由,所以凡是去往2.0网段的数据包都会直接从e0/1口发出,而目的地的2.x的目的地址,自己并不知道MAC地址是多少,所以会发起针对2.x的arp查询。因为Cisco IOS默认开启代理ARP,所以R2就代替2.0网段进行回复,最终就会出现大量的相同的arp条目。这种现象会导致路由器的缓存被消耗赶紧,所以并不推荐。

在R1上静态路由指向下一跳的IP地址

首先删除上一条的命令,然后clear ip arp *

1
R1(config)#ip route 192.168.2.0 255.255.255.0 192.168.12.2

分别在三台PC上ping 192.168.1.1(即模拟电脑访问服务器),然后再次查看R1的arp表

1
2
3
4
5
6
R1#sh ip arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.12.1 - cc00.3410.0001 ARPA Ethernet0/1
Internet 192.168.12.2 1 cc01.3410.0000 ARPA Ethernet0/1
Internet 192.168.1.1 0 cc06.17ac.0000 ARPA Ethernet0/0
Internet 192.168.1.254 - cc00.3410.0000 ARPA Ethernet0/0

可以看到在arp表中关于2.0的条目一条也没有出现,我们再次查看R1的路由表:

1
2
3
4
5
R1#sh ip route
Gateway of last resort is not set
C 192.168.12.0/24 is directly connected, Ethernet0/1
C 192.168.1.0/24 is directly connected, Ethernet0/0
S 192.168.2.0/24 [1/0] via 192.168.12.2

可以发现关于2.0的下一跳是192.168.12.2,然后路由表会进行递归查询,最终去往2.x的数据包会被当成192.168.12.2的相同处理方式,也就是不再发起ARP查询,而是直接使用192.168.12.2的arp表记录的硬件地址。

总结

通过实验探究下来的结果,貌似是静态路由指向下一跳为IP地址更加占有优势,但是这种使用的场景非常的有限,就是我们必须明确知道下一跳的IP地址,而且IP地址不能变化,在上面的实验的这种场景下,明显是指向IP地址更加的正确。但是如果是不确定地址,或者在多路广播访问网络中,下一跳存在多个的情况下,使用IP地址作为下一跳并不一定恰当,具体环境,需要灵活的判断。

评论
加载中,最新评论有1分钟缓存...