静态路由关联下一跳与出接口【详解】

静态路由

静态路由关联下一跳与出接口

在华为设备上,静态路由可关联下一跳或者出接口,或者同时关联。
接下来我们探究静态路由写法不同有何区别
实验拓扑:

静态路由关联下一跳与出接口【详解】

R1:
int g0/0/0
ip add 192.168.12.1 24
ip route-static 192.168.23.0 24 192.168.12.2
R2:
int g0/0/0
ip add 192.168.12.2 24
int g0/0/1
ip add 192.168.23.2 24
ip route-static 3.3.3.0 24 192.168.23.3
R3:
int g0/0/0
ip add 192.168.23.3 24
int lo0
ip add 3.3.3.3 24
ip route-static 192.168.12.0 24 192.168.23.2

实验一:只关联下一跳
那么路由器在查表转发的时候,会对下一跳做递归操作,找到通过哪个接口到达下一跳路由器。
以太网中需要arp请求下一跳对应的MAC地址封装二层。
[R1]ip route-static 3.3.3.0 24 192.168.12.2

静态路由关联下一跳与出接口【详解】

实验二:只关联出接口
那么路由器会认为该报文目的地址终端与该接口是同一网段,因此在以太网链路中直接ARP请求报文目的地址对应的MAC,如果对端设备接口没有arp-proxy enable,将导致传输失败。
先undo ip route-static 3.3.3.0 24 192.168.12.2
[R1]ip route-static 3.3.3.0 24 GigabitEthernet 0/0/0

R1上ping 3.3.3.3 在R1 g0/0/0口抓包

静态路由关联下一跳与出接口【详解】

静态路由关联下一跳与出接口【详解】

R1直接ARP请求3.3.3.3的MAC地址,显然不会得到回应。通信失败
在R2上g0/0/0口arp-proxy enable

静态路由关联下一跳与出接口【详解】

再次在R1上ping 3.3.3.3,抓包

静态路由关联下一跳与出接口【详解】

静态路由关联下一跳与出接口【详解】

R2对R1发出的arp请求3.3.3.3的MAC作出了回应,把自己的MAC与3.3.3.3对应告诉R1
补充一下arp代理(欺骗)的内容,进行ARP代理需具备两个条件
1.接口arp-proxy enable 2.路由器上有去往该IP地址的路由(显然R2有去往3.3.3.0的路由,因此对R1作出arp回应,即使请求的不是自己的MAC)

假如出接口为点对点链路呢?如ppp、hdlc链路
由于点对点链路二层不需要mac,自然不就不需要arp,在路由表中查到路由直接从出接口发出就可以了。
如果在帧中继FR网络中,需要指明下一跳,只关联出接口将导致传输失败,因为帧中继网络二层需要目的地址的DLCI数据链路连接标识。

实验三:同时关联下一跳和出接口
[R1]ip route-static 3.3.3.0 24 GigabitEthernet 0/0/0 192.168.12.2 #下一跳为R2
Ping 3.3.3.3 通信成功,arp请求192.168.12.2的MAC

静态路由关联下一跳与出接口【详解】

静态路由关联下一跳与出接口【详解】

此时

静态路由关联下一跳与出接口【详解】

实验四:同时关联下一跳和出接口(但下一跳与自己不是直连)
如果同时关联了下一跳和出接口,路由器会认为下一跳就在出接口上,与自己直连,不会进行递归操作。
先undo ip route-static 3.3.3.0 24 GigabitEthernet 0/0/0

静态路由关联下一跳与出接口【详解】

[R1]ip route-static 3.3.3.0 24 192.168.23.3 #下一跳写R3

静态路由关联下一跳与出接口【详解】

当路由器有去往3.3.3.0网络的报文时,查路由表发现下一跳为192.168.23.3,
进行递归,192.168.23.3怎么去,于是找到去192.168.23.3的下一跳为192.168.12.2,
封装好192.168.23.3对应的MAC从g0/0/0口发送出去。
但是再加上出接口呢?
[R1]undo ip route-static 3.3.3.0 24 192.168.23.3

静态路由关联下一跳与出接口【详解】

[R1]ip route-static 3.3.3.0 24 GigabitEthernet 0/0/0 192.168.23.3 #下一跳依然为R3

静态路由关联下一跳与出接口【详解】

由于之前实验已经arp 3.3.3.3的MAC地址为R2的g0/0/0口,我们先将R1的arp缓存清空

静态路由关联下一跳与出接口【详解】

再将R2的g0/0/0口 arp-proxy enable关闭

静态路由关联下一跳与出接口【详解】

此时再ping 3.3.3.3,发现ping不通,因为路由器认为下一跳192.168.23.3与出接口g0/0/0
直连。不再对下一跳192.168.23.3进行递归操作,直接ARP请求192.168.23.3的MAC地址。如果R2的g0/0/0口没有arp-proxy enable,不对这个arp请求回应,R1对IP报文封装二层目的MAC失败,通信失败。

静态路由关联下一跳与出接口【详解】

静态路由关联下一跳与出接口【详解】

华为设备静态路由写法总结:
只关联出接口路由器会认为是直连网络,直接arp请求远端网络的MAC,因此BMA网
络下一跳路由器需开启ARP代理功能。
如果是NBMA网络则不需要,点对点链路不需要对端地址就可以封装二层报文,如
ppp、hdlc,NBMA中如帧中继网络需要指明下一跳,帧中继网络二层需要目的地址的DLCI
如果只指明了下一跳没有出接口,路由器会进行递归查到达下一跳的路由,直到找到去往
下一跳的出接口
同时关联出接口和下一跳路由器会认为下一跳路由器与所关联的出接口直连,发送arp直
接请求下一跳的mac,而不会在路由表中对下一跳进行递归查询
实例:下一跳并非是自己的直连,那么出接口对端设备需要开启arp-proxy

因此:多路访问网络(以太网、帧中继等)必须关联下一跳,非多路访问(点对点ppp,hdlc等)既可以关联下一跳,也可以关联出接口或者同时关联。

上一篇:Maven plugin中的lifecycle、phase、goal、mojo概念及作用的理解


下一篇:MyEclipse10中自动生成Hibernate的实体和xml配置文件