[发明专利]一种基于NetFPGA的可编程虚拟路由器内部通信方法有效
申请号: | 201210546866.3 | 申请日: | 2012-12-17 |
公开(公告)号: | CN103001883A | 公开(公告)日: | 2013-03-27 |
发明(设计)人: | 徐川;赵磊;唐红;赵国锋 | 申请(专利权)人: | 重庆邮电大学 |
主分类号: | H04L12/775 | 分类号: | H04L12/775;H04L12/741 |
代理公司: | 重庆市恒信知识产权代理有限公司 50102 | 代理人: | 刘小红 |
地址: | 400065 *** | 国省代码: | 重庆;85 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 netfpga 可编程 虚拟 路由器 内部 通信 方法 | ||
技术领域
本发明涉及通信及计算机技术领域,具体是一种基于NetFPGA的可编程虚拟路由器内部通信方法。
背景技术
未来互联网体系结构、协议、算法与实现技术都需要大量的理论分析和仿真实验,更需要在实验网络系统中进行评估和验证。为了提供验证其算法和新协议的平台,保证不破坏现有的网络结构又能够利用真实的网络流量验证算法和协议,研究者们提出了可编程虚拟化路由器技术。
可编程虚拟路由器包括转发硬件和虚拟路由器两部分:转发硬件的核心是NetFPGA板卡(用于网络的可编程门阵列,由斯坦福大学开发),完成数据包接收和发送;虚拟路由器运行于操作系统为CentOS的主机上,由虚拟化软件OpenVZ(基于Linux内核和作业系统的操作系统级虚拟化技术)生成,完成路由计算和路由交换功能。转发硬件和虚拟路由器之间通过主机操作系统通信。
然而,目前对可编程路由器的研究都还停留在原型构造阶段,只是对路由器的整体架构进行了描述,没有涉及到内部的实现细节,即使是一些已经做出原型系统的设计,其着眼点也放在硬件的设计与开发上,对整体的通信过程也仅仅是作出一个概括性的描述,而没有给出一个具体可行的方案。
发明内容
本发明解决的问题是:在Linux内核支持数据包转发的基础上,提供一种虚拟可编程路由器的内部通信方法,使得虚拟路由器与网络上其他路由器、虚拟路由器与底层硬件之间正确的交换数据包。
本发明采用了以下技术方案:
一种基于NetFPGA的可编程虚拟路由器内部通信方法,包括以下步骤:捕获进入Linux内核的NetFPGA数据包,将该数据包封装后发送到虚拟路由器;经所述虚拟路由器处理后的数据包通过主机操作系统转发出去,并将路由信息部署到NetFPGA 中。
A、初始化建立以下模块:数据包入口设备检查模块;产生虚拟网卡nf的网卡虚拟模块,nf的MAC称为vMAC;数据封装模块,在数据包封装模块存放vMAC-VR映射表(虚拟网卡 - 虚拟路由器映射表,包含nf网卡MAC地址vMAC,虚拟路由器标识符VRID,虚拟路由器网卡veth的MAC地址veMAC和IP地址veIP),nfc信息表(NetFPGA板载网卡nfc的配置信息,包括网卡名称interface,MAC地址,IP地址);数据分发模块,信息接收模块。
B、在Linux内核网络协议栈入口处设置数据包入口设备检查模块,检查每一个流入Linux内核的数据包的入口设备名称。
C、如果入口设备名称为nfc则触发数据封装模块,并将该流入Linux内核的数据包缓冲区skb(数据包在Linux内核中的表现形式)和入口设备名称nfc传送到数据封装模块,由数据封装模块将skb封装到一个新的IPv4数据包,然后该新的数据包通过Linux内核发送到虚拟路由器;由NetFPGA板卡发送给主机的数据包包括三类:a.路由信息包,b.需要进行路由计算的普通数据包,c.出错数据包,a、b、c三类统称为P1。
D、如果入口设备名称不为nfc,则不作任何处理。
在步骤C之后还包括如下步骤:
C1、在数据包封装模块接到触发通知后,获取skb中的协议数据区skb->head中的MAC地址字段即dMAC,将dMAC与在vMAC-VR映射表中的表项vMAC比较,查找对应的VR(Virtual Router)信息的IP地址veIP(虚拟路由器IP地址)和MAC地址veMAC(虚拟路由器MAC地址)。
C2、如果在vMAC-VR映射表中找到对应此MAC地址的VR信息,则查找nfc信息表,查到入口设备的MAC地址nfcMAC和入口设备的IP地址nfcIP,将该skb中包含的协议数据区skb->head封装到一个新的IPv4数据包newHead中,对于步骤C中所述的三种数据包封装方法相同;否则将数据包丢弃。
C3、将步骤C中所述数据包P1中的skb->head替换为skb->newHead,替换后的数据包称为P2,替换步骤为释放skb->head,并将skb->head赋值为NULL;将skb->head指向newHead,即skb->head=newHead;重新对P2作CRC校验,然后将P2送回内核网络协议栈处理队列,数据包P2会由Linux内核自动转发到指定虚拟路由器。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于重庆邮电大学,未经重庆邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210546866.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:定位机构
- 下一篇:一种基于CORDIC算法的数据加窗系统及方法