路由的递归查询到底是干什么的?
路由的递归查询针对静态路由来讲,对于动态路由就没必要了。之所以要使用递归路由,目的是绕开那些经常变动的链路,可以使静态路由的配置工作量减小。
使用递归路由的一个条件:到达目标网络的链路在途中可以汇聚成比目标网络数量更少的链路。
路由器逐跳将数据包发送到目的地,静态路由可以指定到目的地的每一跳,但是如果路径上某个节点出现问题,整条静态路由就不能工作了,如果真的能用到静态路由,则需要管理员重新指定一条可以到达目的地的静态路由,很蛋疼。
递归路由可以在一定程度上解决这个问题:
对于上面的拓扑,R1需要经过R2或R3路由器,将数据包发送给R4下的网段,管理员需要指定一条从R2或R3到R4下网段的静态路由,如果指定的是经过R2的静态路由,那如果R2不幸down掉,则需要在指定经过R3的路由,对于这样简单的拓扑还可以,但对于大点的网络环境,则比较麻烦。
如果R1不指定R2或R3,直接指定R4路由器的f0/0接口,如果R2 down掉,则可以通过R3继续工作。
目标:
从R1可以访问R4路由之下的四个网段。
实现:
1.静态路由关联R2或R3,来实现与R4的通信,但这样存在问题,如果R2或R3中有路由器无法使用了,得重新修改路由配置
2.直接关联R4的f0/0接口:这样R2或R3失效后,R1仍可以访问R4网段,这里用到就是递归路由了吧。
具体操作:
R1指定到R4的静态路由:
R1(config)#ip route 40.0.1.0 255.255.255.0 fastEthernet0/020.2.2.4
R1(config)#ip route 40.1.1.0 255.255.255.0fastEthernet 0/020.2.2.4
R1(config)#ip route 40.2.1.0 255.255.255.0fastEthernet 0/020.2.2.4
R1(config)#ip route 40.3.1.0 255.255.255.0fastEthernet 0/020.2.2.4
R2指定到R4的静态路由:
R2(config)#ip route 40.0.1.0 255.255.255.0 fastEthernet 0/120.2.2.4
R2(config)#ip route 40.1.1.0 255.255.255.0 fastEthernet 0/120.2.2.4
R2(config)#ip route 40.2.1.0 255.255.255.0 fastEthernet 0/120.2.2.4
R2(config)#ip route 40.3.1.0 255.255.255.0 fastEthernet 0/120.2.2.4
R3指定到R4的静态路由:
R3(config)#ip route 40.0.1.0 255.255.255.0 fastEthernet 0/120.2.2.4
R3(config)#ip route 40.1.1.0 255.255.255.0 fastEthernet 0/120.2.2.4
R3(config)#ip route 40.2.1.0 255.255.255.0 fastEthernet 0/120.2.2.4
R3(config)#ip route 40.3.1.0 255.255.255.0 fastEthernet 0/120.2.2.4
R1要把报文发给40.0.1.0等四个网段,先要把报文发给静态路由中指定的下一跳地址,也就是20.2.2.4,但R1的路由表里没有20.2.2.4的的路由条目,R1会干什么?R1会像PC一样,发送ARP请求,用debug 来查看ARP信息:
Mar 1 00:25:23.783: IPARP: creating incomplete entry for IP address: 20.2.2.4 interfaceFastEthernet0/0
*Mar 1 00:25:23.783: IPARP: sent req src 10.1.1.1 c400.1910.0000,
dst20.2.2.4 0000.0000.0000 FastEthernet0/0
这里可以看到,R1发送arp请求,源地址是10.1.1.1,源mac地址是c400.1910.0000,目的地是:20.2.2.4,目的mac是:0000.0000.0000,通过接口:FastEthernet0/0,R1向R2和R3发送ARP请求,R2和R3的代理ARP功能,会判断,请求者和被请求者是不是在同一个广播域,是否拥有去往源和目的地址的路由,是否开启接口代理ARP,如果全部满足,则R2和R3就会给R1发送ARP应答。
R2中:
*Mar 1 00:25:21.859: IPARP: rcvd req src 10.1.1.1 c400.1910.0000, dst 20.2.2.4 FastEthernet0/0
*Mar 1 00:25:21.863: IPARP: sent rep src 20.2.2.4 c401.1910.0000,
dst10.1.1.1 c400.1910.0000 FastEthernet0/0
R3:
*Mar 1 00:48:20.815: IPARP: rcvd req src 10.1.1.1 c400.1910.0000, dst 20.2.2.4 FastEthernet0/0
*Mar 1 00:48:20.819: IPARP: sent rep src 20.2.2.4 c402.1910.0000,
dst10.1.1.1 c400.1910.0000 FastEthernet0/0
来查看R1收到ARP应答的情况:
*Mar 1 00:49:24.239: IPARP throttled out the ARP Request for 20.2.2.4
*Mar 1 00:49:24.303: IPARP rep filteredsrc 20.2.2.4 c401.1910.0000, dst 10.1.1.1 c400.1910.0000 wrong cable, interfaceFastEthernet0/0
*Mar 1 00:49:24.303: IPARP rep filtered src 20.2.2.4 c402.1910.0000, dst 10.1.1.1 c400.1910.0000 wrongcable, interface FastEthernet0/0
这里,发现R1将应答过滤掉了。。。
对于PC,如果该设备收到路由器传递的ProxyARP Reply,则该PC会信任该Reply,并将其加入ARP表中;
而对于路由器,如果该设备收到Proxy ARPReply,则该路由器会优先判断该Reply中应答者ip地址所在网段是否可达,如果是,则接收,否则,直接丢弃。
这里R1收到的ARP,应答者的ip地址应该是20.2.2.4,所以,R1会将收到的rep过滤掉。
可以在R1上添加一条去往20.2.2.0的路由条目
R1(config )#ip route 20.2.2.0 255.255.255.0 10.1.1.2
这一条静态路由的作用就是,R1不过滤收到的代理ARP回复,这里的下一跳地址没有实际意义。
在R4上指定一个去R1的路由条目:
R4(config)#ip route 10.1.1.0 255.255.255.0 20.2.2.2
这样R1就可以去往R4下网段了。