论文部分内容阅读
计算机网络的诞生,使独立的计算资源得以共享互通。随着网络技术的发展,信息互联已成为现代科技文化发展的基本要求。互联网作为全球共享信息的载体,已成为人类社会生活必不可少的组成部分。网络流量的快速膨胀、网络功能的迭代更新以及网络业务的频繁交易都对现有网络的性能提出了全新的挑战。然而,随着光纤和高速I/O等高速链路技术的突破,路由器、控制器和防火墙等网络节点的数据包处理能力成为当前及未来高性能网络发展的主要瓶颈。面向未来网络的发展趋势,网络节点的瓶颈主要体现在三个方面:第一、作为数据包转发和网络功能的基础技术,现有的数据包查找与分类算法难以支持网络流量以及路由表和流表规模的持续扩大;第二、随着网络功能虚拟化、云计算及多路传输等技术出现,现有的数据包查找与分类算法难以支持路由表和流表的高频率更新;第三、现有的数据包查找与分类算法不兼容某些未来网络架构(如:命名数据网络)和数据包格式(如:IPv6数据包)的变化。本文面向未来网络,针对上述问题对高性能数据包查找(地址查找和名称查找)和分类技术展开研究,主要有四个方面的工作:(1)本文提出了一种全新的数据结构分层二叉搜索树,并基于散列表和分层二叉搜索树提出了一种支持快速更新的高效IPv6查找算法。根据IPv6前缀长度在路由表中的分布特点,将IPv6的前缀按照长度划归为不同的类别。每一类前缀分别利用最大公共长度的比特位进散列索引。然而,散列索引存在冲突和前缀重叠的现象,这就意味着必须对重叠的前缀进一步比较区分。事实上,重叠前缀的数量在真实路由表中并不多。为了提高查找和更新的速度,本文设计并实现了一种新的数据结构称为分层二叉搜索树;并基于散列表与分层二叉搜索树相结合的结构,设计并实现了一系列算法,包括地址查找算法,地址前缀更新算法,以及分层二叉搜索树的自平衡算法。根据前缀比特位的信息熵,进一步优化了散列函数和索引效率。该方法在地址查找、前缀更新和内存消耗上都优于同类最先进方法。(2)本文提出了范围向量的概念,并依据这个概念提出了一种基于散列函数的支持规则快速更新的高性能包分类算法。本文根据真实规则的源与目的地址前缀长度的分布将规则映射到不同的范围向量空间,数据包分类时需要在各个范围向量空间内查找,通常需要遍历所有范围向量空间。基于这个观察,本文设计并实现了一种基于范围向量的散列算法。每一个范围向量对应的散列表使用各字段的最大公共比特长度进行散列计算。范围向量散列算法具有常数级的规则更新速度。由于数据包分类是根据匹配规则的最高优先级决定,因此该算法需要搜索所有散列表。本文通过定义散列表的优先级对散列表进行优先级排序。因此,该算法可以在不降低更新性能和不增加内存消耗的前提下,进一步提高包分类的速度。(3)本文提出了一种基于冲突驱动编码的名称查找算法。命名数据网络将原有以IP地址为核心的细腰模型转变为以内容为核心的细腰模型。因此,数据包的转发也由原来TCP/IP下的地址查找转变为名称查找。然而,一个名称与一个IP地址具有很大不同。首先,名称是一系列字符的组合而IP地址是一个整数;其次,名称的长度理论上无上限而IP地址具有固定长度;最后,名称规则表的规模远大于路由表。因此,传统网络中的路由算法不能用于名称查找。现有的名称查找算法编码效率低下或查找速度慢或不支持名称更新,为此本文提出了一种高效的冲突驱动的散列编码,并结合散列表及扩展二叉搜索树提出了一种高效的名称查找算法。该算法并不需要对整个名称进行编码,而是根据冲突对名称组件逐个编码,因此可以将编码内容减到最少,从而降低编码时间。(4)多核系统越来越普遍,也将成为未来网络的基础平台。然而,现有的数据包分类算法扩展为多线程版本后,效果很难达到预期。本文根据不同算法和不同的数据结构提出了优化的多线程包分类算法框架。现有的基于软件的包分类算法大多是单线程,少数算法能够扩展到多线程,因此研究多线程包分类算法具有非常重要理论依据和应用意义。本文针对不同的算法逻辑和数据结构,合理运用数据并行模式和流水线并行模式,设计了一个通用的多线程包分类框架。同时,本文还对多线程的锁机制进行优化,利用原子操作和硬件同步原语设计无锁化多线程版本,实现真正意义上每个线程的独立运行。