需要进行选路的数据报,可能是本机产生,也可能是通过网络接口产生的。对于后者,主机必须配置成路由器,否则如果目的地址不是本机,则会将数据包丢弃。
路由表可能被路由器守护进程,route命令和ICMP重定向报文修改。
(1) 搜索匹配的主机地址
(2) 搜索匹配的网络地址
(3) 所有默认表项
IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。IP执行选路机制,而路由守护进程则一般提供选路策略。
3.1 路由表初始化
每当初始化一个接口时(通常是用ifconfig来设置接口地址)就为接口自动创建一个直接路由(metric为1,数据包中的目标IP和MAC为此路由器的IP和MAC)。
一些系统还允许在某个文件中指定默认的路由器,于是在每次重启系统时,都要在路由表中加入此默认项。
初始化路由表的其他方法是运行路由守护程序,或者采用较信的路由器发现协议。
3.2重定向学习
1) 我们假定主机发送一份I P数据报给R 1。这种选路决策经常发生,因为R 1是该主机的默认路由。
2) R1收到数据报并且检查它的路由表,发现R 2是发送该数据报的下一站。当它把数据报发送给R 2时,R 1检测到它正在发送的接口与数据报到达接口是相同的(即主机和两个路由器所在的L A N)。这样就给路由器发送重定向报文给原始发送端提供了线索。
3) R1 发送一份I C M P重定向报文给主机,告诉它以后把数据报发送给R 2而不是R 1。重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。主机启动时路由表中可以只有一个默认表项(在图9 - 3所示的例子中,为R 1或R 2)。一旦默认路由发生差错,默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。I C M P重定向允许T C P / I P主机在进行选路时不需要具备智能特性,而把所有的智能特性放在路由器端。
3.3发现报文学习
主机在引导以后要广播或多播传送一份路由器请求报文。一台或更多台路由器响应一份路由器通告报文。另外,路由器定期地广播或多播传送它们的路由器通告报文,
允许每个正在监听的主机相应地更新它们的路由表。
(1) 路由器行为
当路由器启动时,它定期在所有广播或多播传送接口上发送通告报文。准确地说,这些通告报文不是定期发送的,而是随机传送的,以减小与子网上其他路由器发生冲突的概率。
除了定期发送主动提供的通告报文以外,路由器还要监听来自主机的请求报文,并发送路由器通告报文以响应这些请求报文。
如果子网上有多台路由器,由系统管理员为每个路由器设置优先等级。例如,主默认路由器就要比备份路由器具有更高的优先级。
(2) 主机行为
主机在引导期间一般发送三份路由器请求报文,每三秒钟发送一次。一旦接收到一个有效的通告报文,就停止发送请求报文。
如果路由表中没有默认项,而又没有找到匹配项,这时会发生什么情况呢?
结果取决于该I P数据报是由主机产生的还是被转发的(例如,我们就充当一个路由器)。
如果数据报是由本地主机产生的,那么就给发送该数据报的应用程序返回一个差错,或者是“主机不可达差错”或者是“网络不可达差错”。如果是被转发的数据报,那么就给原始发送端发送一份I C M P主机不可达的差错报文。
当路由器收到一份I P数据报但又不能转发时,就要发送一份I C M P“主机不可达”差错报文。
一般都假定主机不转发I P数据报,除非对它们进行特殊配置而作为路由器使用
大多数伯克利派生出来的系统都有一个内核变量i p f o r w a r d i n g,或其他类似的名字(参见附录E)。一些系统(如B S D / 3 8 6和S V R 4)只有在该变量值不为0的情况下才转发数据报。
SunOS 4.1.x允许该变量可以有三个不同的值:- 1表示始终不转发并且始终不改变它的值; 0表示默认条件下不转发,但是当打开两个或更多个接口时就把该值设为1;1表示始终转发。
Solaris 2.x把这三个值改为0(始终不转发)、1(始终转发)和2(在打开两个或更多个接口时才转发)。