选路是IP最重要的功能之一。图1是IP层处理过程的简单流程。需要进行选路的数据报
可以由本地主机产生,也可以由其他主机产生。在后一种情况下,主机必须配置成一个路由
器,否则通过网络接口接收到的数据报,如果目的地址不是本机就要被丢弃。
图1:IP层工作流程
图1中的路由表经常被IP访问(在一个繁忙的主机上,一秒钟内可能要访问几百次),
但是它被路由守护程序等更新的频度却要低得多(可能大约30秒一次)。
选路的原理
IP搜索路由表的几个步骤:
1) 搜索匹配的主机地址;
2) 搜索匹配的网络地址;
3) 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为0)。
匹配主机地址步骤始终发生在匹配网络地址步骤之前。
IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。这区别于选路策略,它只是一组决定把哪些路由放入路由表的规则。IP执行选路机制,而路由守护程序则一般提供选路策略。
ICMP主机与网络不可达差错
当路由器收到一份IP数据报但又不能转发时,就要发送一份ICMP“主机不可达”差错报
文(见第六章)。
ICMP重定向差错
当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差
错报文给IP数据报的发送端。这在概念上是很简单的,正如图2所示的那样。只有当主机可以选择路由器发送分组的情况下,我们才可能看到ICMP重定向报文。
图2:ICMP重定向例子
1) 我们假定主机发送一份IP数据报给R1。这种选路决策经常发生,因为R 1是该主机的默认路由。
2) R1收到数据报并且检查它的路由表,发现R2是发送该数据报的下一站。当它把数据报
发送给R2时,R1检测到它正在发送的接口与数据报到达接口是相同的(即主机和两个路由器
所在的LAN)。这样就给路由器发送重定向报文给原始发送端提供了线索。
3) R1发送一份ICMP重定向报文给主机,告诉它以后把数据报发送给R2而不是R1。
重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时路由
表中可以只有一个默认表项(在图2所示的例子中,为R1或R2)。一旦默认路由发生差错,
默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。ICMP重定向允许
TCP/IP主机在进行选路时不需要具备智能特性,而把所有的智能特性放在路由器端。显然,
在我们的例子中,R1和R2必须知道有关相连网络的更多拓扑结构的信息,但是连在LAN上的
所有主机在启动时只需一个默认路由,通过接收重定向报文来逐步学习。
ICMP重定向报文格式
ICMP重定向报文的格式如图3所示。
图3:ICMP重定向报文格式
有四种不同类型的重定向报文,有不同的代码值,如图4所示。
图4:ICMP重定向报文的不同代码值
ICMP重定向报文的接收者必须查看三个IP地址:
( 1 )导致重定向的IP地址(即ICMP重定向报文的数据,位于IP数据报的首部);
( 2 )发送重定向报文的路由器的IP地址(包含重定向信息的IP数据报中的源地址;
( 3 )应该采用的路由器IP地址(在ICMP报文中的4 ~ 7字节)。
关于ICMP重定向报文有很多规则。首先,重定向报文只能由路由器生成,而不能由主机
生成。另外,重定向报文是为主机而不是为路由器使用的。
ICMP路由器发现报文
初始化路由表的方法,可以在配置文件中指定静态路由。这种方法经常用来设置默认路由。另一种新的方法是利用ICMP路由器通告和请求报文。
一般认为,主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由
器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。