ICMP重定向字段的路由重定向实验

网络 路由交换
ICMP的重定向字段,被路由器用于通知主机去往目标的最佳网关,是数据链路上的另一台路由器。

ICMP的重定向字段,被路由器用于通知主机去往目标的最佳网关,是数据链路上的另一台路由器。

实验目的:

1.验证重定向。

2.重定向对主机的数据转发的影响。

3.关闭重定向后,数据转发过程。

实验拓扑:

实验设计:

1.R2、R3、R4、R5运行RIPv2协议,R1关闭路由功能,将默认网关指向R2

2.R4、R5上各有环回接口,IP分别为4.4.4.4、5.5.5.5,所有IP地址使用/24位地址。

3.在验证过重定向后,关闭R2 F0/0的路由重定向功能,通过抓包,查看数据转发路径。

实验过程:

各路由器的配置在此就不写了,直接来验证实验结果。

首先先对拓扑进行分析,从拓扑上看,R1发往R4的数据,其最短路径应为R1—R3——R4;R1发往R5的数据,其最短路径应为R1—R2—R5。我们通过抓包,来分别检验到R4,R5的数据转发路径。当然在开始前要做些准备工作:

1.在R1上使用debug ip icmp命令来开启debug信息。

2.关闭R2 F0/0接口的路由重定向功能,应为该功能是默认开启的,命令如下:

1.关闭R2路由重定向功能时的数据传输路径

1.1 在R1上ping 5.5.5.5

ping通后,看看抓包的结果,查看R1的F0/0口即可

图1  R1 ping请求抓包

图2  R1 ping应答抓包

从请求及应答包的二层头部可以看出,R1的数据发向了R2,因为R2运行有RIP协议,故数据包将由R2转给R5。#p#

1.2 在R1上ping 4.4.4.4

图3  R1 ping 4.4.4.4 请求抓包

图4  R1 ping 4.4.4.4 应答抓包

为了更好的说明问题,再在R3 f0/0上进行抓包

图5  R3上抓取的ping请求包

图6  R3上抓取的ping应答包

由图3可看出,R1向R4的ping请求首先发向了ca00.0518.0000(R2),由图4可看出,直接向R1转发此次ping应答的是ca02.0518.0000(R3)。

由图5可看出,ca01.0518.0000(R2)发送过来一个ping请求,由图6可看出,对于这个ping请求,做出的应答R3直接发向了ca00.0518.0000(R1)。

意即,当关闭重定向时,关于此次ping的全过程的路径是R1—R2—R3—R4(数据到达R4,开始回包)—R3—R1。一去一回是所经过的路径不一样,也就是产生了不对称的流量。同时,不进行重定向,在有时间间隔的ping过程中,存在丢包显现,意即数据链路的可靠性较低。

2.开启R2的路由重定向功能

因为路由重定向功能主要是针对于去往R4的数据流量,故可不再进行ping R5的实验。

R1 ping 4.4.4.4,结果如图7。由图7中可看出,当R1 ping 4.4.4.4后,产生了一条重定向提示:接收到来自123.1.1.2的重定向信息—去往4.4.4.4使用网关123.1.1.3。

图7  R1 ping 4.4.4.4的debug信息

接着,在查看一下R1此时的路由表,如图8。#p#

图8  R1路由表

此时,可发像,R1的缺省网关仍为123.1.1.2,只是路由表中多了一条明细信息,将去往4.4.4.4的网关指向了123.1.1.3。

下面将34.1.1.3、34.1.1.4也ping通,通时再ping一下34.1.1.0/24网段的其他地址,看看R1路由表信息,如图9。

图9  R1路由表

由图9可看出,虽然,34.1.1.5及34.1.1.6是不存在的主机地址,但是仍被重定向到了R3。这是因为R2使用的是RIP协议,拥有到达34.1.1.0/24及4.4.4.0/24网段的路由,因此在R2查看过自己路由表后,会将所有去往34.1.1.0/24及4.4.4.0/24网段的数据全部重定向到R3。在路由表中Last Use是距上一次使用时的时间,Total uses应该是使用的频次。

在进行下一步的路径验证之前,我们先看一下抓包工具抓出来的重定向ICMP包,如图10。

从图10中,从而三层头部信息中可知这是有R2发给R1的信息,在ICMP消息中,可看出类型为5,代码为1,校验和为0x2b19,重定向到123.1.1.1,再其后便表明为哪个地址进行的重定向。

图10  重定向ICMP抓包

现在开始进行路劲验证,同样还是通过分析抓到的ping包来进行,如图11~14。

图11  ping R4的请求包

图 12  ping R4的应答包

图 13  ping R5的请求包#p#

图 14  ping R5的应答包

由图11、12可看出,去往R4的流量均直接使用R3进行传输,而不再使用R2,即网关被重定向到R3;由图13、14可看出,去往R5的流量仍有R2进行处理,即网关仍未R2。

3.一个解决路由从定向问题的方法

卷一中提供了一个避免路由重定向的方法,就是主机将网关指向自己的接口,下面开始验证一下,结果如图15、16所示。

图15  R1 ping R5(有缺省网关)

图 16  R2 debug信息

由图15中debug信息可知,数据包已经形成并发送到f0/0口(网关),而从图16 R2的debug信息中,却没有发现有数据经过,且也为接受到ARP的请求。由此可是,在用路由器模拟主机的实验环境下,这个解决方案是不成立的。但是我可以肯定的说,当主机将网关指向自己的以太网口的时,再ping不同网段的的主机是会发出ARP请求的,也就是说真实主机将网关指向自己的时候,在这种情况向的确可以避免路由重定向。关于主机将网关指向自己时的ARP实验结果,见下次实验。

当然,在这中路由器模拟主机的环境下,采用卷一中的提示,避免路由重定向也是可实现的。通过上一次的代理ARP实验可知,当用路由器模拟的主机在不指网关的时候,要与不同网段数据通信的时候也是会发送ARP请求的。因此,要先将R1的默认网关清掉,然后再ping R5,结果如图17所示。

由图17中可发现,当R1 ping 5.5.5.5的时候,首先发送了关于5.5.5.5的MAC地址的ARP查询,第一个包由于还未接到应答,不知道二层头部信息,因此封装失败。黄色的框中显示,R1收到的关于5.5.5.5的ARP应答,指明5.5.5.5的MAC地址是ca01.0518.0000(R2的MAC地址,因为默认代理ARP功能是打开的)。同样,ping 4.4.4.4的时候,R1也会发送ARP查询,MAC地址将由R3来代理,如图17中的ARP表,意即去往R4的数据将交由R3来转发。

这种做法的确避免了路由重定向,不过却加重了网络的负担,因为ARP请求使用的是广播,而在指明网关后,使用的均为单播信息。

另外需说明一点,在此实验中,R1发出了ARP请求,而R2、R3均有到达两个网段的路由,只从这点考虑的话,R1的每个ARP请求应该会接到两个ARP应答。但是实际上R1每个ARP请求只收到了一个准确的最近网关的ARP代理应答,而通过抓包也发现,R2、R3均未为要使用接受ARP请求的端口发送数据的ARP请求做应答。即R2未给向4.4.4.4的请求做应答,因为去往4.4.4.4的数据让要从f0/0口(接受4.4.4.4 ARP请求的端口)发出;同样R3未给向5.5.5.5的请求做应答。这也就是说路由器的代理ARP功能是为其它端口进行代理,也就是说当路由器判定数据让要从接受ARP请求的端口转发,将不会应答此请求。

由以上过程,我又想到一个实验,即如果R2、R3为同一个网络开启了负载均衡,那么R1会接受谁的ARP代理,此实验留待下次解决。

图 17  R1 ping R5 debug信息(无网关)

总结

1.当路由器从一个接口接到一个数据,经查询过路由表,判定仍要从接收该数据接口发送该数据时,将会向原目标发送重定向的ICMP消息。

2.不使用路由重定向功能,会造成不对称流量,并且链路可靠性降低。

3.主机将网关指向自己可避免路由重定向的问题,但会造成ARP流量的增加。

4.路由器模拟主机,在配置缺省网关(即使网关指向自己)之后,将不会发出不同网段的ARP请求,这与未配置网关的主机相同;而主机在将网关指向自己之后,会发出不同网段的ARP请求,这与未配置缺省网关的路由器模拟的主机相同。

5.路由器的代理ARP功能是为其它端口进行代理的,也就是说当路由器判定数据仍要从接受ARP请求的端口转发时,将不会应答此请求。

文章来源:http://zqdiadra.blog.51cto.com/1349871/411676

责任编辑:佚名 来源: 51CTO.com
相关推荐

2010-07-13 14:10:44

ICMP协议

2020-12-09 11:10:12

shellLinux管道

2017-01-19 19:14:20

Linux重定向命令

2010-03-09 16:11:59

Linux重定向

2020-07-27 07:41:23

Linux重定向数据流

2010-12-31 13:35:25

文件夹重定向

2009-11-23 18:39:17

PHP重定向

2022-09-02 08:03:44

IO程序网卡

2021-03-28 08:32:58

Java

2017-12-06 10:15:27

跳转机制Chrome

2009-12-25 16:21:41

shell命令

2010-04-20 15:25:12

Unix操作系统

2011-06-15 14:33:13

2010-05-04 14:42:33

Unix操作系统

2020-01-07 08:00:52

ApacheHTTPHTTPS

2011-06-15 14:43:43

301重定向

2009-06-25 14:54:22

Servlet转发Servlet重定向

2013-06-26 15:42:54

2013-06-22 17:13:38

2009-12-01 11:04:10

PHP重定向网页
点赞
收藏

51CTO技术栈公众号