选路是IP最重要的功能之一。
选路的原理
IP搜搜路由表的步骤:
1).搜索匹配的主机地址
2).搜索匹配的网络地址
3).搜索默认表项
IP层进行的选路其实是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。这区别于选路决策,选路决策是一组决定把哪些路由器放入路由表的规则。IP执行选路机制,而路由守护程序则一般提供选路策略;
简单路由表
对于一个给定的路由器,可以有5种不同的标志
U:该路由可以使用
G:该路由是到一个网关,是区分直接路由和间接路由的标志,直接路由没有该标记
H:该路由是到一个主机,如果没有该标志,则该路由是到一个网络
D:该路由是由重定向报文创建的
M:该路由是已被重定向修改的
直接路由:发往直接路由的分组中不但具有明确目的端的IP地址,还具有其链路层地址;
间接路由:当分组被发往一个间接路由时,IP地址指明是目的端地址,但是链路层地址指明的是网关;
初始化路由表
每当初始化一个接口时,就为接口自动创建一个路由。对于点对点链路和环回接口来说,路由是达到主机。对于广播接口来说,如以太网,路由是达到网络的;达到主机或者网络的路由如果不是直接相连的,就必须加入路由表。
一个常用的方法是在系统引导时显式的在初始化文件中运行route命令;
其他方法是运行路由守护程序或者使用较新的路由器发现协议;
没有到达目的地的路由
如果路由表中没有默认项,而又没有找到匹配项,这时又会发生什么情况呢?取决于该IP数据报是由主机产生的还是被转发的。如果数据报是由本地主机产生的,那么就给发送该数据报的应用程序返回一个差错,或者是主机不可达差错,或者是网络不可达差错。如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。
ICMP主机与网络不可达差错
当路由器收到一份IP数据报但又不能转发时,就要发送一份ICMP“主机不可达”差错报文。
转发或不转发
一般都假定主机不转发IP数据报,除非经过特殊配置;、
ICMP重定向差错
当IP数据报应该被发送到另一个路由器R2时,收到数据报的路由器R1(R2是R1的下一站)就要发送ICMP重定向差错报文给IP数据报的发送端,即告诉发送端以后把数据报发送给R2而不是R1;
重定向一般用来让具有很少选路信息的主句逐渐建立更完善的路由表。主机启动时路由表中可以只有一个默认表项。一旦默认路由发生差错,默认路由器将通知它进行重定向,并允许主机对路由表做相应的改动。
ICMP重定向报文的接受者必须查看三个IP地址:
1).导致重定向的IP地址(???)
2). 发送重定向报文的路由器的IP地址(R1的IP地址)
3).应该采用的路由器的IP地址(R2的IP地址)
ICMP重定向报文有许多规则:
1)重定向报文只能由路由器生成,而不能由主机生成
2)重定向报文是为主机而不是为路由器使用的
路由器应该发送的只是对主机的重定向,而不是对网络的重定向;
ICMP路由器发现报文
初始化路由器表的一种方法是在配置文件中指定静态路由,这种方法经常用来设置默认路由;
另一种方法设置默认路由器是利用ICMP路由器通告和请求报文;
一般认为,主机在引导后要广播或者多播传送一份路由器请求报文。一台或者更多太路由器响应一份路由器通告报文。
另外,路由器定期的广播或多播传送他们的路由器通告报文,允许每个正在监听的主机相应的更新他们的路由表;
优先级指出该IP地址作为默认路由器地址的优先等级,值越大优先级越高;
路由器操作:
当路由器启动时,它定期的在所有广播或多播传送接口上发送通告报文,一份给定通告报文的默认生命周期是30分;
除了定期发送主动提供的通告报文外,路由器还要监听来自主机的请求报文,并发送路由器通告报文以相应主机的请求;
如果子网上有多台路由器,由系统管理员为每个路由设置优先等级;
主机操作:
主机也会发送路由器请求报文和监听路由器通告报文;