第9章 IP选路
9.3 ICMP主机与网络不可达差错
当路由器收到一份I P数据报但又不能转发时,就要发送一份 I C M P“主机不可达”差错报文(I C M P主机不可达报文的格式如图 6 - 1 0所示)。可以很容易发现,在我们的网络上把接在路由器s u n上的拨号S L I P链路断开,然后试图通过该 S L I P链路发送分组给任何指定 s u n为默认路由器的主机。
较老版本的B S D产生一个主机不可达或者网络不可达差错,这取决于目的端是否处于一个局域子网上。4.4 BSD只产生主机不可达差错。
我们在上一节通过在路由器 s u n上运行n e t s t a t命令可以看到,当接通 S L I P链路启动时就要在路由表中增加一项使用 S L I P链路的表项,而当断开 S L I P链路时则删除该表项。这说明当S L I P链路断开时,s u n的路由表中就没有默认项了。但是我们不想改变网络上其他主机的路由表,即同时删除它们的默认路由。相反,对于 s u n不能转发的分组,我们对它产生的I C M P主机不可达差错报文进行计数。
在主机s v r 4上运行p i n g程序就可以看到这一点,它在拨号 S L I P链路的另一端(拨号链路已被断开):
在主机b s d i上运行t c p d u m p命令的输出如图9 - 2所示。
当路由器s u n发现找不到能到达主机 g e m i n i的路由时,它就响应一个主机不可达的回显请求报文。
如果把S L I P链路接到I n t e r n e t上,然后试图p i n g一个与I n t e r n e t没有连接的I P地址,那么应该会产生差错。但令人感兴趣的是,我们可以看到在返回差错报文之前,分组要在I n t e r n e t上传送多远:
从图8 - 5可以看出,在发现该I P地址是无效的之前,该分组已通过了 6个路由器。只有当它到达N S F N E T骨干网的边界时才检测到差错。这说明, 6个路由器之所以能转发分组是因为路由表中有默认项。只有当分组到达 N S F N E T骨干网时,路由器才能知道每个连接到 I n t e r n e t上的每个网络的信息。这说明许多路由器只能在局部范围内工作。
参考文献[Ford, Rekhter, and Braun 1993]定义了顶层选路域( top-level routing domain),由它来维护大多数I n t e r n e t网站的路由信息,而不使用默认路由。他们指出,在 I n t e r n e t上存在5个这样的顶层选路域: N S F N E T主干网、商业互联网交换( Commercial Internet Exchange:C I X)、N A S A科学互联网( NASA Science Internet: NSI )、S p r i n t L i n k以及欧洲 I P主干网(E B O N E)