1、输入处理:主要是指路由器协议软件对在 520 号 UDP 端口收到的数据报进行的处理。 对于输入处理,首先必须先作一定格式检查,检查通过后,再分别对几种输入消息做相应的处理。
请求报文:路由器在开始运行时,为了从邻机处获取路由表的初始值,通常会发一个请求。报文的 Command 字段为 (request) 。对所有或部分路由表的请求,一般以广播
形式从 520号 UDP 端口发送。实际中,这种请求有两种格式:请求获取路由表的全部和请求获取路由表的某些特定路由项。
路由软件先逐个路由项地处理请求,如果没有任何路由项,也就没有响应;如果请求中恰好只有一个路由项,并且 address family identifier 为 0 , metric 为 16 ,则表示需要接收方发送所有路由表的请求;除此之外,则是要求部分路由,处理很简单,沿着请求路由项表一个一个看,对于每个路由项,在主机路由数据库中查找,如果找到,则将该路由的 metric 值填入数据报的 metric 字段,如果没有,则向其中填 16 。一旦所有路由项均已处理,将 command 字段设为响应 (response) ,并将该数据报发回其来自的端口。注意,根据请求是否关于指定的一批目的地,还是关于整个路由表,处理有所不同。如果关于整个路由表,输出作普通的处理即可,包括水平分割和子网隐藏,因此来自路由表的某些路由项将被隐藏;如果是指定路由项,则将查找结果返回,不作水平分割,如果需要还要返回子网信息。
2、响应报文 :因为指定查询、路由修改等原因而收到响应。
不论收到什么样的响应, RIP 处理程序就开始更新它的路由表。路由表的每一项至少都要包括如下内容:
目的站点的地址;
通往目的站点的量度值;
“下一个路由器”的地址;
“最近更新过”的标志;
几个定时器。
因为处理响应可能修改主机路由表,所以必须作严格的有效性检查。对于
RIP Veon1 数据报,对 must be zero 域必须进行查零处理,对 RIP Version2 数据报则可忽略。数据报验证有效后,还要对其路由项逐个进行验证。全部通过后,我们设置 metric = MIN ( metric + cost , 16 ) , 16 代表无限长,然后检查是否已有路由到达该地址,如果没有,则加入路由表,但是如果 metric 是无限长,则不要将其加入路由表;如果现有路由不比新加的路由差,我们也不将其加入路由表。对此,需要执行以下动作:
根据收到的数据报设置目的地和 metric
根据数据报的来源主机设置路由器
为该路由设置超时值,如果垃圾回收定时器正在运行,将其停止
设置路由改变标志,给输出进程发信号,触发一次修改
如果现存一个路由,首先比较路由器,如果来自同一路由器,对超时值重新进行初始化,然后比较 metric 。如果数据报来自与现存路由同样的路由器且新的 metric 值与旧的不同,或者新的比旧的低,进行如下动作:
将新的 metric 填入,并将该路由器设置为数据报的来源
为此路由初始化超时值
设置路由改变标志,给输出进程发信号,触发一次修改
如果新 metric 是 16 ,启动删除进程 ( 只是在 metric 刚刚被设为 16 时启动 )
如果新的 metric 值与旧的相等,除了重新初始化超时值外什么也不干
( 二 ) 输出处理:用于产生包含全部或部分路由表的响应信息的处理,可能由于输入进程发现请求或路由修改而触发。
先看后两种情况下如何选择目的地址。如果一个响应要发送给所有目的地,则响应信息发送给每个点到点连接的网络的对端,而且响应在支持广播的网络上进行广播。但是如果网络不支持广播,或者在沉默的路由器,就有必要指定一张实际的临近主机和路由器表,显式地向每一个发送数据报。触发的修改因为两个方面需要处理:
· 触发的修改在容量有限或有许多路由器的网络上可能导致格外大的负载,因此协议要求实现方在限制触发式修改出现的频率上采取一定的措施,触发式修改发送后,需要随机地将一个定时器设置成 1 到 5 秒,如果在定时器超时前发生其它修改,需要到定时器超时才触发其中之一,然后定时器再随机地设置成 1 到 5 秒,触发式修改可能被一般修改所禁止;
· 触发式修改可能不必包括整个路由表,原则上说,只有改变过的路由才需要包括,作为触发式修改一部分的信息至少包括设置了路由修改标志的路由,也可以包括附加路由和全部路由。如果完整的修改需要多个数据报,则发送全部路由极有可能被打断;而触发式修改处理时,需要产生每个直连网络的信息。产生触发式修改或一般修改时,都需要进行水平分割操作。
如果产生输出的同时也允许输入处理,则必须建立相应的互斥机制,产生触发式修改信息时,路由改变标志不得因处理输入而改变。触发式修改与其它修改的唯一不同之处在于:可能会忽略某些改变过的路由,今后推出的其它机制恐怕要适应触发式修改。(完)