本发明涉及加密技术领域,具体来说,涉及一种驱动层异步通信加密、解密传输方法及其控制系统。
背景技术:
由于驱动中传统通讯过程是同步操作,只能按顺序执行才能完成对传输的数据加解密过程,这些操作会在i/o操作完成前一直处于等待中,不会把控制权立即返回给程序,无法满足多任务需求。
技术实现要素:
基于此,针对上述问题,有必要提出一种驱动层异步通信加密、解密传输方法及其控制系统。
本发明的技术方案是:一种驱动层异步通信加密、解密传输方法,包括以下步骤:
s01、加载驱动执行wskreigster函数;
s02、启动网络完成事件接收线程;
s03、执行wskconnet函数,完成io操作;
s04、回调函数把完成事件push到完成事件接收线程中;
s05、接收到连接完成事件后,异步通讯的数据通过bio_write写入数据接收缓冲区;
s06、执行wsksend函数,循环执行到函数返回0,表示ssl握手成功;
s07、发送加密数据到服务器或者接收服务器的加密数据。
加载驱动执行wskreigster函数,启动网络完成事件接收线程后执行wskconnet函数,完成io操作,使用wskreigster函数,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,回调函数把完成事件push到完成事件接收线程中接收到连接完成事件后,异步通讯的数据通过bio_write写入数据接收缓冲区;执行wsksend,循环执行到函数返回0,表示ssl握手成功;发送加密数据到服务器或者接收服务器的加密数据。
优选的,所述步骤s01中包括以下步骤:
s011、注册内核模式下wsk的socket模块;
s012、初始化内核模式下wsk的socket网络通信模块函数。
使得驱动层中可以使用异步socket通讯,不再局限于驱动层socket通讯同步操作方式,,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核。
优选的,所述步骤4中包括以下步骤:
s041、初始化socket的context,并借助bio进行异步通信数据的数据交换;
s042、执行mbedtls_ssl_handshake函数,判断函数是需要返回需要读还是需要返回需要写,如果函数返回需要读,执行wskread,如果返回需要写,通过bio_read函数把数据读入发送至步骤s07的缓冲区内。
加载驱动执行wskreigster函数,启动网络完成事件接收线程后执行wskconnet函数,完成io操作,使用wskreigster函数,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,回调函数把完成事件push到完成事件接收线程中接收到连接完成事件后,异步通讯的数据通过bio_write写入数据接收缓冲区;执行wsksend,循环执行到函数返回0,表示ssl握手成功;发送加密数据到服务器或者接收服务器的加密数据。
优选的,所述步骤s04后还包括步骤s08、发送调用函数mbedtls_ssl_write的请求信息;
s09、写入加密数据至bio类型的context;
s010、执行bio_read把数据写入发送缓冲区;
s011、执行wsksend函数将数据发送至服务器。
发送调用函数mbedtls_ssl_write的请求信息,同时写入加密数据至bio类型的context,执行bio_read把数据写入发送缓冲区,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核。
优选的,还包括以下步骤:
s11、发送解密请求至服务器;
s12、调用函数mbedtls_ssl_write,把要发送的数据写入bio类型的context;
s13、执行bio_read把数据写入发送缓冲区;
s14、执行wsksend函数将数据发送至服务器,完成握手;
s15、接收服务器的数据,执行wskrecv函数,在接收完成事件到达后,完成线程调用bio_write;
s16、写入接收的数据至数据缓冲区内;
s17、调用mbedtls_ssl_read,对数据进行解码得到明文数据。
发送解密请求至服务器,调用函数mbedtls_ssl_write,把要发送的数据写入bio类型的context,执行bio_read把数据写入发送缓冲区,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,执行wsksend函数将数据发送至服务器,完成握手;接收服务器的数据,执行wskrecv函数,在接收完成事件到达后,完成线程调用bio_write,写入接收的数据至数据缓冲区内;调用mbedtls_ssl_read,对数据进行解码得到明文数据。
为解决上述技术问题,本发明还提供了一种驱动层异步通信加密、解密传输系统,包括驱动加载模块、接收线程模块、第一执行模块、回调模块、接收缓冲模块、循环模块和信息发送模块,其中:
驱动加载模块,用于加载驱动执行wskreigster函数;
接收线程模块,:用于启动网络完成事件接收线程;
第一执行模块,用于执行wskconnet函数,完成io操作;
回调模块,用于回调函数把完成事件push到完成事件接收线程中;
接收缓冲模块,用于缓冲通过bio_write写入的异步通讯的数据;
循环模块,用于执行wsksend函数,循环执行到函数返回0,表示ssl握手成功;
信息发送模块,用于发送加密数据到服务器或者接收服务器的加密数据。
优选的,所述驱动加载模块包括注册子模块和初始子模块,其中:
注册子模块,用于注册内核模式下wsk的socket模块;
初始子模块,用于化初始化内核模式下wsk的socket网络通信模块函数。
优选的,所述回调模块包括还包括数据交换模块和判断模块,其中:
数据交换模块,初始化socket的context,并借助bio进行异步通信数据的数据交换;
判断模块,用于执行mbedtls_ssl_handshake函数,判断函数是需要返回需要读还是需要返回需要写。
优选的,还包括发送调用模块、第一写入模块、第二执行模块和第一数据发送模块,其中:
发送调用模块,用于发送调用函数mbedtls_ssl_write的请求信息;
第一写入模块,用于写入加密数据至bio类型的context;
第二执行模块,用于执行bio_read把数据写入发送缓冲区;
第一数据发送模块用于执行wsksend函数将数据发送至服务器。
优选的,还包括解密发送模块、函数调用模块、数据发送子模块、第三执行模块、接收执行模块、第二写入模块和解密模块,其中:
解密发送模块,用于发送解密请求至服务器;
函数调用模块,用于调用函数mbedtls_ssl_write,把要发送的数据写入bio类型的context;
第二数据发送模块,用于执行bio_read把数据写入发送缓冲区;
第三执行模块,用于执行wsksend函数将数据发送至服务器,完成握手;
接收执行模块,用于接收服务器的数据,执行wskrecv函数,在接收完成事件到达后,完成线程调用bio_write;
第二写入模块,用于写入接收的数据至数据缓冲区内;
解密模块,用于调用mbedtls_ssl_read,对数据进行解码得到明文数据。
本发明的有益效果是:
1、加载驱动执行wskreigster函数,启动网络完成事件接收线程后执行wskconnet函数,完成io操作,使用wskreigster函数,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,回调函数把完成事件push到完成事件接收线程中接收到连接完成事件后,异步通讯的数据通过bio_write写入数据接收缓冲区;执行wsksend,循环执行到函数返回0,表示ssl握手成功;发送加密数据到服务器或者接收服务器的加密数据。
2、使得驱动层中可以使用异步socket通讯,不再局限于驱动层socket通讯同步操作方式,,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核。
3、加载驱动执行wskreigster函数,启动网络完成事件接收线程后执行wskconnet函数,完成io操作,使用wskreigster函数,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,回调函数把完成事件push到完成事件接收线程中接收到连接完成事件后,异步通讯的数据通过bio_write写入数据接收缓冲区;执行wsksend,循环执行到函数返回0,表示ssl握手成功;发送加密数据到服务器或者接收服务器的加密数据。
4、发送调用函数mbedtls_ssl_write的请求信息,同时写入加密数据至bio类型的context,执行bio_read把数据写入发送缓冲区,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核。
5、发送解密请求至服务器,调用函数mbedtls_ssl_write,把要发送的数据写入bio类型的context,执行bio_read把数据写入发送缓冲区,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,执行wsksend函数将数据发送至服务器,完成握手;接收服务器的数据,执行wskrecv函数,在接收完成事件到达后,完成线程调用bio_write,写入接收的数据至数据缓冲区内;调用mbedtls_ssl_read,对数据进行解码得到明文数据。
6、本发明满足了驱动层中对多任务同时进行与服务器通讯数据加密传输访问的需求,使得驱动层中可以使用异步socket通讯,不再局限于驱动层socket通讯同步操作方式,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核。
附图说明
图1是本发明实施例1所述的驱动层异步通信加密、解密传输方法的流程框图;
图2是本发明实施例2所述的驱动层异步通信加密、解密传输方法的流程框图;
图3是本发明实施例3所述的驱动层异步通信加密、解密传输方法的流程框图;
图4是本发明实施例4所述的驱动层异步通信加密、解密传输方法的流程框图;
图5是本发明实施例5所述的驱动层异步通信加密、解密传输方法的流程框图;
图6是本发明实施例6所述的驱动层异步通信加密、解密传输方法的控制系统的信号流向示意图;
图7是本发明实施例7所述的驱动层异步通信加密、解密传输方法的控制系统的信号流向示意图;
图8是本发明实施例8所述的驱动层异步通信加密、解密传输方法的控制系统的信号流向示意图;
图9是本发明实施例9所述的驱动层异步通信加密、解密传输方法的控制系统的信号流向示意图;
图10是本发明实施例10所述的驱动层异步通信加密、解密传输方法的控制系统的信号流向示意图;
图11是本发明所述的驱动层异步通信加密、解密传输方法的控制系统的实施例的线程流程逻辑示意图;
附图标记说明:
1、驱动加载模块;2、接收线程模块;3、第一执行模块;4、回调模块;5、接收缓冲模块;6、循环模块;7、信息发送模块;8、注册子模块;9、初始子模块;10、数据交换模块;11、判断模块;12、发送调用模块;13、第一写入模块;14、第二执行模块;15、第一数据发送模块;16、解密发送模块;17、函数调用模块;18、第二数据发送模块;19、第三执行模块;20、接收执行模块;21、第二写入模块;22、解密模块。
具体实施方式
下面结合附图对本发明的实施例进行详细说明。
实施例1:
如图1所示,一种驱动层异步通信加密、解密传输方法,包括以下步骤:
s01、加载驱动执行wskreigster函数;
s02、启动网络完成事件接收线程;
s03、执行wskconnet函数,完成io操作;
s04、回调函数把完成事件push到完成事件接收线程中;
s05、接收到连接完成事件后,异步通讯的数据通过bio_write写入数据接收缓冲区;
s06、执行wsksend,循环执行到函数返回0,表示ssl握手成功;
s07、发送加密数据到服务器或者接收服务器的加密数据。
加载驱动执行wskreigster函数,启动网络完成事件接收线程后执行wskconnet函数,完成io操作,使用wskreigster函数,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,回调函数把完成事件push到完成事件接收线程中接收到连接完成事件后,异步通讯的数据通过bio_write写入数据接收缓冲区;执行wsksend,循环执行到函数返回0,表示ssl握手成功;发送加密数据到服务器或者接收服务器的加密数据。
实施例2:
如图2所示,本实施例在实施例1的基础上,所述步骤s01中包括以下步骤:
s011、注册内核模式下wsk的socket模块;
s012、初始化内核模式下wsk的socket网络通信模块函数。
使得驱动层中可以使用异步socket通讯,不再局限于驱动层socket通讯同步操作方式,,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核。
实施例3:
如图3所示,本实施例在实施例1的基础上,所述步骤4中包括以下步骤:
s041、初始化socket的context,并借助bio进行异步通信数据的数据交换;
s042、执行mbedtls_ssl_handshake函数,判断函数是需要返回需要读还是需要返回需要写,如果函数返回需要读,执行wskread,如果返回需要写,通过bio_read函数把数据读入发送至步骤s07的缓冲区内。
加载驱动执行wskreigster函数,启动网络完成事件接收线程后执行wskconnet函数,完成io操作,使用wskreigster函数,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,回调函数把完成事件push到完成事件接收线程中接收到连接完成事件后,异步通讯的数据通过bio_write写入数据接收缓冲区;执行wsksend,循环执行到函数返回0,表示ssl握手成功;发送加密数据到服务器或者接收服务器的加密数据。
实施例4:
如图4所示,本实施例在实施例1的基础上,所述步骤s04后还包括步骤s08、发送调用函数mbedtls_ssl_write的请求信息;
s09、写入加密数据至bio类型的context;
s010、执行bio_read把数据写入发送缓冲区;
s011、执行执行wsksend函数将数据发送至服务器。
发送调用函数mbedtls_ssl_write的请求信息,同时写入加密数据至bio类型的context,执行bio_read把数据写入发送缓冲区,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核。
实施例5:
如图5所示,本实施例在实施例1-4任意一项的基础上,还包括以下步骤:
s11、发送解密请求至服务器;
s12、调用函数mbedtls_ssl_write,把要发送的数据写入bio类型的context;
s13、执行bio_read把数据写入发送缓冲区;
s14、执行wsksend函数将数据发送至服务器,完成握手;
s15、接收服务器的数据,执行wskrecv函数,在接收完成事件到达后,完成线程调用bio_write;
s16、写入接收的数据至数据缓冲区内;
s17、调用mbedtls_ssl_read,对数据进行解码得到明文数据。
发送解密请求至服务器,调用函数mbedtls_ssl_write,把要发送的数据写入bio类型的context,执行bio_read把数据写入发送缓冲区,减轻用户态代码在i/o上等待的时间,而尽可能把时间交给内核,执行wsksend函数将数据发送至服务器,完成握手;接收服务器的数据,执行wskrecv函数,在接收完成事件到达后,完成线程调用bio_write,写入接收的数据至数据缓冲区内;调用mbedtls_ssl_read,对数据进行解码得到明文数据。
实施例6:
如图6所示,一种驱动层异步通信加密、解密传输系统,包括驱动加载模块1、接收线程模块2、第一执行模块3、回调模块4、接收缓冲模块5、循环模块6和信息发送模块7,其中:
驱动加载模块1,用于加载驱动执行wskreigster函数;
接收线程模块2,用于启动网络完成事件接收线程;
第一执行模块3,用于执行wskconnet函数,完成io操作;
回调模块4,用于回调函数把完成事件push到完成事件接收线程中;
接收缓冲模块5,用于缓冲通过bio_write写入的异步通讯的数据;
循环模块6,用于循环执行wsksend函数;
信息发送模块7,用于发送加密数据到服务器或者接收服务器的加密数据。
实施例7:
如图7所示,本实施例在实施例6的基础上,所述驱动加载模块1包括注册子模块8和初始子模块9,其中:
注册子模块8,用于注册内核模式下wsk的socket模块;
初始子模块9,用于化初始化内核模式下wsk的socket网络通信模块函数。
实施例8:
如图8所示,本实施例在实施例6的基础上,所述回调模块4包括还包括数据交换模块10和判断模块11,其中:
数据交换模块10,初始化socket的context,并借助bio进行异步通信数据的数据交换;
判断模块11,用于执行mbedtls_ssl_handshake函数,判断函数是需要返回需要读还是需要返回需要写。
实施例9:
如图9所示,本实施例在实施例6的基础上,还包括发送调用模块12、第一写入模块13、第二执行模块14和第一数据发送模块15,其中:
发送调用模块12,用于发送调用函数mbedtls_ssl_write的请求信息;
第一写入模块13,用于写入加密数据至bio类型的context;
第二执行模块14,用于执行bio_read把数据写入发送缓冲区;
第一数据发送模块15,用于执行wsksend函数将数据发送至服务器。
实施例10:
如图10所示,本实施例在实施例6-9任意一项的基础上,还包括解密发送模块16、函数调用模块17、第二数据发送模块18、第三执行模块19、接收执行模块20、第二写入模块21和解密模块22,其中:
解密发送模块16,用于发送解密请求至服务器;
函数调用模块17,用于调用函数mbedtls_ssl_write,把要发送的数据写入bio类型的context;
第二数据发送模块18,用于执行bio_read把数据写入发送缓冲区;
第三执行模块19,用于执行wsksend把数据发送出去;
接收执行模块20,用于接收服务器的数据,执行wskrecv函数,在接收完成事件到达后,完成线程调用bio_write;
第二写入模块21,用于写入接收的数据至数据缓冲区内;
解密模块22,用于调用mbedtls_ssl_read,对数据进行解码得到明文数据。
具体工作流程:
驱动层内核模式下wsk的socket使用mbedtls异步通信过程以下流程完成:
wsk内核模块初始化过程:
wsk异步通信加解密传输过程如下:
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。