论文部分内容阅读
IPv6是由IETF设计的下一代因特网协议,目的是取代当前的因特网协议第四版(IPv4)。跟IPv4相比,IPv6除了能够解决当前的IP地址短缺问题外,还可以支持广泛类型的网络应用,支持实时投递、组播、移动性和安全性。OSPF是因特网的内部网关路由协议,采用基于链路状态算法,运行在一个自治系统内。随着IPv4向IPv6的过渡,需要对基于IPv4的OSPF协议版本2作出相应的修改,以支持新一代因特网的路由信息交换。为此,IETF在RFC2740中颁布了基于IPv6的OSPF协议版本3。
本论文研究基于IPv6的OSPF路由协议及其实现技术。论文在深入理解OSPF协议的基本概念、基于IPv6的OSPFv3协议的新特点以及协议数据单元格式的基础上,提出了一个在Linux平台上基于IPv6协议栈的OSPF路由协议软件的设计方案,包括模块划分、模块设计和算法设计,给出了逻辑框图,并完成了方案的部分实现工作。
论文采用模块化的设计方法,把基于IPv6的OSPFv3协议软件划分为协议分组收发处理、接口有限状态机、邻居有限状态机、链路状态数据库和路由处理等五个功能模块。协议分组收发处理模块与Linux内核中的TCP/IP协议栈通信,使用链表结构组织协议分组,进行协议分组的收发,并完成相应的协议数据处理;链路状态数据库内容发生变化时,进行可靠的洪泛过程,实现数据同步。接口有限状态机模块和邻居有限状态机模块接收来自其它模块的事件,实现各种状态之间的相互转化以及相应的操作。链路状态数据库模块采用二叉树结构建立和维护不同范围的链路状态数据库,并生成LSA。路由处理模块生成最短路径树,建立并更新路由表。
为了提高协议软件的性能,论文在方案设计过程中采用了一系列的关键技术和创新机制,其中包括:
(1)采用了“线程化”的实现思想,把协议的许多处理过程都实现成线程,由线程管理员控制读、写、计时等线程,通过线程队列来实现路由协议分组的处理。
(2)采用了分层实现的原则,对于每个LSA分别定义三部分数据结构:LSA公共头部、某类LSA的公共部分和LSA的内容。同时鉴于OSPFv3协议中定义了7种类型的LSA,为了简化对不同种类型LSA的操作和管理,单独定义了ospf3_lsa的数据结构和ospf3_lsa_slot{}槽位结构,使得对LSA的操作与LSA的种类无关。
(3)在有限状态机的实现中,采用了数组与事件相关联的机制,针对接口/邻居的不同状态和引起接口/邻居状态变化的事件,让数组指向不同的动作函数,即时执行相关的处理,从而提高了路由信息更新的实时性。