配置静态路由下一跳为本地出战接口和IP地址的区别

 
在配置静态路由时,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口。在点对点的网络中,两者可能没有什么差别,但在以太网中或者NBMA网络类型,两者有很大差别。
 
验证一:广播多路访问_以太网
在以太网中,两个相邻接口之间的通信是依靠MAC地址。相邻接口通信时,需要知道对方的MAC地址,根据MAC地址,将通信数据转换成数据帧后交付给网络,进而到对方。而对方MAC地址的获得,是通过第二层数据帧广播,由ARP协议完成的。
当静态路由中使用出站接口做为下一跳时,路由器会认为目标网络和接口处在“直连网络”中。配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换
R1上配置静态路由R1(config)#ip route 192.168.10.0 255.255.255.0 f0/0后,在R1的路由表中会看到一条静态路由显示为直连路由,如图:配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_02
在以太网中,直连网络中主机间的通信是通过ARP协议广播来获取到要交付的目标主机的MAC地址的。也就是说,当R1(192.168.1.1)要和PC1(192.168.10.2)通信时,R1看到目标网络是自己的直连网络(由于静态路由中指定下一跳为自身接口所致),于是R1就要在F0/0发出ARP请求广播,来寻找192.168.10.2/24对应的MAC地址。
这时,如果R2(f0/1)启用了ARP代理,那么R2将代替PC1应答此ARP请求,也就是说返回给R1:192.168.1.1对应的MAC地址是R2的F0/1接口MAC。这样,R1中将产生三条ARP缓存记录,分别为:配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_03
很明显,PC1对应的MAC地址为R2接口f0/1的MAC地址(R2启用ARP proxy的结果)。这时我们可以在PC1上ping一下R1(192.168.1.1),然后在R1和R2之间抓包。如图:配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_04
通过抓包我们可以看出,R1通过ARP广播获得了192.168.10.2的MAC地址,最终PC1 ping通了R1。
 
下面我们在R2的F0/1接口上运行no ip arp proxy,在R1上将f0/0上的arp缓存清除,clear arp-cache interface f0/0。再在PC1上ping 一下R1,同样在R1和R2之间抓包,如图:配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_05
很明显,R1发出的ARP广播请求最终也没有得到应答,最终网络不通。这时再查看R1的ARP表,肯定没有192.168.10.2的条目,如图:配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_06
下面我们将R1路由上的静态路由更改为:ip route 192.168.10.0 255.255.255.0 192.168.1.2,这时我们再用同样的方式,PC1 ping R1,在R1和R2之间抓包,如图配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_07
通过报文显示,R1并没有再通过ARP广播请求192.168.10.2的MAC地址,而是直接请求静态路由器的下一跳IP192.168.1.2的MAC地址,并且得到了应答,最终建立了通信。配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_08
 
验证二:NBMA网络(非广播多路访问)_帧中继
 

配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_09

(图1 多点子接口图示)
 

配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_10

(图2 点到点子接口图示)
 
 
图1和图2是帧中继的两种配置方式,都属于NBMA网络类型,图1,R3和PC1建立通信,必须分别在R3上加一条静态路由,R3(config)#ip route 192.168.0.0 255.255.255.0 192.168.1.2,而且配置静态路由的下一跳必须为IP地址。图2,R2和PC1建立通信,必须分别在R1、R2、R3上配置静态路由:
R3(config)#ip route 192.168.0.0 255.255.255.0 192.168.2.1
R1(config)#ip route 192.168.0.0 255.255.255.0 192.168.1.2
R2(config)#ip route 192.168.2.0 255.255.255.0 192.168.1.1
 
[题外]在帧中继中也可以使用frame-relay map ip 命令建立dlci映射,也可以实现PC4和R3的通信(以图2为例):
R3(config-if)# frame-relay map ip 192.168.0.2 301 broadcast
R1(config-if)# frame-relay map ip 192.168.0.2 102 broadcast
R2(config-if)# frame-relay map ip 192.168.2.3 201 broadcast配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_11
验证三:点到点_封装ppp/hdlc配置静态路由下一跳为本地出战接口和IP地址的区别_网络路由交换_12
在点到点PPP/HDLC封装链路中,实现PC和R1的通信,在R1上配置静态路由下一跳为出战接口S0/0和IP地址192.168.1.2实验验证确实都行得通。
 
 
总结:
在配置静态路由时,既可指定发送接口,也可指定下一跳地址,到底采用哪种方法,需要根据实际情况而定:对于支持网络地址到链路层地址解析的接口(直接连到主机)或点到点接口(ppp),指定发送接口即可;而广播接口如以太网接口、VLAN接口及nbma接口则必须指定下一跳IP地址。对于nbma(非广播多路访问)接口如封装x.25或帧中继的接口、拨号口等,支持点到多点;这时除了配置ip路由外,还需在链路层建立二次路由,即ip地址到链路层地址的映射(如dialer map ip、x.25 map ip或frame-relay map ip等),这种情况配置静态路由不能指定发送接口,应配置下一跳ip地址。
 
如果在点到点网络环境下,无论是指定下一跳地址还是出接口,其效果都是一样的。但是在广播网络环境下,指定下一跳地址和指定出接口将会达到不同的效果。如果指定为出接口的话,那么不管数据包的目标地址是否有效,每次当数据包到达时都会触发一个ARP请求和响应,又因为ARP代理功能在IOS环境下默认是打开的,这就意味着路由器需要配备大量的ARP高速缓存。而如果是指定为下一跳地址的话,仅当第一个去往目标网络的数据包到达时,才会触发ARP请求。 所以为了便于路由的查找和减少ARP缓存条目过多的办法就是同时指定出接口和下一跳地址。这样做的话,路由条目在路由表中表现为非直连网络,其管理距离值为1。