关于静态路由和ARP协议冲突的分析
静态路由协议:协议冲突(静态路由协议、arp协议)
一、案例研究
实验拓扑中,R3模拟服务器,网桥连接R1、R2。因为网桥还有其他的连接,负责的流量十分大。而又R1传送的数据有十分重要,所以,网络管理员便在R1上专门配置了一条主机路由,只向R2的Fa0/0口发送数据。
二、实验拓扑
拓扑中连接网桥的是12.1.1.0/24网段,R1、R2之间直接连接的是21.1.1.0/24网段。
三、实验配置
- R1:
- no ip domain lookup//关闭域名解析
- interface FastEthernet0/0
- ip address 12.1.1.1 255.255.255.0//为Fa0/0口配置IP地址
- interface FastEthernet0/1
- ip address 21.1.1.1 255.255.255.0//为Fa0/1口配置IP地址
- ip route 12.1.1.3 255.255.255.255 21.1.1.2//配置主机路由
- line con 0
- exec-timeout 0 0//防止超时登出
- logging synchronous//防止日志解析打断命令行
- R2:
- no ip domain lookup
- interface FastEthernet0/0
- ip address 12.1.1.2 255.255.255.0
- http://www.xiaoxiongboke.com
- interface FastEthernet0/1
- ip address 21.1.1.2 255.255.255.0
- interface Ethernet1/0
- ip address 23.1.1.2 255.255.255.0
- line con 0
- exec-timeout 0 0
- logging synchronous
- R3:
- no ip domain lookup
- interface FastEthernet0/0
- ip address 12.1.1.3 255.255.255.0
- ip route 12.1.1.1 255.255.255.255 12.1.1.2//配置去往12.1.1.2主机的路由条目
- line con 0
- exec-timeout 0 0
- logging synchronous
此时,我们来查看R1上的路由表:
- Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
- D- EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
- N1- OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
- E1- OSPF external type 1, E2 - OSPF external type 2
- i- IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
- ia- IS-IS inter area, * - candidate default, U - per-user static route
- o- ODR, P - periodic downloaded static route
- Gateway of last resort is not set
- 21.0.0.0/24is subnetted, 1 subnets
- C21.1.1.0 is directly connected, FastEthernet0/1
- 12.0.0.0/8is variably subnetted, 2 subnets, 2 masks
- C12.1.1.0/24 is directly connected, FastEthernet0/0
- S12.1.1.3/32 [1/0] via 21.1.1.2
注意红色加粗的下划线字体,路由器会发现静态路由精确匹配到了32位,并且与直连12.1.1.0/24网段位于同一网段,所以,路由器选择从Fa0/1发送数据。按照我们学习的只是,数据包是可以到达R3,但是事实并非如此,我们在R1上测试:
- R1(config)#do ping 12.1.1.3
- Type escape sequence to abort.
- Sending 5, 100-byte ICMP Echos to 12.1.1.3, timeout is 2 seconds:
- .....
- Success rate is 0 percent (0/5)
从红色字体中可以看出,没有一个数据包传送出去之后并没有收到回复信息。利用trace命令,来对R1发送的数据包进行追踪。
我们可以发现,数据包一直在12.1.1.1和21.1.1.2之间记性传送,发生了类似环路的现象。但问题具体出在哪里,就需要去了解数据链路层的工作机制。
当R2接收到从R1的Fa0/1口过来的数据包时,R2发现目的网络是自己的直连网段。R2第一个包发送ARP请求,因为是连在网桥上的,R1也会接收到请求包。R1发现请求主机ip地址存在自己的路由条目中,就发送了一个ARP应答(代理ARP)。由于网桥的延时,R1发送的ARP应答比R3回复的ARP应答要迟,后到的ARP应答就覆盖了原先ARP表中的条目。这里来解释一下代理ARP,当网络中的主机收到ARP请求时,发现自身身后的链路网段中包含有该ARP请求的ip地址,就会伪装成请求的ip地址主机回复请求包。此时,R2得到了一条ARP映射,ip地址为R3的Fa0/0接口ip地址,但是MAC对应的确是R1的Fa0/0接口的MAC地址。此时,得到ARP应答的R2就会将该条信息放入ARP表中,以后通往12.1.1.3的所有数据,都通过映射发向了R1的Fa0/0口。
我们来查看R2的ARP表:
从截图中我们可以发现,在R2的ARP表中,12.1.1.3(即R3的Fa0/0)的MAC地址为cc0a:066c:0000(冒号分十六进制)。
我们再到R3中查看Fa0/0接口的MAC地址:
从截图中我们发现,R3的Fa0/0接口MAC地址为cc0c:066C:0000。
再来看R1中的MAC地址表:
从R1的ARP表中看到,cc0a:066c:0000是ip地址为12.1.1.1接口的MAC地址。我们再来查看该接口的MAC地址:
显然,cc0a:066c:0000这个MAC地址是R1Fa0/0接口的MAC地址。
思考:
既然问题已经查明,那应该怎样解决。管理员的想法并没有错,因为网络中的流量分布,需要通过分流部署,来减轻网桥的负担。同时,这样的网络部署,可以保护重要数据的安全可靠。问题出在协议的冲突上,在R1上同时使用静态路由和代理ARP导致了问题的发生,所以,可以通过关闭R1上的代理ARP,便可以解决问题。
R1:
在R1的Fa0/0接口下关闭ARP代理,此时,我们再来ping 12.1.1.3:
我们发现,还是没有成功通信。在ARP表中,ARP条目一旦存在,都有其一定的存活时间,这个时候,如果不对ARP表进行清理,它就会一直存在。我们到R2上进行ARP表的清理
R2:
清理完成以后,我们可以发现失去了12.1.1.3的ARP映射,此时我们再到R1上进行测试
R1:
第一个包丢失是因为在进行ARP请求广播,R1的Fa0/0不做应答,所以在R2上存在的映射就是R3发给R2的正确应答。通信成功。至此,试验成功,问题解决。