一种面向数据报文转发的高逼真链路仿真方法与流程

文档序号:14847632发布日期:2018-06-30 16:55阅读:212来源:国知局
本发明适用于网络仿真
技术领域
:,具体涉及一种面向数据报文转发的高逼真链路仿真方法。
背景技术
:::相对于互联网上层应用和底层通信技术的蓬勃发展,互联网的基本架构并没有得到同步发展,任何一种新的网络架构、概念、服务在部署到真实的网络之前,都必须经过严格的测试与验证,构建大规模、真实的、可控的实验平台,不仅能够满足新应用、新需求,也是未来互联网研究的基础。链路仿真为虚拟网络节点间建立通信链路,对网络模拟环境、网络仿真平台、实物测试床的构建具有重要意义,其在网络安全场景、卫星链路仿真、未来互联网实验平台中都有广泛的应用。现有的链路仿真综合考虑链路中带宽、延时、丢包率三个重要性能参数的并不多,即使有考虑到链路物理特性,也未能考虑到链路仿真的通用性、逼真度问题。链路仿真应用于云平台中构建大规模网络仿真平台也并不普及,常见的链路仿真方法在网络模拟器中实现,尽管可以实现对链路性能参数的仿真,但所构建的模拟环境并不能支撑实际应用系统的部署运行。网络仿真要再现目标网络的链路环境,并与外界进行实时的数据交互。一方面,仿真过程中需要使用真实的网络协议和应用程序;另一方面,数据在仿真网络内部的传输过程中需要通过链路模型。仿真系统内部的链路模型需要对带宽、延时、丢包率等物理特性进行控制,并为虚拟网络节点间通信构建灵活、透明、逼真的虚拟链路。所谓灵活,指的是链路的性能参数可任意灵活定制;所谓透明,指的是链路的性能与硬件资源的固有属性无关;所谓逼真,指的是仿真网络中的虚拟链路接近于真实网络的链路情况。技术实现要素::本发明提出一种面向数据报文转发的高逼真链路仿真方法,基于OpenStack开放云平台,针对虚拟网络节点通信所处的位置不同,分为宿主机内和跨宿主机间的链路仿真,对链路中带宽、延时、丢包率三个重要的性能参数进行仿真,支持链路的快速配置与自动化部署,可根据实际链路特性进行有针对性地设计。本发明解决上述问题的技术方案如下:S1:搭建OpenStack云平台,基于OpenvSwitch构建虚拟网络节点间通信的虚拟链路,计算机节点之间通过GRE隧道封装实现多租户之间的流量隔离,所构建的云平台由一个控制节点、一个网络节点和两个计算节点组成;S2:构建虚拟网络拓扑,该虚拟网络拓扑包括虚拟网络节点、虚拟交换机、虚拟路由器,虚拟网络节点分为全虚拟化技术下的kvm虚拟机和操作系统级虚拟化下的docker容器;S3:为了可根据链路特性进行有针对性地设计,提供链路仿真性能参数配置的接口,定义接口格式为:http://ip:port/v3.0/link_simulation,提交相关参数请求,支持链路特性的快速配置与自动化部署,接口响应POST请求,需提交的链路性能参数包括虚拟网络节点的实例名称、虚拟网络节点的MAC地址、链路带宽、链路延时、链路丢包率,该接口可通过curl发送请求配置命令:curl–d"instance_name=<instance_name>&mac=<mac>&bandwidth=<bandwidth>&delay=<delay>&loss=<loss>"http://ip:port/v3.0/link_simulation;S4:针对宿主机内的链路仿真,对于处在同一计算节点上的虚拟网络节点通信,基于队列管理规则,在数据报文到达虚拟网卡前,使数据报文进入不同类别的队列中,基于不同的队列规则,完成对链路中带宽、延时、丢包率性能参数的仿真;S5:针对宿主机内的链路仿真中kvm虚拟机间链路的带宽仿真,本发明利用kvm虚拟机所在的虚拟机管理程序提供了对虚拟网卡的带宽限制接口,实现对kvm虚拟机之间的虚拟链路的带宽限制,具体的带宽限制过程如下:(1)与虚拟机管理程序建立连接;(2)根据虚拟机实例名称,获取虚拟机所在的域,虚拟机实例名称可在OpenStack管理界面的控制台中查询到;(3)在虚拟机的xml配置文件中,根据虚拟机的MAC地址,获取虚拟机的虚拟网卡名称;(4)根据虚拟网卡名称和带宽配置参数,在虚拟机域中对虚拟机的虚拟网卡进行带宽限制,具体可选的带宽配置参数有inbound.average、inbound.burst、inbound.peak、outbound.average、outbound.burst、outbound.peak;S6:针对宿主机内的链路仿真中docker容器间链路的带宽仿真,由于docker容器目前还没有实现对容器带宽限制的策略,本发明基于htb可分类队列,采用命令配置的方式来实现,具体的带宽限制过程如下:(1)创建docker容器虚拟网卡的根队列,根队列规则为htb;(2)建立虚拟网卡根队列的根分类并设置带宽,如果需要根据不同的流量分配不同的带宽,可以在根分类上构建多个子分类;(3)如果有多个子分类,需添加具体的过滤规则,将数据报文过滤到不同的分类中;(4)添加sfq公平队列到虚拟网卡的子分类中,为不同的流量分配合理的带宽;S7:针对宿主机内的链路延时、丢包率仿真,本发明基于系统内核模块netem实现宿主机内的链路延时、丢包率仿真,netem内部存在一种可分类的队列机制,由两个数据报文队列组成:等待队列和嵌套队列,针对延时仿真,入队接口负责接收数据报文并给数据报文加上发送时间,将数据报文放置到等待队列中,定时器将数据报文从等待队列移动到嵌套队列中,针对丢包率仿真,以概率统计的方式计算出需要丢弃的数据报文,在数据报文进入队列前将其丢弃,具体的延时、丢包率仿真过程如下:(1)查询虚拟网卡根队列的规则;(2)如果链路上已经设置过延时、丢包率,则清空后再设置;(3)如果虚拟网卡上已经有带宽限制规则,则不能直接在虚拟网卡的根队列上设置延时、丢包率,需要在根分类上添加规则;(4)如果虚拟网卡上没有带宽限制规则,则利用tc调用netem模块直接在虚拟网卡上设置延时、丢包率;S8:针对跨宿主机间的链路延时仿真,由于数据报文通过底层物理网络传输,中间经过一个隧道封装的过程,需要对经过底层物理链路的传播延时进行差分补偿,链路的总延时包含了传播延时和仿真延时,链路仿真在仿真延时的过程中,并不能仿真出物理链路的延时,因此,需要根据如下公式,计算出物理链路的传播延时,然后,根据期望的链路总延时,计算出链路仿真需要仿真的延迟时间;T1为源计算节点发送数据报文的时刻,T2为目的计算节点接收到数据报文的时刻,D1为底层物理链路的传播延时,D2为数据报文在缓冲队列中的排队延时,假设D表示虚拟网络节点间通信的总延时,即数据报文从一个节点发送到另一个节点所经历的时间总和,那么D=D1+D2;具体的延时仿真过程如下:(1)对虚拟网络节点经过源计算节点发出的数据报文进行过滤,利用iptables过滤链路中指定的数据报文,将数据报文输入到NFQUEUE队列中,设置队列的序号,在FORWARD链中添加规则;(2)基于用户态对数据报文进行拦截,拦截指定序号的NFQUEUE队列来获取数据报文;(3)重新构造数据报文,利用scapy解析数据报文,获取精确到13位的毫秒级时间戳,将当前时间戳字段添加到数据报文的数据部分,重新计算数据报文的长度,删除原始数据报文的校验和使得其能够重新计算;(4)放行数据报文,使得其进入内核态继续传输;(5)当数据报文到达目的计算节点时,根据(1)、(2)中所述的方法,对数据报文进行过滤和拦截;(6)利用正则表达式匹配数据报文中的时间戳字段,重新构造数据报文,删除时间戳字段,重新计算数据报文的长度,删除原始数据报文的校验和使得其能够重新计算;(7)获取当前精确到毫秒级的13位时间戳字段,根据(6)中所匹配的时间戳字段,计算数据报文在物理链路的传播延时D1;(8)根据链路仿真的总延时D,计算出实际的仿真延时D2,其可以根据S7中所述宿主机内的链路延时仿真实现,也可以在放行数据报文前,让数据报文等待延迟D2时间;(9)放行数据报文,使得其进入内核态传输到目的虚拟网络节点;S9:针对跨宿主机间的链路带宽、丢包率仿真,采用与S5、S6、S7中相同的仿真方法,此处不再赘述。本发明的有益效果如下:1、无论是宿主机内的链路仿真还是跨宿主机间的链路仿真,都可根据链路特性,对链路性能参数灵活配置,提高了链路仿真的灵活性。2、链路仿真与硬件资源的固有属性无关,屏蔽了底层物理网络对链路造成的单一性,提高了链路仿真的透明性。3、跨宿主机间的链路仿真针对每个数据报文都考虑了数据报文在物理链路的传播延时,提高了链路仿真的逼真度。附图说明:图1面向数据报文转发的高逼真链路仿真的设计流程图图2链路仿真的总体架构图图3链路仿真的实验拓扑图图4基于队列管理规则的宿主机内链路性能参数仿真图图5基于htb队列的带宽限制流程图图6跨宿主机间的链路延时仿真流程图图7跨宿主机间的数据报文重构图图8链路带宽测试对比图图9链路延时测试对比图图10链路丢包率测试对比图具体实施方式为了更好的说明本发明的目的、具体步骤以及特点,下面结合附图对本发明作进一步详细的说明。本方法的设计流程图如图1所示,技术方案如下:S1:搭建OpenStack云平台,基于OpenvSwitch构建虚拟网络节点间通信的虚拟链路,计算机节点之间通过GRE隧道封装实现多租户之间的流量隔离,所构建的云平台由一个控制节点、一个网络节点和两个计算节点组成;S2:构建虚拟网络拓扑,该虚拟网络拓扑包括虚拟网络节点、虚拟交换机、虚拟路由器,虚拟网络节点分为全虚拟化技术下的kvm虚拟机和操作系统级虚拟化下的docker容器;S3:为了可根据链路特性进行有针对性地设计,提供链路仿真性能参数配置的接口,定义接口格式为:http://ip:port/v3.0/link_simulation,提交相关参数请求,支持链路特性的快速配置与自动化部署,接口响应POST请求,需提交的链路性能参数包括虚拟网络节点的实例名称、虚拟网络节点的MAC地址、链路带宽、链路延时、链路丢包率,该接口可通过curl发送请求配置命令:curl–d"instance_name=<instance_name>&mac=<mac>&bandwidth=<bandwidth>&delay=<delay>&loss=<loss>"http://ip:port/v3.0/link_simulation;S4:针对宿主机内的链路仿真,对于处在同一计算节点上的虚拟网络节点通信,基于队列管理规则,在数据报文到达虚拟网卡前,使数据报文进入不同类别的队列中,基于不同的队列规则,完成对链路中带宽、延时、丢包率性能参数的仿真;S5:针对宿主机内的链路仿真中kvm虚拟机间链路的带宽仿真,本发明利用kvm虚拟机所在的虚拟机管理程序提供了对虚拟网卡的带宽限制接口,实现对kvm虚拟机之间的虚拟链路的带宽限制,具体的带宽限制过程如下:(1)与虚拟机管理程序建立连接;(2)根据虚拟机实例名称,获取虚拟机所在的域,虚拟机实例名称可在OpenStack管理界面的控制台中查询到;(3)在虚拟机的xml配置文件中,根据虚拟机的MAC地址,获取虚拟机的虚拟网卡名称;(4)根据虚拟网卡名称和带宽配置参数,在虚拟机域中对虚拟机的虚拟网卡进行带宽限制,具体可选的带宽配置参数有inbound.average、inbound.burst、inbound.peak、outbound.average、outbound.burst、outbound.peak;S6:针对宿主机内的链路仿真中docker容器间链路的带宽仿真,由于docker容器目前还没有实现对容器带宽限制的策略,本发明基于htb可分类队列,采用命令配置的方式来实现,具体的带宽限制过程如下:(1)创建docker容器虚拟网卡的根队列,根队列规则为htb;(2)建立虚拟网卡根队列的根分类并设置带宽,如果需要根据不同的流量分配不同的带宽,可以在根分类上构建多个子分类;(3)如果有多个子分类,需添加具体的过滤规则,将数据报文过滤到不同的分类中;(4)添加sfq公平队列到虚拟网卡的子分类中,为不同的流量分配合理的带宽;S7:针对宿主机内的链路延时、丢包率仿真,本发明基于系统内核模块netem实现宿主机内的链路延时、丢包率仿真,netem内部存在一种可分类的队列机制,由两个数据报文队列组成:等待队列和嵌套队列,针对延时仿真,入队接口负责接收数据报文并给数据报文加上发送时间,将数据报文放置到等待队列中,定时器将数据报文从等待队列移动到嵌套队列中,针对丢包率仿真,以概率统计的方式计算出需要丢弃的数据报文,在数据报文进入队列前将其丢弃,具体的延时、丢包率仿真过程如下:(1)查询虚拟网卡根队列的规则;(2)如果链路上已经设置过延时、丢包率,则清空后再设置;(3)如果虚拟网卡上已经有带宽限制规则,则不能直接在虚拟网卡的根队列上设置延时、丢包率,需要在根分类上添加规则;(4)如果虚拟网卡上没有带宽限制规则,则利用tc调用netem模块直接在虚拟网卡上设置延时、丢包率;S8:针对跨宿主机间的链路延时仿真,由于数据报文通过底层物理网络传输,中间经过一个隧道封装的过程,需要对经过底层物理链路的传播延时进行差分补偿,链路的总延时包含了传播延时和仿真延时,链路仿真在仿真延时的过程中,并不能仿真出物理链路的延时,因此,需要根据如下公式,计算出物理链路的传播延时,然后,根据期望的链路总延时,计算出链路仿真需要仿真的延迟时间;T1为源计算节点发送数据报文的时刻,T2为目的计算节点接收到数据报文的时刻,D1为底层物理链路的传播延时,D2为数据报文在缓冲队列中的排队延时,假设D表示虚拟网络节点间通信的总延时,即数据报文从一个节点发送到另一个节点所经历的时间总和,那么D=D1+D2;具体的延时仿真过程如下:(1)对虚拟网络节点经过源计算节点发出的数据报文进行过滤,利用iptables过滤链路中指定的数据报文,将数据报文输入到NFQUEUE队列中,设置队列的序号,在FORWARD链中添加规则;(2)基于用户态对数据报文进行拦截,拦截指定序号的NFQUEUE队列来获取数据报文;(3)重新构造数据报文,利用scapy解析数据报文,获取精确到13位的毫秒级时间戳,将当前时间戳字段添加到数据报文的数据部分,重新计算数据报文的长度,删除原始数据报文的校验和使得其能够重新计算;(4)放行数据报文,使得其进入内核态继续传输;(5)当数据报文到达目的计算节点时,根据(1)、(2)中所述的方法,对数据报文进行过滤和拦截;(6)利用正则表达式匹配数据报文中的时间戳字段,重新构造数据报文,删除时间戳字段,重新计算数据报文的长度,删除原始数据报文的校验和使得其能够重新计算;(7)获取当前精确到毫秒级的13位时间戳字段,根据(6)中所匹配的时间戳字段,计算数据报文在物理链路的传播延时D1;(8)根据链路仿真的总延时D,计算出实际的仿真延时D2,其可以根据S7中所述宿主机内的链路延时仿真实现,也可以在放行数据报文前,让数据报文等待延迟D2时间;(9)放行数据报文,使得其进入内核态传输到目的虚拟网络节点;S9:针对跨宿主机间的链路带宽、丢包率仿真,采用与S5、S6、S7中相同的仿真方法,此处不再赘述。上述技术方案,在步骤S1中,本实例搭建的OpenStack云平台包括一个控制节点、一个网络节点和两个计算节点,如图2所示,虚拟网络节点间通信处在同一计算节点上,构建宿主机内的链路仿真,链路仿真程序运行在该计算节点内,虚拟网络节点间通信处在不同计算节点上,构建跨宿主机间的链路仿真,链路仿真程序分别运行在源计算节点和目的计算节点内,将网络节点的ml2_conf.ini文件中的mechanism_drivers设置为“openvswitch,l2population”,通过OpenvSwitch构建虚拟网络节点通信的虚拟链路。控制节点连接管理网的网卡IP地址为192.168.1.11,网络节点连接管理网和隧道网的网卡IP地址分别为192.168.1.21和10.0.1.21,计算节点1连接管理网和隧道网的网卡IP地址分别为192.168.1.31和10.0.1.31,计算节点2连接管理网和隧道网的网卡IP地址分别为192.168.1.32和10.0.1.32。上述技术方案,在步骤S2中,构建如图3所示的网络拓扑,VM1、VM2处于计算节点1,VM3处于计算节点2,虚拟网络节点VM1、VM2、VM3的IP地址分别为192.168.30.24、192.168.20.29、192.168.20.31,虚拟路由器两个端口的IP地址分别为192.168.20.30、192.168.30.25。上述技术方案,在步骤S3中,根据所定义的接口格式,宿主机内的链路性能参数配置程序运行在计算节点1,跨宿主机间的链路性能参数配置程序分为发送端和接收端分别运行在计算节点1和计算节点2。上述技术方案,在步骤S4中,通过所构建的网络拓扑,以VM1和VM2之间通信的链路为例说明,对宿主机内的链路性能参数进行仿真,如图4所示,在数据报文到达虚拟网卡前,根据向接口传递的参数,使数据报文进入不同类别的队列:htb队列和netem队列,基于不同的队列规则,完成对链路中带宽、延时、丢包率性能参数的仿真。上述技术方案,在步骤S5中,以链路带宽100KB/s为例,在OpenStack控制台中查看VM1、VM2的实例名称分别为instance-0000023d、instance-0000023f,分别执行virsheditinstance-0000023d、virsheditinstance-0000023f查看VM1、VM2的MAC地址,通过curl向步骤S3中的配置程序发送请求带宽设置命令,bandwidth设置为100,即可完成链路带宽配置。如果需要重新设置链路带宽,只需要重新提交一次带宽设置请求;如果需要将链路带宽恢复为初始状态,只需要将请求带宽参数设置为0提交即可。上述技术方案,在步骤S6中,可以采用与步骤S5中相同的方法提交链路带宽设置请求,其基于htb队列规则完成带宽的配置,具体的执行流程如图5所示,以命令配置VM2带宽为100KB/s例,查看VM2在计算节点1所对应的虚拟网卡为tap10e1758b-f0,首先执行命令:tcqdiscadddevtap10e1758b-f0roothandle1:htbdefault1r2q0,为虚拟网卡设备添加根队列,然后,将100KB/s转为800000bps,执行命令:tcclassadddevtap10e1758b-f0parent1:classid1:1htbrate800000bpsceil800000bitburst1600bcburst1600b,建立虚拟网卡根队列的根分类并设置带宽限制,rate是指总的带宽,ceil是指该分类可用的带宽,burst是指带宽为ceil下的突发字节数,cburst是指无带宽限制下的突然字节数。如果需要对不同的流量分配不同的带宽,可以创建多个子分类,添加具体的过滤规则将数据报文过滤到不同的子分类中,并添加公平队列确保不同的流量分配到合理的带宽。上述技术方案,在步骤S7中,以链路延时10ms、丢包率10%为例,通过curl向步骤S3中的配置程序发送请求延时、丢包率设置命令,delay、loss分别设置为10,即可完成对链路延时、丢包率的配置。如果无需同时设置链路延时、丢包率,只需要将无需设置的参数置为0提交即可;如果需要将链路延时、丢包率恢复为初始状态,只需要将请求延时、丢包率参数同时设置为0提交即可。上述技术方案,在步骤S8中,通过所构建的网络拓扑,以VM1和VM3之间通信的链路为例说明,对跨宿主机内的链路性能参数进行仿真,对于跨宿主机间的链路延时仿真,以链路延时10ms,VM1向VM3发送数据报文为例,通过curl向步骤S3中的配置程序发送请求延时设置命令,delay设置为10,即可完成对跨宿主机间的链路延时配置,其执行流程如图6所示:(1)首先,将计算机节点1视为源计算节点,计算机节点2视为目的计算节点,对源IP地址为192.168.30.24,目的IP地址为192.168.20.31的数据报文进行过滤,将数据报文输入到NFQUEUE队列中,在FORWARD链中添加该条规则,其命令为:iptables-IFORWARD–s192.168.30.24–d192.168.20.31–jNFQUEUE–queue-num1,所有包含对应源、目的IP地址的数据报文都将被放置到序号为1的NFQUEUE队列中;(2)然后,当数据报文从VM1到达计算节点1,事先已经开启监听的拦截程序会将序号为1的NFQUEUE队列上所有的数据报文拦截;(3)其次,将拦截到的数据报文重新构造,如图7所示,利用scapy解析数据报文,将当前时间戳字段添加到数据报文的数据部分末尾,重新计算数据报文的长度、校验和;(4)最后,计算节点1每操作完一个数据报文,就会放行数据报文,使得其进入内核态继续传输;(5)当数据报文从计算节点1到达计算节点2时,数据报文经过GRE隧道的封装、拆封后,事先已经在计算机节点2开启监听的拦截程序使用上述同样的方法对数据报文进行拦截。然后,利用正则表达式匹配出数据报文中的时间戳字段,重新构造数据报文,该构造过程是上述构造过程的一个逆向过程,同样,如图7所示,删除时间戳字段,重新计算数据报文的长度、校验和。在计算节点2中获取当前时间戳字段,根据所匹配到的时间戳字段,计算出数据报文在物理链路的传播延时。根据链路所需仿真的总延时10ms,计算出每个从VM1中发出的数据报文的实际仿真延时,让数据报文等待实际仿真延迟时间后,计算机节点2就会放行数据报文,使得其进入内核态传输到VM3。上述技术方案,在步骤S9中,采用与S5、S6、S7中相同的仿真方法,运行跨宿主机间的链路性能参数配置程序,提交带宽、丢包率配置参数请求即可,此处不再赘述。实验过程中分别配置链路带宽为100KB/s、200KB/s、400KB/s、600KB/s、800KB/s、1000KB/s、1200KB/s、1400KB/s,链路延时为20ms、40ms、60ms、80ms、100ms、120ms、140ms、160ms,链路丢包率为10%、15%、20%、25%、30%、35%、40%、45%、50%进行仿真测试。宿主机内的链路仿真和跨宿主机间的链路仿真的实际性能对比如图8-图10所示,可以看出整体误差小于5%,能够准确地对云平台中虚拟网络节点间通信的虚拟链路进行真实链路的物理特性仿真。本发明提出的面向数据报文转发的高逼真链路仿真方法,包括宿主机内的链路仿真和跨宿主机间的链路仿真,能够在虚拟网络中构建灵活、透明、逼真的虚拟链路,支撑大规模网络仿真平台的构建。针对宿主机内的链路仿真,基于队列管理规则仿真链路性能参数,提升链路仿真的性能。针对跨宿主机间的链路仿真,对数据报文经过底层物理链路的传播延时进行差分补偿,提高链路仿真的逼真度。该方法适用于真实的协议和应用程序,不局限于特定的仿真程序,链路的性能参数与物理链路无关,能够任意灵活定制,可根据实际链路进行有针对性地设计。上面结合附图对本发明的具体实施方式做了详细说明,但是本发明并不局限于上述实施方式,对于本领域的技术人员来说,可以在不脱离本发明宗旨的前提下做出各种变化,所做的任何修改、替换、改进,均应在本发明的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1