这是TCP/IP路由第一卷的一个安全研究:协议冲突。我把我的实践发上来,这是我的拓扑图。

 

 
  
  1. R0: 
  2. interface Ethernet0/0 
  3.  ip address 172.16.21.1 255.255.255.0 
  4.  half-duplex 
  5. 这里还要输入:ip proxy-arp ,这是为了模拟环境。
     
  6. !          
  7. interface Ethernet0/1 
  8.  ip address 172.16.20.1 255.255.255.0 
  9.  half-duplex 

 

 

 
  
  1. R1: 
  2.  
  3. interface Ethernet0/0 
  4.  ip address 172.16.21.2 255.255.255.0 
  5.  half-duplex 
  6. !          
  7. interface Ethernet0/1 
  8.  ip address 172.16.20.2 255.255.255.0 
  9.  half-duplex 
  10. !          

 

 

 
  
  1. R2: 
  2. interface Ethernet0/0 
  3.  ip address 172.16.20.254 255.255.255.0 
  4.  half-duplex 

 

以上的配置十分简单的,但是却使这个网络出现了环路。

 

 

 为什么会出现这个情况?书里解释得很清楚。我也在这里陈述一次,当复习。

我们先看一下R1的arp:

 

 

发现172.16.20.254 的mac跟R0的e0/0接口的MAC地址是一样的,为什么会这样,R2跟R1是直接连接在一起的,按理来说R1是可以正确得到R2的MAC的。

问题就出现在,在R0上我们开启了代理ARP的功能。

代理ARP的功能简单的陈述一下:

代理ARP的功能是使,PC机并不理解什么是子网,所以,当172.16.21.2的PC1时想访问172.16.20.1的PC2时,它认为这是在同一个网段172.16.0.0,所以发现广播包查询PC2的MAC地址。但因为广播包是无法穿透路由器的,所以当路由器收到这个ARP请求包时,路由器查看自己的情况,知道172.16.20.0 这个网段与自己是连接在一起的,而路由器开启了代理arp的功能,所以,路由器会代PC2发回一个ARP响应包,当172.16.20.1 与自己的接口IP绑定在一起。这时PC1就可以在自己的ARP表里添加这一条目了。

理解了代理ARP的功能后,也就明白了我们的故障出在哪里了。当R1第一次发送数据包时,会发出广播包去请求172.16.20.254的MAC地址,这个时候,R2会回复一个正确的MAC,R0也会回复一个它自己的MAC。

所以,当R1想转发数据包去住R2时,反而是将数据包发回了R0.造成了路由环路。

在TCP/IP里提供了两种解决方法:

第一种:

 

第二种:

 

 

这样就可能 解决环路了。