论文部分内容阅读
今天的Internet,如果一个路由器想要计算一个面向所有节点的最佳路由,那么在它的路由表中必须保持Internet上每一个有关网络的条目。大部分路由器是做不到这一点的,因为对它们来说路由表将太大。所以在这些路由器中只维护Internet上一部分子网,或者使用“默认路由”指向其它网络。但对于Internet网络传输提供商的骨干路由器这种简化是不适用的,这些路由器必须维护完成的路由表。这样,这些提供商就必须随这Internet的发展不断升级他们的配置。1989年,IETF发表了BGP协议的第一个版本,次年发表了第二版,1991发表了第三版。这些版本相应的被称为BGP-1,BGP-2,BGP-3。到目前为止最新的版本是1995年制订的BGP-4。由于在实际研究中仍然广泛使用BGP-4作为IPv6域间路由的协议来使用,并不断得到改进,尤其是在从IPv4向IPv6的过渡之中,BGP-4仍将大量使用。BGP作为一种域间路由选择协议,它的主要功能是在各实现了BGP协议地系统之间交换网络层可达性信息。它是目前不同路由域之间交换路由表的首选。由于INTERNET的快速发展, BGP需要解决诸如报文安全,更高的交互性,更快的收敛性,还有IPV6迅猛发展所出现的一些问题。域间路由协议(IDRP)是一个EGP(Exterior Gateway Protocol,外部网关协议)协议。同时IDRP是一个路径矢量协议,在OSI机构中是设计在CLNP ISO 8473协议使用,在Internet上作为EGP从BGP-4(边界网关协议版本4,RFC1771)得出。IDRP虽然未能得到广泛的使用,但也不能否认其也有自己本身的长处。在上面本人综合分析了BGP和IDRP两个协议,兼各所长,以求能找到一种更好的解决方案。由于实验环境有限,另外路由器的核心计算并未象其他一些技术为大家所共享,再者本人也相信路由器作为一种高利润的高成本的东西,最终必须走向大众化。而大众化的实现就需要象当前的LINUX一样,有某一种大家都能得到其源码的东西,大家能参与近来的东西对主流的东西进行冲击,甚至能最终替换掉后者成为主流。ZEBRA无疑也是一种可能。其符合GNU标准,大家都能阅读到它的源码,并且有不少软件的爱好者参与近来对其进行学习,对其进行升级,对其进行讨论。不少商务路由器都采用了在此软件基础上的开发自己的路由器操作系统,例如美国IP Infusion开发的“ZebOS”。因此本人主要以Linux操作系统为平台,以ZEBRA为服务器平台,编写一个基于IDRP的BGP的协议的服务实现。本人主要做了以下工作:分析BGP和IDRP两个协议,包括他们的路由算法,传输机制,报文格式,路径属性,状态机,安全机制等方面。我们通过比较两个协议,对两个协议进行结合,考虑到IDRP协议自己对流控制进行处理,而BGP协议则提供相应的179端口来实现路由域之间交换报文,流控制由底层完成,这样就无须显式地进行分片,重传,确认和排序。所以保留了TCP的机制,不过采用的端口号为180;由于BGP协议没有提供安全的认证机制,而IDRP协议中对安全的认证机制有详细的阐述。在分析的基础上,本人把IDRP协议安全认证的一些想法引进过来,提出一些解决方案,例如认证类型的确定,加密结果的附加等,对BGP协议进行相应的修改;添加了CEASE报文,使管理员能够主动的关闭连接。关闭连接过程<WP=70>需要双方发送CEASE报文和状态的迁移。另外在守护程序中能对CEASE报文进行监控,相关信息记录到LOG文件中。修改了BGP的状态机,添加了CLOSEWAIT一种状态,还有Receive_CEASE_message和CloseWait_timer_expired两种事件。并且对于CLOSEWAIT状态设置定时器,初始化为180秒;支持DIST_LIST_INCL,DIST_LIST_EXCL, TRANSIT_DELAY,RESIDUAL ERROR,PRIORITY和RD_HOP_COUNT等几种新的属性,其中DIST_LIST_INCL属性是一个知名可选属性。它包含这个UPDATE PDU中的NLRI应被分发的路由域和邦联的路由域ID的列表。DIST_LIST_EXCL是一个知名可选属性。它包含这个UPDATE PDU中的NLRI不应被分发的路由域和邦联的路由域ID的列表。DIST_LIST_INCL不能和DIST_LIST_EXCL同时出现在同一UPDATE PDU中。TRANSIT DELAY是一个知名可选的两字节长属性,用来通知某一BIS通往目的地的路径的传输延迟由这个属性值决定。RESIDUAL ERROR是一个4字节长的知名可选属性,用来通知某一BIS通往目的地的路径的剩余的错误概率由这个属性值决定。它是一个范围在0到<2^32>-1之间的一个正数。当BIS给其它路由域内的BIS重新公告它包含RESIDUAL ERROR 属性的UPDATE报文的路由时,它需要在发送给其它路由域内的BIS时更改这个属性的值。更改的值遵循下面的公式:K * (1 - ((1-(RRE/K))*(1-(RDLRE/K))))。其中 K 是常量<2^32>1, 并且表达式的结果需要向上取整。RD_HOP_COUNT是一个一个字节长的知名强制属性,用来指出本UPDATE PDU所经过的路由域的数目。在发送UPDATE报文给邻接路由域之前,BIS应对这个属性进行加1,然后放到输出UPDATE报文中的RD_HOP_COUNT域中。在ISO 8473中限制最大的RD_HOP_COUNT为256。PRIORITY是一个一字节的知名可选属性。这个域的内容是一个范围在0到14的整型。它使路径根据ISO 8473优先级参数的值区分开来。在ISO 8473中,值0是默认的正常优先级。从1到14,优先级逐渐增加?