RIP-2的对拨号网的支持
根据前面所说到的 RIP 协议我们不难看出, RIP 进行报文刷新的基础是网络在刷新过程中一直保持连通,否则将有的路由器的报文一直不被收到,最终到达该路由器的路由将被其它路由器因超时而删除,而本路由器到其它路由器的路由亦将由于长期不被刷新而被删除。就这点来说,对于局域网和专线网来说,无疑是可行的;但对于拨号网络 ( 例如 X.25 网和 ISDN 网 ) 来说,网络在可以被拨通的情况下并非一直保持连接,自然亦不可能在不需要传送数据时因为要发送 RIP 报文而每 30 秒拨通一次网络。同时,路由信息亦可能因提供给拨号网上路由器的带宽不够而传输失败。种种情况表明,前面所描述的 RIP 协议已远远不够这种需求。
针对这种情况,我对 RIP 协议的实现作了进一步的改进和扩展,经过扩展和改进后,本文档中描述的 RIP 协议已不是传统意义上的 RIP 协议所能概括的了。
1、对拨号网路由的处理
针对拨号网上路由的特点,我们不可能象在局域网和专线网一样在拨号网上对路由进行 30 秒的定时广播,从而也就决定了我们对拨号网上的路由不能象对局域网上的路由一样进行超时处理。
正是基于这种考虑,为了保证路由的及时性和可行性的考虑,我们规定拨号网上的路由修改报文的发送在如下几种情况下进行:
· 当收到路由修改的特定的请求时;
· 当路由数据库被从别的接口收到新路由报文改变时;
· 当得知某信宿从不可达变成可达时;
· 当某接口从电路 DOWN 到电路 UP 时。
这就存在这样一个问题, RIP 报文是通过 UDP 的 520 号端口发送的,而 UDP 是不可靠的传送方式,这显然必须考虑报文传输失败的可能性。为此,我们在传送时采取了报文传送的重发和确认机制。在发送报文时,当发送完请求报文或修改报文后,如果在 5 秒钟仍未收到信宿回发过来的确认报文,重发请求报文或确认报文。如果在重发后 5 秒后仍未收到确认报文,则继续重发直到收到信宿的确认报文为止。如果在重发 10 次后,认为收到信宿的确认报文,则认为传输失败,将对应路由的 Metric 值设为 16 。在接收报文时,当收到信源发来的请求或修改报文后,要对收到的报文进行确认,并向原信源发送相应的确认报文。
如果从拨号网上下一驿站路由器收到路由修改报文,则修改报文中的路由项将一直认为是可达的直到某次发送路由报文失败。
拨号网与 局域网和专线网 对超时处理的不同也体现在路由数据库中。在路由数据库中,路由分为两种,一种是“临时性路由” ,一种是“永久性路由”。“临时性路由”针对于局域网路由和广域网专线上的路由。这种路由每 30 秒广播一次,在一定时间内没有收到路由刷新报文后,进行超时处理。“永久性路由”指的是包括拨号网上的路由,在没有收到刷新报文仍不不进行超时处理,但当对某信宿发送报文失败时则将该路由改为“临时性路由”。另外还有一种情况需要将“永久性路由”改为“临时性路由”,这将在后面说到。
2、报文格式的扩展为了更好地处理拨号网上的路由刷新,参照 RFC/1581/15822091/2092 标准,对报文格式进行了的改进和扩充修改。对报文的修改主要是支持三种新的报文分组类型,在报文命令域数值标识:
9---------Update Request 修改请求
10------- Update Response 修改响应
11--------Update Acknowledge 修改确认
同时对各类型报文添加一个报文头:
Update Request (9)
+------------------------------------------------+
| Version (1) | must be zero(3) |
+------------------------------------------------+
Update Response (10) 和 Update Acknowledge (11)