一种ICN路由器中数据块的多源组装方法及装置
技术领域
本发明涉及通信技术领域,特别涉及一种ICN路由器中数据块的多源组装方法及装置。
背景技术
目前互联网技术与应用飞速发展,宽带化、内容化已经成为互联网前进的主要方向。据预测,未来5年,全球IP流量将增长近3倍,从2015年到2021年将增长127倍。到2021年,年度全球IP流量将到达3.3ZB。
日益增长的内容获取需求促使学术界构思将以主机为中心的通信模式转变为以内容为中心,随即提出了多种以信息为中心的网络((information-centric networking,ICN)架构。ICN网络架构有两个最重要的特征:一是路由器拥有存储能力,可以实现网内内置缓存;二是内容有全局唯一的命名标识,ICN完全抛弃了IP网络用IP地址为每个主机命名的方式,而是对内容进行命名,路由器根据命名标识进行路由和存储决策。网内缓存减少了用户获取内容的时延、节省网络带宽和缓解网络拥塞;而根据命名对内容传播和路由的方式有助于多源内容检索、内容快速传播和对移动位置的支持。
ICN网络架构中,每个文件被划分成独立可标识的小数据单元——数据块(chunk),数据块以报文的粒度在网络中进行传输,ICN路由器收到报文之后,将报文组装成完整数据块,作为用户请求一个内容的基本单元在路由器中缓存。
目前解决ICN网络架构中路由器对过路数据块进行缓存的方案主要有两种,一种是逐跳缓存,NDN(Named Data Networking,数据中心网络)是其中代表;另一种非逐跳缓存,如NetInf(Network of Information)。NetInf对过路的数据报文进行监听,根据节点状态具体判断是否缓存,只保证内容数据块在端到端之间的可靠传输,不保证逐跳间的可靠缓存。
NDN是ICN网络架构中的重要范型,NDN网络中的通信是接收者驱动的,为了获取所需要的数据,接收者需要发送一个携带有内容命名的Interest包到网络中。NDN网络路由器与传统路由器不同,它需要维护三个结构:FIB(Forwarding Information Base,转发信息库)、PIT(Pending Interest Table,未决信息表)和CS(Content Storage,内容缓存)。其中FIB表保存着内容名字与物理转发端口的对应关系,PIT表保存着到达过的未缓存命中的interest包的状态信息。
NDN路由器对网络中路过数据块的缓存采用逐跳的方式,data数据报文到达路由器之后,首先缓存到CS中,CS对data数据报文进行排序,将其组装成一个完整的数据块。对于数据块的传输,NDN一般承载在提供可靠网络传输服务的协议之上(比如TCP或NDNLP),如果data数据报文进入CS经过排序之后无法组装成一个完整的数据块,说明出现了丢包的情况,NDN路由器会向上一跳请求对应丢失数据报文的重传,以保证数据块在传输路径上逐跳的缓存成功。待NDN路由器将一个数据块完整组装并且缓存成功之后,才将数据块往下一个节点进行转发。
与NDN在中间路由器直接通过内容名字匹配查找信息的方式不同,NetInf通过内容名解析的方式来获取内容。NetInf采用订阅/发布模型,数据源作为数据发布者,将内容在NRS(Name Resolution Service,名字解析服务)注册内容名和位置信息。内容请求者在NRS中查询请求内容的名字,从而获取数据源位置信息,之后内容请求者会选择“最佳”内容源直接通信获取内容数据。
NetInf节点不维护基于内容名字的路由表,所以在传输过程中无法保证逐跳间可靠缓存,只能对随路数据块进行尽力而为的缓存。当数据块在中间节点成功缓存之后,NetInf节点会向NRS注册该数据块的名字和本节点的位置,以方便用户下一次对该数据块的请求。
逐跳缓存的方式保证了端到端内容传输过程中间节点缓存的完整性,但是针对ICN缓存操作需要线速执行的要求来说,在转发过程中对数据块提供可靠的缓存服务会影响线速转发性能,即使在数据块成功组装好之后,对数据块的签名和身份验证都是计算代价很高的操作。这一切的操作都是在转发的过程中执行的。
非逐跳的缓存方式可以将转发与缓存分离,以保证转发的线速操作,但它仍然存在组装数据块成功率低的问题。中间节点组装数据块的成功率和数据块尺寸大小成负比例关系。当数据块在底层传输时,大的数据块会按照MTU(Maximum Transmission Unit,最大传输单元)分割成更多的数据包。考虑到路由算法和实际网络的影响,数据块的尺寸越大,数据包的丢失率越高,在中间路由器上数据块组装成功的概率便越小。这样既会消耗缓存操作的资源,也会导致网络中数据块传输效率不高。
其次,由于ICN网络架构采用的是接受者驱动的通信模式,允许同一个数据块有多个发送者和接收者。当多个源在网络中传输同一个数据块时,会出现来自不同源的同一个内容的不同数据包经过同一个ICN路由器的情况。但是由于各个节点和不同协议的MTU值设置不同,导致分割的data数据包也不尽相同,目前ICN路由器无法利用来自不同源的data数据包来组装同一个内容数据块,降低了数据块的组装效率。
发明内容
本发明的目的在于克服现有技术缺陷,提出了一种ICN路由器中数据块的多源组装方法,本发明还公开了一种组装ICN数据块路由器装置。
为了实现上述目的,本发明提出了一种ICN路由器中数据块的多源组装方法,所述方法包括:
接收网络数据报文,根据数据报文头部携带的Eid字段将报文分流到不同的缓存线程;
缓存线程根据报文携带的Eid字段,查询该内容是否已在本地缓存;若该内容已经组装完整并缓存,则转发该报文;
否则,缓存线程将来自不同数据源,同属于一个内容的数据报文,放入同一块内存区间中进行组装;
保存组装好的内容数据块。
作为上述方法的一种改进,所述方法还包括:创建若干个缓存线程,每个缓存线程用于对若干个数据块进行组装和缓存。
作为上述方法的一种改进,所述数据报文头部携带的信息包括:
分组偏移量,用于指示该数据报文在内容数据块中的起始位置;
负载长度,用于指示该数据报文的负载长度;
Eid字段,用于指示该数据报文所属内容数据块的命名标识,该标识全局唯一;
数据块大小,用于指示该数据报文内容数据块的尺寸大小。
作为上述方法的一种改进,所述接收网络数据报文,根据数据报文头部携带的Eid字段将报文分流到不同的缓存线程,具体包括:
对Eid进行哈希运算,得到哈希值;
将哈希值对缓存线程数目取余;
将余数设置为分流目的线程的线程id。
作为上述方法的一种改进,所述缓存线程将来自不同数据源,同属于一个内容的数据报文,放入同一块内存区间中进行组装,具体包括:
根据报文携带的数据块大小字段,缓存线程预先分配一块内存区间用于组装数据块,并提取报文携带的Eid字段作为所述内存空间的索引;
后续报文到达后,缓存线程根据其携带的Eid字段,获得针对该内容预先分配的内存空间起始地址,加上报文携带的负载偏移量和负载长度,判断该区间内是否已有数据存在;
若所述内存区间内没有数据存在,则将报文完全拷贝存入后,转发报文;
若所述内存区间内已填充完整,则转发报文;
若所述内存区间内未填充完整,则截去报文重叠部分,将剩余未填充的部分拷贝进内存区间后,转发报文。
本发明还提出一种ICN路由器中数据块的多源组装装置,所述装置包括:分流模块、缓存线程和数据块写入模块;
所述分流模块,用于将路由器收到的报文根据其所属数据块的Eid字段分流到不同的缓存线程;
所述缓存线程,用于组装和缓存数据块;
所述数据块写入模块,用于将组装好的数据块写入到本地磁盘中。
本发明还提出一种ICN路由器,所述ICN路由器包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的方法。
与现有技术相比,本发明的优势在于:
1、本发明的方法提高了数据块(特别是属于热点内容的数据块)在路由器上的组装和缓存成功率,提高了路由器的内存利用率;
2、本发明的方法可以提高ICN路由器中数据块的组装和缓存成功率。
附图说明
图1是本发明实施例的数据块组装的场景示意图;
图2是本发明的ICN路由器中数据块的多源组装方法的流程图;
图3是本发明报文组装数据块方法的示意图;
图4是本发明ICN路由器中数据块的多源组装装置的结构框图。
具体实施方式
下面结合附图和实施例对本发明的技术方案进行详细的说明。
实施例1
本发明中ICN数据块组装方法的场景示意图如图1所示,其中用户1,2在相近的时刻对同一内容进行请求,由于实际网络路由拓扑的影响,请求被网络选择发往了离各个用户“最近”的内容源,即内容源1和2。不同位置的内容服务器1、2收到内容请求,根据自身的MTU设置,将被请求的数据块拆分成网络报文依序发送。来自不同内容服务器的数据报文,在发往内容请求者的路径中全部都经过了网络中间的ICN路由器A。此时,A利用多源的报文对同一个内容数据块进行组装。这样提高了内容数据块的组装成功率,特别是热点数据。
如图2所示,本发明的实施例1提出了一种ICN路由器中数据块的多源组装方法,包括:
步骤一、ICN路由器创建若干个缓存线程,每个缓存线程负责若干个数据块的组装和缓存任务;
步骤二、ICN路由器收到网络数据报文之后,根据数据报文携带的Eid字段将报文分往不同的缓存线程;
网络数据报文头部携带有信息包括但不限于以下四类:
(1)分组偏移量:指示该数据报文在内容数据块中的起始位置;
(2)负载长度:指示该数据报文的负载长度;
(3)Eid字段:指示该数据报文所属内容数据块的命名标识,该标识全局唯一。缓存线程根据Eid来缓存的数据块进行索引与管理。
(4)数据块大小:指示该数据报文所述内容数据块的尺寸大小。
报文根据其携带的Eid分往不同缓存线程的具体方法是:
(1)对Eid进行哈希运算,得到哈希值;
(2)将哈希值对缓存线程数目取余;
(3)将余数设置为分流目的线程的线程id。其中分流的目的是:(a)负载均衡;(b)保证属于同一个内容的数据报文进入同一个缓存线程执行组装任务。
步骤三、缓存线程收到数据报文之后,首先根据报文携带的Eid字段查询该内容是否已在所述ICN缓存路由器中缓存;若该内容已经组装完整并成功缓存,则继续转发该报文;
步骤四、若该内容在所述ICN缓存路由器中没有完成组装,缓存线程则对该内容进行多源组装。线程不对报文的数据源进行区分,将同属于一个内容的数据报文放入同一块内存区间中共同进行组装,具体包括:
(1)缓存线程根据报文携带的数据块大小字段,提前分配分配一块内存空间用于组装数据块,并提取报文携带的Eid字段作为所述内存空间的索引;
(2)后续报文到达后,缓存线程根据其携带的Eid字段,提取为该内容提前分配的内存空间起始地址,加上报文携带的起始偏移和负载长度,判断该区间内是否已有数据存在;
(3)若所述内存区间内没有数据存在,则将报文完全拷贝存入(图3中的3),执行完拷贝操作后,将报文继续转发;
(4)若所述内存区间内已被填充完整,则将报文继续转发(图3中的2);
(5)若所述内存区间内未填充完整,只有部分数据存在,则将报文截去重叠的部分,将剩余未填充的部分拷贝进内存区间中(图3中的1),执行完拷贝操作后,将报文继续转发。
同属于一个内容的数据报文长度不固定。因为根据实际网络情况,不同的数据源可能会有不同的MTU,所以数据源发送内容时,对数据块的拆分方式不唯一。
步骤五、ICN路由器将组装好的内容数据块存入本地磁盘。
实施例2
本发明中的ICN路由器中数据块的多源组装装置的结构框图如图4所示,装置包括以下模块:
(1)分流模块:用于将路由器从网卡NIC收到的报文根据其所属数据块的Eid字段分往不同的缓存线程;
(2)缓存线程:负责数据块的具体组装工作以及提供缓存服务;
(3)数据块写入模块:负责将组装好的数据块写入到本地磁盘中。
实施例3
本发明中的ICN路由器包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现实施例1的方法。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。