一种UDP有效报文发送时序控制方法与流程

文档序号:16900504发布日期:2019-02-19 17:56阅读:1208来源:国知局
一种UDP有效报文发送时序控制方法与流程

本发明涉及网络技术领域,特别涉及一种udp有效报文发送时序控制方法。



背景技术:

随着网络技术的不断发展,网络技术也在嵌入式实时系统中得到普遍应用,为适应不同的实时应用需求,甚至还出现了各种实时协议,以确保应用的实时性;但上述实时应用基本都是在10微秒到毫秒量级的精度。

由于网络连接的便利、经济和良好扩展性,目前也用在了高速数据采集和回放系统。这类系统对有效网络报文的间隔时间控制一般都要求在纳秒级,采用过去常规的软件技术无法实现,一般需采用定制开发专用硬件如fpga来实现高精度有效网络报文发送时序控制,这种实现方式有如下缺点:

1、研制成本高昂,需要新增加非标软硬件设备,开发成本高,而且是不同应用可能需要不同的软硬件;

2、维护成本高,为了适应不同的需求,至少需要修改fpga程序,并调试测试,这需要花费大量的时间;

3、兼容性较差,网络协议比较复杂,硬件层面实现时基本是只满足部分网络协议功能,很多网络控制、管理协议无法满足要求。

还有一种方式是可以自研网卡的驱动,在驱动低层实现网络报文间隔时序的控制,但其通用性很差,也会存在协议的兼容性问题。



技术实现要素:

本发明为解决上述问题,提供一种udp有效报文发送时序控制方法,采用原始套接字,直接绕过操作系统的协议栈和低层mac,可完全控制低层网络报文的任意组包及参数修改,并且采用多线程技术将数据填充和发送分开,并各自独享1个cpu核,可确保网络全速发送,同时采用无效网络报文填充有效网络报文间的时间,达到纳秒级控制有效网络报文间的时间间隔。

为达到上述目的,本发明采用的技术方案是:一种udp有效报文发送时序控制方法,包括:

s1、软件主程序创建原始套接字,对低层网络报文组包完全控制;

s2、内存映射套接字内部发送缓冲区到用户空间;

s3、软件主程序分别创建两个线程,为填充数据线程和发射数据线程;

s4、填充数据线程根据有效网络报文的长度计算链路发送时间,并根据网络协议标准组织好报文并放入发送缓冲区,设置数据需要发送标志,填充数据线程根据有效网络报文间的间隔时间计算无效网络报文长度,并将无效网络报文并放入发送缓冲区,设置数据需要发送标志;

s5、发送数据线程不断查询发送缓冲区的发送标志是否为有效标志,如果是,将调用操作系统内核启动dma发送数据,如果没有有效的标志,将继续查询;

s6、经过上层软件按一定时序要求组织的网络报文最终经dma发送到源网卡的phy层,源网卡和目标网卡经过网络线点对点通信或是交换机互联,若是网络点对点通信,目标网卡将自动对无效报文丢弃,若是经过交换机互连,在交换层将自动对无效报文丢弃。

进一步地,原始套接字的发送缓冲区通过内存映射方式映射到用户空间,应用层软件能直接控制网络报文的发送;内存映射后将返回的地址保留,供后续所述数据填充线程访问;

进一步地,填充数据线程和所述发送数据线程固定放在2个独立cpu核上运行,该两者通过发送缓冲区中的发送标志通信;

进一步地,填充数据线程根据有效网络报文的长度计算链路发送时间和填充数据线程根据有效网络报文间的间隔时间计算无效网络报文长度对于千兆网络均是通过这一公式实现;

进一步地,填充数据线程根据有效网络报文间的间隔时间计算无效网络报文长度时需在网络报文组包阶段人为的使mac/ip/udp字段的关键参数为不符合协议要求;

进一步地,关键参数包括长度、ip校验和mac地址等。

综上所述,本发明具备以下优点:

本发明采用原始套接字,直接绕过操作系统的协议栈和低层mac,可完全控制低层网络报文的任意组包及参数修改,并且采用多线程技术将数据填充和发送分开,并各自独享1个cpu核,可确保网络全速发送,同时采用无效网络报文填充有效网络报文间的时间,达到纳秒级控制有效网络报文间的时间间隔。

附图说明

图1是本发明工作流程示意图。

具体实施方式

下面结合附图及实施例对本发明作进一步描述:

实施例1:

一种udp有效报文发送时序控制方法,网络报文的通信双方可以通过网线点对点连接,也可通过能在2层或3层交换下线速工作的交换机连接,即源网卡和目标网卡经过网络线点对点通信或是交换机互联,网络报文的发送方启动后,软件主程序先创建原始套接字,以便应用层完全控制网络报文组包过程;然后将原始套接字的发送缓冲区通过内存映射方式映射到用户空间,以便应用层软件直接控制网络报文的发送;而内存映射后将返回的地址保留,供后续数据填充线程访问发送空间用。

软件主程序分别创建两个线程,为填充数据线程和发射数据线程,两者各自独享1个cpu核,避免核的上下文切换导致的数据间隔时间的不稳定,具体的,填充数据线程不断查询可用的发送缓冲区、填充数据(包括有效网络报文和无效网络报文),并设置待发送标志,发送数据线程不断查询是否有数据需要发送。

填充数据线程和发射数据线程通过发送缓冲区中的发送标志通信。

在填充数据线程中,首先检查是否有可用的发送缓冲区,然后根据有效网络报文的长度计算链路发送时间,在千兆网络中具体通过如下公式计算:t=(8+12+lmac+lip+ludp+ldat)*8ns

其中:其中lmac是网络报文中mac头的长度,lip是网络报文中ip头的长度,ludp是网络报文中udp协议头的长度,ldat是网络报文中数据的长度;8+12=20字节是网络链路层传输数据时需要的前导数据及千兆网络报文最小时间间隔对应的数据长度,千兆情况下,8ns为内部工作时钟的周期即125mhz。

链路发送时间计算完成后,根据网络协议标准组织好报文并放入发送缓冲区,设置数据需要发送标志。

同理,无效网络报文长度同样根据上述公式和有效网络报文间的间隔时间计算,具体的,lmac、lip、ludp等都是已知的,即可算出ldat,值得注意的是,填充数据线程根据有效网络报文间的间隔时间计算无效网络报文长度时需在网络报文组包阶段人为的使mac/ip/udp字段的关键参数为不符合协议要求,改关键参数为长度、ip校验和mac地址等。

发送数据线程不断查询发送缓冲区的发送标志是否为有效标志,如果是,将调用操作系统内核启动dma发送数据,如果没有有效的标志,将继续查询,这样能确保低层是以全速在发送数据。

经过上层软件按一定时序要求组织的网络报文最终经dma发送到源网卡的phy层,而众所周知,源网卡和目标网卡经过网络线点对点通信或是交换机互联,若是网络点对点通信,目标网卡将自动对无效报文丢弃,若是经过交换机互连,在交换层将自动对无效报文丢弃,在这种方式下,无论哪种连接方式,都可使到达应用层的有效数据报文的间隔时间是均匀的、可控的,且控制有效网络报文之间的时间间隔精度可达纳秒级。

综上所述,本方式是通过硬件与软件的结合,成本低,且后期仅需要调整软件,可满足不同时序控制需求,维护成本低,且本方式兼容性好,可支持标准的上层协议如单播udp、多播udp、tcp等,还支持链路层协议。

上述实施方式只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。

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