ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下,当路由器检测
到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由。路由器也会把初始数据报向它的目的地转发,ICMP虽然不
是路由协议,但是有时它也可以指导数据包的流向(使数据流向正确的网关)。ICMP协议通过ICMP重定向数据包(类型5、代码0:网络重定向)达到这个
目的。 案例1:图1 ICMP重定向 如图1所示,主机PC要ping路由器R2的loopback
0地址:192.168.3.1,主机将判断出目标属于不同的网段,因此它要将ICMP请求包发往自己的默认网关192.168.1.253(路由器R1
的E0接口)。但是,这之前主机PC首先必须发送ARP请求,请求路由器R1的E0(192.168.1.253)的MAC地址。 图2 ICMP重定向包 图3 ICMP重定向包-续 如果还有后续的ICMP请求包,则除了ARP消息,所有的事件序列和上面的叙述相同。如图9所示。 图4 ICMP重定向事件序列 案例2:
如上图所示,假设有主机Host1,路由器RT1和RT2,Host1的网关指向RT1的以太口Host1。RT1、RT2的以太口在一个网段内 RT1和RT2通过广域网连接至Intranet,Intranet上有一台主机Host2。RT1、RT2、Intranet内路由器运行动态路由协 议。正常情况下RT1和RT2上都有到10.0.0.0/8这个网段都会有两条路由,分别通过广域网接口直接出去和通过以太口经由另一台路由器出去,但只 有经过广域网接口的这条路由会进到路由表中。Host1访问Host2的时候IP包被发到RT1,经过广域网转发出去 如果RT1的广域网链路down掉,则RT1上另一条路由就会进到路由表中,到达10.0.0./8这个网段的下一跳便是RT2的以太口。此时如果 Host1需要和Host2通信,Host1仍然会将IP包发送到RT1的以太口上,RT1查路由表,得知下一跳是RT2的以太口,这时RT1会将该报文 从以太口转发到RT2的以太口,同时向Host1发送一条ICMP重定向报文,使Host1在路由表上加一条主机路由:目标地址是10.0.0.1/8, 下一跳是1.1.1.3,这样Host1到Host2以后的IP包就会被直接发送到RT2的以太口。 总结:ICMP 重定向报文的接收者必须查看三个IP地址:
关于ICMP重定向报文有很多规则: 在4.4,B,S,D系统中,当主机作为路由器使用时,要进行下列检查,在生成,ICMP,重定向报文之前这些条件都要满足,
另外,一台4.4,B,S,D主机收到,ICMP,重定向报文后,在修改路由表之前要作一些检查,这是为了防止路由器或主机的误操作,以及恶意用户的破坏,导致错误地修改系统路由表
关于重定向最后要指出的是,路由器应该发送的只是对主机的重定向,代码1或3,而不是对网络的重定向。子网的存在使得难于准确指明何时应发送对网络的重定向而不是对主机的重定向,只当路由器发送了错误的类型时,一些主机才把收到的对网络的重定向当作对主机的重定向来处理。 |
|