一、简介
选路是IP最重要的功能之一。IP层工作流程如下所示:
二、选路的原理
IP搜索路由表的几个步骤为:
(1)搜索匹配的主机地址;
(2)搜索匹配的网络地址;
(3)搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为0)。
匹配主机地址步骤始终发生在匹配网络地址步骤之前。IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。这区别于选路策略,它只是一组决定把哪些路由放入路由表的规则。IP执行选路机制,而路由守护程序则一般提供选路策略。
netstat -r命令可以查看路由表。
如果路由表中没有默认项,又没有找到匹配项。如果该IP数据报由本机产生,则给发送该数据报的应用程序一个差错,或者是“主机不可达差错”或者是“网络不可达差错”,如果该数据报是被转发的,那么就给原始发送端发送一份ICMP主机不可达差错报文。
三、ICMP主机与网络不可达差错
当路由器收到一份IP数据报但又不能转发时,就要发送一份ICMP“主机不可达”差错报文。
四、ICMP重定向差错
当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。
ICMP重定向允许TCP/IP主机在选路时不需要具备智能特性,而把所有的智能特性放在路由器端。
ICMP重定向报文的接收者必须查看三个IP地址:
(1)导致重定向的IP地址(即ICMP重定向报文的数据位于IP数据报的首部);
(2)发送重定向报文的路由器的IP地址(包含重定向信息的I P数据报中的源地址;
(3)应该采用的路由器IP地址。
在生成ICMP重定向报文之前这些条件都要满足:
(1)出接口必须等于入接口;
(2)用于向外传送数据报的路由不能被ICMP重定向报文创建或修改过,而且不能是路由器的默认路由;
(3)数据报不能用源站选路来转发;
(4)内核必须配置成可以发送重定向报文。
为防止路由器或主机的误操作,以及恶意用户的破坏,导致错误地修改系统路由表,在修改路由表之前要作一些检查
(1)新的路由器必须直接与网络相连接;
(2)重定向报文必须来自当前到目的地所选择的路由器;
(3)重定向报文不能让主机本身作为路由器;
(4)被修改的路由必须是一个间接路由。
关于重定向最后要指出的是,路由器应该发送的只是对主机的重定向,而不是对网络的重定向。子网的存在使得难于准确指明何时应发送对网络的重定向而不是对主机的重定向。只当路由器发送了错误的类型时,一些主机才把收到的对网络的重定向当作对主机的重定向来处理。
五、ICMP路由器发现报文
初始化路由表的方法,一种是在配置文件中指定静态路由,这种方法经常用来设置默认路由。另一种方法时利用ICMP路由器通告和请求报文。一般,主机在引导后广播或多播传送一份路由器请求报文,一台或多台路由器响应一份路由器通告报文。这一广播或多播路由器请求报文的行为在路由器启动后周期性的进行,一般周期在450秒和600秒间随机选择,以免与子网上其他路由器产生冲突。一个给定的通告报文默认生命周期是30分钟。