IP选路
选路是IP最重要的功能之一,图1是IP层处理过程的简单流程。
图1 IP层工作流程
路由表中包含的信息决定了IP层所做的所有决策。列出了IP搜索路由表的几个步骤:
- 搜索匹配的主机地址;
- 搜索匹配的网络地址;
- 搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为0)。
IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。选路策略只是一组决定把哪些路由放入路由表的规则。IP执行选路机制,而路由守护程序则提供选路策略。
如果路由表中没有默认项,而又没有找对匹配项时,会发生什么情况?
如果数据报是由主机产生的,那么就给发送该数据报的应用程序的应用程序返回一个差错,或者是“主机不可达差错”或者是“网络不可达差错”。如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。
只有当主机可以选择路由器发送分组的情况下,才可能看到ICMP重定向差错报文(如图2所示):
- 假定主机发送一份IP数据报给R1(R1是该主机的默认路由);
- R1收到数据报并且检查它的路由表,发送R2是发送该数据报的下一站。当它把数据报发送给R2时,R1检测到它正在发送的接口与数据报到达端口是相同的(即主机和两个路由器所在的LAN);
- R1发送一份ICMP重定向报文给主机,告诉它以后把数据报发送给R2而不是R1。
图2 ICMP重定向的例子
ICMP重定向报文的接收者必须查看三个IP地址:
- 导致重定向的IP地址(即ICMP重定向报文的数据位于IP数据报的首部);
- 发送重定向报文的路由器的IP地址(包含重定向信息的IP数据报中的源地址);
- 应该采用的路由器IP地址。
ICMP重定向报文只能由路由器生成,而不能由主机生成。另外,重定向报文是为主机而不是为路由器使用的。
在4.4 BSD系统中,在生成ICMP重定向报文之前要满足下列条件:
- 出接口必须等于入接口;
- 用于向外传送数据报的路由不能被ICMP重定向报文创建或修改过,而且不能是路由器的默认路由;
- 数据报不能用源站选路来转发;
- 内核必须配置成可以发送重定向报文。
在4.4 BSD主机收到ICMP重定向报文后,在修改路由表之前要做一些检查:
- 新的路由器必须直接与网络相连接;
- 重定向报文必须来自当前到目的地所选择的路由器;
- 重定向报文不能让主机作为路由器;
- 被修改的路由必须是一个间接路由。
需要注意,路由器应该发送的只是对主机的重定向(代码1或3),而不是对网络的重定向。
初始化路由表的方法:
- 在配置文件中指定静态路由,一般都是用来设置默认路由器;
- 利用ICMP路由器通告和请求报文。