分享

ICMP重定向案例

 谭逸逸 2012-03-14

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地址。
  当路由器R1收到此ARP请求包后,它首先用ARP应答包回答主机PC的ARP请求(通知主机PC:路由器R1自己的E0接口的MAC地址)。然后, 它(路由器R1)将此ICMP请求转发到路由器R2的E0接口:192.168.1.254(要求路由器R1正确配置了到网络 192.168.3.0/24的路由)。此外,路由器R1还要发送一个ICMP重定向消息给主机PC,通知主机PC对于主机PC请求的地址的网关 是:192.168.1.254。
  路由器R2此时会发送一个ARP请求消息请求主机PC的MAC地址,而主机PC会发送ARP应答消息给路由器R2。最后路由器R2通过获得的主机PC的MAC地址信息,将ICMP应答消息发送给主机PC。
  ICMP重定向包的内容如图2、图3所示。注意图2 ICMP包头中的Type和Code字段的值和含义。

 
  图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地址:

  1. 导致重定向的IP地址,即ICMP重定向报文的数据位于IP数据报的首部
  2. 发送重定向报文的路由器的IP地址,包含重定向信息的IP数据报中的源地址
  3. 应该采用的路由器IP地址在ICMP报文中的4 ~ 7字节

关于ICMP重定向报文有很多规则:
首先,重定向报文只能由路由器生成,而不能由主机生成。
另外,重定向报文是为主机而不是为路由器使用的。假定路由器和其他一些路由器共同参与某一种选路协议,则该协议就能消除重定向的需要。

在4.4,B,S,D系统中,当主机作为路由器使用时,要进行下列检查,在生成,ICMP,重定向报文之前这些条件都要满足,

  1. 出接口必须等于入接口
  2. 用于向外传送数据报的路由不能被ICMP重定向报文创建或修改过,而且不能是路由器的默认路由
  3. 数据报不能用源站选路来转发
  4. 内核必须配置成可以发送重定向报文

另外,一台4.4,B,S,D主机收到,ICMP,重定向报文后,在修改路由表之前要作一些检查,这是为了防止路由器或主机的误操作,以及恶意用户的破坏,导致错误地修改系统路由表

  1. 新的路由器必须直接与网络相连接,
  2. 重定向报文必须来自当前到目的地所选择的路由器,
  3. 重定向报文不能让主机本身作为路由器,
  4. 被修改的路由必须是一个间接路由,

关于重定向最后要指出的是,路由器应该发送的只是对主机的重定向,代码1或3,而不是对网络的重定向。子网的存在使得难于准确指明何时应发送对网络的重定向而不是对主机的重定向,只当路由器发送了错误的类型时,一些主机才把收到的对网络的重定向当作对主机的重定向来处理。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多