IP选路
引言
选路是IP最重要的功能之一。
主要目的:了解单个IP层如何作出路由决策。
选路的原理
IP搜索路由表的几个步骤:
- 搜索匹配的主机地址
- 搜索匹配的网络地址
- 搜索默认表项
IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。
这区别于选路策略,它只是一组决定把哪些路由放入路由表的规则。
简单路由表
netstat -r列出路由表,-n以数字格式打印出IP地址。
从左到右分别是目的IP地址、网关(下一站路由器的IP地址,如果是本地计算机直接连接到的网络,网关通常是本地计算机对应的网络接口)、标志、参考记数Refcnt、发送的分组数use、本地接口名字
五种标志:
以下的“该路由”指的是目的地址所代表的主机。
- U 该路由可以使用
- G 该路由是到一个网关(路由器)。如果没有该标志,说明目的地是直接相连的。(意思是说没有G标志的话,就直接发到目的地,有的话就是发到中间路由)
- H 该路由是到一个主机,目的地址是一个完整的主机地址。没有H标志的话,目的地址是一个网络号或者网络号+子网号。
- D 该路由是由重定向报文创建的。
- M 该路由已被重定向报文修改。
标志G很重要,区分了“间接路由”和“直接路由”。发往直接路由的分组包含目的地址的IP和链路层地址。发往间接路由的分组包含目的地址的IP,但链路层地址为间接路由的地址。
- 参考记数Refcnt:正在使用路由的活动进程个数。
- use:通过该路由发送的分组数。
- Interface:本地接口的名字。环回接口的名字为lo0。默认路由为emd0。
初始化路由表
一个常用的方法是在系统引导时显式地在初始化文件中运行route命令:
route add default sun 1
route add slip bsdi 1
第3个参数代表目的端,第4个参数代表网关(路由器),最后一个参数代表路由的度量。当度量值>0时要为该路由设置G标志,否则不设置。
没有到达目的地的路由
如果路由表中没有默认项,而又没有找到匹配项。这时会发生什么情况呢?
如果数据报是本地主机产生的,那么就发送该数据报的应用程序返回一个差错,或是“主机不可达差错”或是“网络不可达差错”。如果是被转发的数据报,那么就给原始发送端发送一份ICMP主机不可达的差错报文。
ICMP主机与网络不可达差错
当路由器收到一份IP数据报但又不能转发时,就要发送一份ICMP“主机不可达”差错报文。
当接通SLIP链路启动时,就要在路由表中增加一项实用SLIP链路的表项,而当断开时则删除该表项。
ICMP重定向差错
当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。
只有当主机可以选择路由器发送分组的情况下,我们才可能看到ICMP重定向报文。
- 主机发送一份IP数据报给默认路由R1。
- R1检查路由表,发现R2是发送该数据报的下一站。当它把数据报发给R2时,R1检测到它正在发送数据报的接口与数据报到达R1的接口是相同的(即主机和两个路由器所在的局域网LAN)。
- R1发送一份ICMP重定向报文告诉主机,您以后直接发给R2就好了,别再发给我了。
重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。
重定向报文创建的路由,标志带有D。
更多的细节
ICMP重定向报文的接受者必须查看三个IP地址:
- 导致重定向的IP地址(目的IP?)
- 发送重定向报文的路由器的IP地址
- 应该采用的路由器IP地址
ICMP路由器发现报文
初始化路由表的方法:
- 通过在配置文件中指定静态路由,这种方法常用来设置默认路由。
- 利用ICMP路由器通告和请求报文。
主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,允许每个正在监听的主机相应地更新它们的路由表。
- 主机在引导期间一般发送三份路由器请求报文,每3秒钟发一次。一旦接收到一个有效的通告报文就停止发送请求报文。
- 只要有一般的默认路由器,该路由器就会每隔10分钟发送通告报文,报文的生命周期是30分钟。
- 路由器发现报文一般由用户进程(守护进程)创建和处理。