一种基于WinPcap的AFDX协议栈构建方法与流程

文档序号:22141673发布日期:2020-09-08 13:43阅读:212来源:国知局
一种基于WinPcap的AFDX协议栈构建方法与流程

本发明涉及航空电子全双工交换式以太网(avionicsfull-duplexswitchedethernetnetwork,简称afdx)领域,具体是一种基于winpcap的afdx协议栈构建方法。



背景技术:

afdx网络是一种基于ieee802.3商用以太网的航空数据交换网络技术,afdx网络采用虚拟链路(virtuallink,vl)对网络上数据传输的带宽进行有效合理的分配和隔离,使用带宽分配间隔(bandwidthalllcationgap,bag)来控制同一条虚拟链路上以太网数据帧的最小时间间隔,增加了网络的确定性,有效的预防了网络阻塞及拥挤的问题。

winpcap(windowspacketcapture)是windows平台下一个免费、公共的网络访问系统。winpcap可以为应用程序提供访问网络底层的能力,它用于windows系统下直接的网络编程。winpcap特别适用于网络及协议分析、网络监控等领域。通过调用winpcap接口可以实现原始数据流的收发,应用可以直接控制mac层的一些信息。windows操作系统提供了ndis(networkdriverinterfacespecification)接口使得开发者可以通过编写内核驱动程序对网络通信进行控制。

现阶段对于afdx网络的测试,一般都需要定制专业的afdx测试设备,通过afdx板卡进行数据的发送与接收,且商用板卡依赖于传统插槽式接口安装到台式主机上进行工作,移动不便,价格昂贵,且升级服务困难。

afdx协议基于以太网协议进行了很多定制工作,从mac层来看,afdx协议中多出了sequencenumber用以校验帧传输的完整性和有序性,而且引入了vl号来构建目的mac地址,这就意味着原有的系统自带的tcp/ip协议接口无法使用,需要自行重新构建完整的协议栈。



技术实现要素:

针对现有技术存在的问题,本发明的发明目的在于提供了一种基于winpcap的afdx协议栈构建方法。通过对afdx五元组信息、payload、sn的合理配置,可以在不使用afdx板卡的基础上完成符合afdx协议数据帧的发送,并通过ndisfilter进行干扰帧过滤,使系统只发送符合afdx协议的数据帧。利用winpcap捕获网卡中的数据帧,通过ndisfilter进行干扰帧过滤,使系统接收到的都是满足afdx要求的数据帧,并解析数据帧中的信息。既节省购买专业afdx板卡的成本又增加了便携性,为afdx网络的测试提供一种通用、灵活、方便、低成本的途径。

本发明的发明目的通过以下技术方案实现:

一种基于winpcap的afdx协议栈构建方法,在应用层完成afdx数据帧的构建、发送与接收、解析。其中,在afdx数据帧的发送与接收时,首先使用winpcap库函数pcap_findalldevs_ex()查找目标设备的网卡设备;再通过pcap_open()打开选中的网卡,同时设置捕获数据包的有效保留长度、读取时间等参数;在网卡成功打开的基础上,调用pcap_sendpacket()发送afdx数据帧,调用pcap_next_ex()接收afdx数据帧。

在afdx数据帧的构建时计算载荷中的长度信息以及udp头、ip头和mac头,同时,使每条虚拟链路上的第一个afdx数据帧的sequencenumber号为0,之后从1-255不断循环,通过维护一张哈希表来存储每条vl的sequencenumber,每次调用winpcap的发送函数时通过查哈希表并加1的方式添加sequencenumber。

在afdx数据帧的解析时按afdx数据帧的格式,从mac层开始,逐层的进行数据解析,最终获得接收afdx数据帧的五元组信息和有效载荷信息。

在内核层一部分支持应用层的api函数,一部分完成ndisfilter过滤。

在ndisfilter过滤时,对于每一个发送和接收的以太网帧,通过判断开头四个字节来决定是否是afdx帧,如果是,则继续调用api进行下一层的收发,如果不是,则调用api伪装收发已完成。

在物理层上通过目标设备的网卡和网线实现以太网数据传输。

本发明的有益效果在于:

本发明可以在不使用afdx板卡的基础上完成符合afdx协议数据帧的接收和发送,完成afdx网络的测试验证活动,既节省购买专业afdx板卡的成本又增加了便携性,为afdx网络的测试提供一种通用、灵活、方便、低成本的途径。

本发明利用部署方便,无需额外硬件成本,一般的笔记本和台式机均可广泛部署。商用板卡单价在十万人民币以上,且软件需要另外收费,单套软件收费在十万人民币以上,软硬件之间相互绑定,不允许自由迁移,大量部署会消耗高额成本,因此,本发明可以节省购买afdx专用板卡及配套软件的相关费用。

附图说明

图1基于winpcap的afdx协议栈构建方法结构图;

图2afdx协议栈构建示意图;

图3winpcap操作流程图;

图4ndisfilter操作流程图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。

本实施例涉及一种基于winpcap的afdx协议栈构建方法,其结构如图1所示,可以分为应用层、内核层、物理层。

一、应用层

应用层完成afdx数据帧的构建、发送与接收、解析等功能。

afdx数据帧的构建:

参见图2所示的afdx数据帧的结构,源mac地址包含三部分:固定位、用户自定义位以及a/b网标识位。对于接口a/b网的标识,001标识a网数据,010标识b网数据。源mac地址可以设计为:02:00:00:xx:xx:00:20或02:00:00:xx:xx:00:40。目的mac地址包含两部分,固定域和虚拟链路标识。固定域的十六进制设置为:03:00:00:00,虚拟链路号由每个发送端口进行设置。目的mac地址可以设计为:03:00:00:00:xx:xx。ip源地址可设计为:0a:xx:xx:xx,ip目的地址设计为:0a:xx:xx:xx。对于udp源端口和目的端口由用户给定。地址中的xx由配置信息确定。

afdx网络的五元组信息为源端口、目的端口、源ip地址、目的ip地址、虚拟链路号。afdx数据帧五元组信息和数据载荷既可以手动填写也可以在选项框中选择。在信息输入时,需要对输入的各项内容进行检查,包括输入的ip等信息是否符合格式规范,数值是否越界,并检查输入的载荷信息是否符合协议规范,针对问题给出提示;当输入内容有效时,系统自动计算载荷中的长度信息以及udp头、ip头和mac头,并自动组成一个完整的afdx数据帧。mac头、ip头和udp头的信息使用以下结构进行存储:

typedefstruct

{

quint8desmac[6];

quint8srcmac[6];

quint8nettype[2];

}macheader;

typedefstruct

{

quint8versionandheaderlen;

quint8servicetype;

quint8totallenofpacket[2];

quint8identifier[2];

quint8flagandfragmentoffset[2];

quint8timetolive;

quint8higherlayerprotocol;

quint8headerchecksum[2];

quint8srcip[4];

quint8dstip[4];

}ipheader;

根据arinc664协议,sequencenumber基于vl不断变化,在每条vl上的第一帧sequencenumber号为0,之后从1-255不断循环。通过维护一张哈希表来存储每条vl的sequencenumber,每次调用winpcap的发送函数时通过查表并加1的方式添加sequencenumber。

数据帧的校验和,通过程序计算进行填充。其他不变的字段填充默认值。

afdx数据帧的发送与接收:

参见图3,首先使用winpcap库函数pcap_findalldevs_ex()查找测试设备的网卡设备(无线连接、本地连接等);通过pcap_open()打开选中的网卡,同时设置捕获数据包的有效保留长度、读取时间等参数;在网卡成功打开的基础上,调用pcap_sendpacket()发送afdx数据帧,为了便于组包数据的mac头、ip头、udp头等信息都是分开定义的,在发送之前,需要按照顺序将数据打包成一个packet进行发送;利用pcap_next_ex()接收到的数据都是一个完成packet,应依据afdx协议栈的格式,按照每段的字节长度进行数据包解析,最终获得接收数据的五元组信息和有效载荷。

afdx数据帧的解析:严格afdx数据帧的格式,从mac层开始,逐层的进行数据解析,最终获得接收数据帧的五元组信息和有效载荷信息。

二、内核层

内核层一部分支持应用层的api函数,一部分完成ndisfilter的过滤功能。

ndisfilter过滤:在网络通讯时,应用会自动调用相关服务进行服务器查找等操作,这个过程会产生很多以太网帧。为了避免网络拥挤和错误信息的收发,通过ndisfilter进行干扰帧的过滤。对于每一个发送和接收的以太网帧,通过判断开头四个字节来决定是否是afdx帧,如果是,则继续调用api进行下一层的收发,如果不是,则调用api伪装收发已完成,即跳过下一层直接返回。

如图4所示的ndisfilter操作流程图,使用filterdriver过滤网络帧需要在框架提供的filtersendnetbufferlists()函数中对发送帧进行过滤,对于每一个要发送的以太网帧,通过判断开头四个字节是否是{0x03,0x00,0x00,0x00}来决定是否是afdx帧,如果是,则继续调用ndisfsendnetbufferlists()进行下一层的发送,如果不是,则调用ndisfsendnetbufferlistscomplete()伪装发送已完成,即跳过下一层的发送直接返回。在接收过程中,ndisfilter的操作与发送类似。

三、物理层

物理层是实际发送数据的以太网络,以太网数据的收发通过目标设备的网卡和网线实现。

可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1