众所周知在路由器上面写静态路由的时候,下一跳可以写为IP地址形式,也可以写成下一跳出接口的方式,那两种方式的区别在哪里呢,本文就以此作为一个探讨。
实验环境
环境介绍
环境如上图所示:
服务器使用路由器模拟,关闭路由功能。
PC使用路由器模拟,关闭路由功能。
最终在每台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的配置
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的配置
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的配置
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的配置
interface Ethernet0/0
ip address 192.168.2.x 255.255.255.0
!
no ip routing
!
ip default-gateway 192.168.2.254
现象查看
在R1上静态路由指向下一跳出接口
R1(config)#ip route 192.168.2.0 255.255.255.0 e0/1
先查看一下R1的arp表
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表
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上查看路由表:
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 *
R1(config)#ip route 192.168.2.0 255.255.255.0 192.168.12.2
分别在三台PC上ping 192.168.1.1(即模拟电脑访问服务器),然后再次查看R1的arp表
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的路由表:
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地址作为下一跳并不一定恰当,具体环境,需要灵活的判断。