9.5.1 一个例子

最后更新于:2022-04-02 05:24:07

可以在我们的网络上观察到ICMP重定向的操作过程(见封二的图)。尽管在拓扑图中只画出了三台主机(aix,solaris和gemini)和两台路由器(gateway和netb),但是整个网络有超过150台主机和10台另外的路由器。大多数的主机都把gateway指定为默认路由器,因为它提供了Internet的入口。 子网140.252.1上的主机是如何访问作者所在子网(图中底下的四台主机)的呢?首先,如果在SLIP链路的一端只有一台主机,那么就要使用代理ARP(4.6节)。这意味着位于拓扑图顶部的子网(140.252.1)中的主机不需要其他特殊条件就可以访问主机sun(140.252.1.29)。 位于netb上的代理ARP软件处理这些事情。 但是,当网络位于SLIP链路的另一端时,就要涉及到选路了。一个办法是让所有的主机和路由器都知道路由器netb是网络140.252.13的网关。这可以在每个主机的路由表中设置静态路由,或者在每个主机上运行守护程序来实现。另一个更简单的办法(也是实际采用的方法)是利用ICMP重定向报文来实现。 在位于网络顶部的主机solaris上运行ping程序到主机bsdi(140.252.13.35)。由于子网号不相同,代理ARP不能使用。假定没有安装静态路由,发送的第一个分组将采用到路由器gateway的默认路由。下面是我们运行ping程序之前的路由表: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-19_5715bebda95f8.png) (224.0.0.0所在的表项是IP广播地址。我们将在第12章讨论)。如果为ping程序指定-v选项,可以看到主机接收到的任何ICMP报文。我们需要指定该选项以观察发送的重定向报文。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-19_5715bebdbf2fe.png) 在收到ping程序的第一个响应之前,主机先收到一份来自默认路由器gateway发来的ICMP重定向报文。如果这时查看路由表,就会发现已经插入了一个到主机bsdi的新路由(该表项如以下黑体字所示)。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-19_5715bebdd55bf.png) 这是我们第一次看到D标志,表示该路由是被ICMP重定向报文创建的。G标志说明这是一份到达gateway(netb)的间接路由,H标志则说明这是一个主机路由(正如我们期望的那样),而不是一个网络路由。 由于这是一个被主机重定向报文增加的主机路由,因此它只处理到达主机bsdi的报文。 如果我们接着访问主机svr4,那么就要产生另一个ICMP重定向报文,创建另一个主机路由。 类似地,访问主机slip也创建另一个主机路由。位于子网上的三台主机(bsdi,svr4和slip)还可以由一个指向路由器sun的网络路由来进行处理。但是ICMP重定向报文创建的是主机路由,而不是网络路由,这是因为在本例中,产生ICMP重定向报文的路由器并不知道位于140.252.13网络上的子网信息。
';