IGP-静态路由之ICMP Redirect
ICMP重定向(ICMP Redirect)
1.概述
在以太网中路由器之间基于IP路由转发,将用户的数据包尽力而为的转发到目的地。通常情况下,主机都会将去往远程的数据包发送到下一跳路由器,路由器再尽最大努力转发数据。但是在某些情况下,收到数据包的路由器可能并不是去往目的地的最优选择,也就是说该路由器并不在源于目标的路径当中,或者说数据源应该将数据交给其它路由器来转发数据(最佳路由器)。如果某台路由器真的发现自己不应该为用户转发数据,而希望让用户选择其他路由器来转发数据,那么它就会通过向数据源发送ICMP重定向(ICMP Redirect)来告诉对方,让对方不要再将数据包发向自己,而是发送到其他最佳的路由器。
这里由于IP是不可靠的容易出现丢包,所以为尽力而为的在IP网络中传输。
2.路由器向源发送ICMP重定向的情况有两种:
2.1 当路由器从某个接口收到数据包后,还要将数据包从同一个接口发往目的地,也就是路由器收到数据包的接口正是去往目的地的出口时,则会向源发送ICMP 重定向,通告对方直接将数据包发向自己的下一跳即可,不要再发给自己。
2.2 数据包源IP和自己转发时下一跳IP地址是同一网段时,也会像源发送ICMP重定向,通告对方直接将数据包转发給自己的下一跳路由器。
注:路由器再向数据发送ICMP重定向的同时,也会正常转发收到的数据包,并不会中断网络。
3.实验案例:
3.1 实验拓扑
注:ICMP在Cisco设备中是基于接口下配置的,默认为开启状态。
3.2 拓扑说明
这里主要用到4个路由器,其实Internet这个路由器暂时无需配置,R1,R2,R3的接口G0/0在10.1.1.0/24这个广播域中;R2和R4的接口G0/1在20.1.1.0/24这个广播域中;而R3将去往任何目的的数据全部需要交给R1进行转发。
4.实验过程
4.1 基础网络环境配置
(1)配置R1
R1>enable
R1#configure terminal
R1(config)#interface GigabitEthernet0/0
R1(config-if)#ip address 10.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.2
R1(config)#end
说明:R1将去往任何目的地的数据包全部交给10.1.1.2这个下一跳地址,即交给R2来转发。
(2)配置R2
R2#conf t
R2(config)#int g0/0
R2(config-if)#ip add 10.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int g0/1
R2(config-if)#ip add 20.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
说明:R2同时连接10.1.1.0/24和20.1.1.0/24这两个直连网段。
(3)配置R3
R3#conf t
R3(config)#int g0/0
R3(config-if)#ip add 10.1.1.3 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.1
R3(config)#end
说明:R3将去往任何目的地的数据包全部交给10.1.1.1,也就是选择R1作为网关进行转发。
(4)配置R4
R4#conf t
R4(config)#int g0/1
R4(config-if)#ip add 20.1.1.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#exit
R4(config)#ip route 0.0.0.0 0.0.0.0 20.1.1.2
R4(config)#end
说明:由于R4与R2直连都在20.1.1.0/24网段内,所以都可以相互通讯,但是R1,R2,R3在10.1.1.0/24网段内如果没有路由默认R1和R3是不能访问R4,由于之前R3下一跳路由指向R1,然后R1下一跳又指向R2,由此R4必须向R2指向一条回指路由(反向路由,回程路由)。因为静态路由双向互指才可以通讯。
4.2 测试ICMP重定向
(1)在R3上向目标网络20.1.1.0发送数据包来测试ICMP重定向,并且打开debug观察数据包:
说明:从上面信息可以看出,由于R3的网关是10.1.1.1,所以会将去往20.1.1.0/24的数据包发给网关R1,但是R1从接口G0/0收到数据包后,检查路由表得知需要再将数据包从相同接口G0/0发给10.1.1.2,不仅满足发送ICMP重定向情况的第一条同接口进出,也满足第二条源和下一跳同网段,所以R1向源发送了ICMP重定向,数据包中明确告诉R3将去往20.1.1.4的数据包直接交给10.1.1.2,即交给R2。
(2)更改R3的路由方式
查看路由配置
R3(config)#do show run | in ip route
ip route 0.0.0.0 0.0.0.0 10.1.1.1
配置静态路由由接口转发:
R3(config)#no ip route 0.0.0.0 0.0.0.0 10.1.1.1
R3(config)#ip route 0.0.0.0 0.0.0.0 g0/0
查看抓包状态:
说明:可以看出,R1并没有再发送ICMP重定向,因为R3并没有将去往20.1.1.0/24的数据包发向R1,具体原因,由普通ARP的原理可以得知。
4.3 关闭ICMP重定向
在R1接口上关闭ICMP重定向:
R3(config)#int g0/0
R3(config-if)#no ip redirects
更改路由配置:
R3(config)#no ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/0
R3(config)#ip route 0.0.0.0 0.0.0.0 10.1.1.1
说明:需要开启ICMP重定向,输入命令ip redirects;ICMP重定向功能不建议关闭。
注:在接口上开启HSRP后,默认会关闭ICMP重定向的功能,在IOS 12.1(3)T和以后的版本可以手工开启ICMP重定向功能。
查看测试结果: