CN103607442B - 一种网络数据的转发方法、模块及系统 - Google Patents
一种网络数据的转发方法、模块及系统 Download PDFInfo
- Publication number
- CN103607442B CN103607442B CN201310566650.8A CN201310566650A CN103607442B CN 103607442 B CN103607442 B CN 103607442B CN 201310566650 A CN201310566650 A CN 201310566650A CN 103607442 B CN103607442 B CN 103607442B
- Authority
- CN
- China
- Prior art keywords
- data
- network
- forwarding
- network data
- channel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明适用于云存储技术领域,提供了一种网络数据的转发方法、模块及系统,所述方法包括:网络数据的转发模块从应用层模块获取数据输入通道与数据输出通道之间的绑定信息;读取数据输入通道的网络数据,所述数据输入通道是网络数据的转发服务器与数据源服务器之间的数据传输通道;根据所述绑定信息查找与所述数据输入通道绑定的数据输出通道,所述数据输出通道是网络数据的转发服务器与用户终端之间的数据传输通道;转发所述网络数据至所述数据输出通道;所述网络数据的转发模块位于所述网络数据的转发服务器的操作系统的内核层。本发明避免了用户层的参与,节省了大量的内存拷贝开销和系统调用开销,提高了整个系统运行效率。
Description
技术领域
本发明属于云存储技术领域,尤其涉及一种网络数据的转发方法、模块及系统。
背景技术
目前,云存储已逐步成为大型应用系统后台数据存储的首选技术。基于云存储的海量存储能力,其应用非常广泛,其中之一就是视频点播系统。基于云存储的视频点播系统,一般会在云的边缘架设许多视频应用服务器,比较流行的有基于实时流传输协议(Real Time Streaming Protocol,RTSP)协议的视频点播服务器,通过此服务器向最终用户提供视频服务。
但是随着点播用户数量的不断增加,视频点播服务器的性能将会出现瓶颈。视频点播服务器的主要功能是接收用户请求,然后从云存储获取相应的视频数据,最后将视频数据转发给最终用户。从上可以看出,视频点播服务器的大部分时间,其实是在做一个视频数据转发的事情。
终所周知,目前大多数应用服务器是基于应用层开发的,应用层通过系统调用获取操作系统提供的各种服务。
常用的x86体系结构下,Windows系统调用一般通过两种方式实现。一种是通过系统服务中断int0x2e方式,另一种是快速系统调用sysenter方式。无论哪种方式都无法避免用户空间和内核空间之间的数据拷贝和系统切换开销。
下面以一次Windows网络函数WSARecv调用为例,大致描述系统调用的发生过程,该函数用于实现网络数据的接收(见参考图1,是系统调用示例图):
S1:Windows应用程序通过Ws2_32.dll库的WSARecv函数,试图读取套接字socket中的网络数据。WSARecv函数提供用户空间的缓存地址,该缓存用于存放接收到的网络数据。WSARecv函数通过一系列的函数调用之后,将对网络socket的调用转换为对文件系统的输入输出(Input and Output,IO)调用,即对Ntdll.dll的系统调用存根函数NtReadFile的调用;
S2:Ntdll.dll的NtReadFile函数是系统调用,因此会触发KiFastSystemCall函数,实现用户态到内核态的环境切换;
S3:KiFastSystemCall经过一系列复杂的处理之后,最终进入到操作系统的内核空间,并调用内核函数KiFastCallEntry;
S4:KiFastCallEntry调用系统服务例程KiSystemServiceRepeat;
S5:KiSystemServiceRepeat通过系统服务表先查找到用户需要的系统服务例程NtReadFile,然后把用户参数拷贝到内核,再转入到系统服务例程NtReadFile;
S6:系统服务例程NtReadFile进一步调用底层驱动Afd.sys,由Afd.sys将对文件IO的操作转换为适合于网络驱动器的请求;
S7:Afd.sys将转换得到的网络驱动器请求发送给下层网络驱动,即Tcpip.sys,由Tcpip.sys完成数据读取任务;
S8:Tcpip.sys执行完请求之后,将结果和控制权返回底层驱动Afd.sys;
S9:Afd.sys继续将结果和控制权返回至系统服务例程NtReadFile;
S10:NtReadFile继续将结果和控制权返回至函数KiSystemServiceRepeat;
S11:KiSystemServiceRepeat调用KiServiceExit退出系统服务;
S12:KiServiceExit调用KiSystemCallExit2实现从内核空间到用户空间的环境转换;
S13:应用程序从内核态返回,调用KiFastSystemCallRet;
S14:KiFastSystemCallRet返回到Ntdll.dll的系统调用存根函数NtReadFile;
S15:之后,函数调用过程一路返回,直至最初的网络API函数WSARecv。
由以上过程可见,每次系统调用都需要在应用空间与内核空间之间做两次环境切换,一次是从应用空间切换到内核空间,另一次是内核空间完成服务后切换回用户空间。由于应用空间和内核空间所处环境的差异,彼此不能直接使用对方的内存,所以不可避免的会涉及到两个空间之间的内存拷贝。对于读取请求,内核分配一个与用户模式的缓冲区大小相同的系统缓冲区,当完成请求时,内核将驱动程序已经提供的数据从系统缓冲区复制到用户缓冲区。对于写入请求,内核也会分配一个系统缓冲区,并将用户缓冲区的内容复制到系统缓冲区。当涉及有大量网络数据需要读取和写入的情况下,会导致更多环境切换开销,这些额外开销将导致整个系统运行效率低下。虽然,目前类似于完成端口的技术可以大大提高数据拷贝的效率,减少内核切换的次数,但是仍然不可避免的需要在用户空间不同的socket之间做数据拷贝,因此仍然存在提高的空间。
发明内容
本发明实施例提供了一种网络数据的转发方法、模块及系统,旨在解决现有技术在实现网络数据的转发时,会产生较多的内存拷贝开销和系统调用开销,导致整个系统运行效率低下的问题。
一方面,提供一种网络数据的转发方法,所述方法包括:
网络数据的转发模块从应用层模块获取数据输入通道与数据输出通道之间的绑定信息;
网络数据的转发模块读取数据输入通道的网络数据,所述数据输入通道是网络数据的转发服务器与数据源服务器之间的数据传输通道;
网络数据的转发模块根据所述绑定信息查找与所述数据输入通道绑定的数据输出通道,所述数据输出通道是网络数据的转发服务器与用户终端之间的数据传输通道;
网络数据的转发模块转发所述网络数据至所述数据输出通道;
所述网络数据的转发模块位于所述网络数据的转发服务器的操作系统的内核层。
进一步地,在所述网络数据的转发模块获取数据输入通道与数据输出通道之间的绑定信息之前,还包括:
应用层模块接收用户终端的连接请求,根据所述连接请求建立网络数据的转发服务器与用户终端之间的数据输出通道;
应用层模块根据所述连接请求建立网络数据的转发服务器与数据源服务器之间的数据输入通道;
应用层模块获取所述数据输入通道和所述数据输出通道的网络连接信息;
应用层模块将所述数据输入通道的网络连接信息与所述数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息;
应用层模块发送所述绑定信息至网络数据的转发模块;
所述应用层模块位于所述网络数据的转发服务器的操作系统的应用层。
进一步地,在所述网络数据的转发模块读取数据输入通道的网络数据之前,还包括:
网络数据的转发模块接收底层网络驱动发送的数据到达消息,所述数据到达消息通知网络数据的转发模块,底层网络驱动已经接收到数据输入通道发送的网络数据。
进一步地,在所述网络数据的转发模块接收底层网络驱动发送的数据到达消息之前,还包括:
当检测到预设时间内没有接收到底层网络驱动发送的数据到达消息时时,网络数据的转发模块生成一个异常事件通知应用层模块,由应用层模块根据数据源服务器反馈的当前状态决定向数据源服务器重新请求数据或者重新建立与数据源服务器之间的数据输入通道。
另一方面,提供一种网络数据的转发模块,所述网络数据的转发模块包括:
绑定信息获取单元,用于从应用层模块获取数据输入通道与数据输出通道之间的绑定信息;
数据读取单元,用于读取数据输入通道的网络数据,所述数据输入通道是网络数据的转发服务器与数据源服务器之间的数据传输通道;
输出通道获取单元,用于根据所述绑定信息查找与所述数据输入通道绑定的数据输出通道,所述数据输出通道是网络数据的转发服务器与用户终端之间的数据传输通道;
数据转发单元,用于转发所述网络数据至所述数据输出通道;
所述网络数据的转发模块位于所述网络数据的转发服务器的操作系统的内核层。
进一步地,所述网络数据的转发模块还包括:
消息接收单元,用于接收底层网络驱动发送的数据到达消息,所述数据到达消息通知网络数据的转发模块,底层网络驱动已经接收到数据输入通道发送的网络数据。
进一步地,所述网络数据的转发模块还包括:
异常事件生成单元,用于当检测到预设时间内没有接收到底层网络驱动发送的数据到达消息时,生成一个异常事件通知应用层模块,由应用层模块根据数据源服务器反馈的当前状态决定向数据源服务器重新请求数据或者重新建立与数据源服务器之间的数据输入通道。
再一方面,提供一种网络数据的转发服务器,所述网络数据的转发服务器包括应用层模块和如上所述的网络数据的转发模块。
进一步地,所述应用层模块位于所述网络数据的转发服务器的操作系统的应用层,包括:
连接请求接收单元,用于接收用户终端的连接请求,根据所述连接请求建立网络数据的转发服务器与用户终端之间的数据输出通道;
输入通道建立单元,用于根据所述连接请求建立网络数据的转发服务器与数据源服务器之间的数据输入通道;
通道信息获取单元,用于获取所述数据输入通道和所述数据输出通道的网络连接信息;
通道绑定单元,用于将所述数据输入通道的网络连接信息与所述数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息;
绑定信息发送单元,用于发送所述绑定信息至网络数据的转发模块。
又一方面,提供一种网络数据的转发系统,所述网络数据的转发系统包括用户终端、与所述用户终端连接的如上所述的网络数据的转发服务器,还包括与所述网络数据的转发服务器连接的数据源服务器。
在本发明实施例,位于内核层的网络数据的转发模块对从数据输入通道接收的数据流进行处理后直接转发至数据输出通道,整个数据流的传递、处理均是在内核层完成,数据流将不再沿着原有的数据通道向上传递至应用层,从而避免了用户层的参与,节省了大量的内存拷贝开销和系统调用开销,提高了整个系统运行效率。
附图说明
图1是本发明提供的Windows系统下,应用程序调用WSARecv函数实现网络数据的接收过程示意图;
图2本发明实施例一提供的网络数据的转发方法的实现流程图;
图3本发明实施例二提供的Windows网络结构示意图;
图4本发明实施例三提供的网络数据的转发模块的启动和初始化过程的实现流程;
图5本发明实施例四提供的应用层模块将数据输入通道的网络连接信息与数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息的过程以及发送绑定信息至网络数据的转发模块的实现流程的实现流程图;
图6本发明实施例五提供的网络数据的转发模块获取到绑定信息后,根据该绑定信息对数据输入数据通道中的数据进行转发的过程的实现流程图;
图7是本发明实施例六提供的数据转发超时异常时,网络数据的转发模块和应用层模块对数据进行处理的实现流程图;
图8是本发明实施例七提供的网络数据的转发模块的结构框图;
图9是本发明实施例八提供的网络数据的转发服务器的结构框图;
图10是本发明实施例九提供的网络数据的转发系统的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,网络数据的转发模块获取到数据输入通道与数据输出通道之间的绑定信息后,读取数据输入通道的网络数据,根据绑定信息查找与数据输入通道绑定的数据输出通道,并转发读取到的网络数据至该数据输出通道,其中,数据输入通道是网络数据的转发服务器与数据源服务器之间的数据传输通道;数据输出通道是网络数据的转发服务器与用户终端之间的数据传输通道。
以下结合具体实施例对本发明的实现进行详细描述:
实施例一
图2示出了本发明实施例一提供的网络数据的转发方法的实现流程,该方法可以运行在网络数据的转发服务器中,该网络数据的转发服务器包括应用层和内核层,应用层模块位于应用层,网络数据的转发模块位于内核层,该网络数据的转发模块可以是内置于网络数据的转发服务器的内核层中的软件单元、硬件单元或者软硬件结合的单元,以下以网络数据的转发模块端为例来进行流程的说明,详述如下:
在步骤S201中,网络数据的转发模块获取数据输入通道与数据输出通道之间的绑定信息。
在本发明实施例中,网络数据的转发服务器包括应用层和内核层,其中,应用层内置有应用层模块,内核层内置有网络数据的转发模块。网络数据的转发服务器启动后,会先启动和初始化应用层模块和网络数据的转发模块。
应用层模块和网络数据的转发模块启动和初始化完成后,应用层模块可以先接收用户终端发送的连接请求,根据该连接请求建立起网络数据的转发服务器与用户终端之间的数据输出通道,通过该数据输出通道,网络数据的转发服务器可以将从数据源服务器获取的数据转发给用户终端。
应用层模块接收到用户终端发送的连接请求后,可以对该连接请求进行解析,得到该连接请求中包括的用户终端需要获取的网络数据所在的数据源服务器的地址,再根据该地址建立起网络数据的转发服务器与数据源服务器之间的数据输入通道,通过该数据输入通道,数据源服务器可以将用户终端需要的数据先发送给网络数据的转发服务器,再由网络数据的转发服务器通过前面建立的数据输出通道转发给用户终端。
具体的,应用层模块接收用户终端发送的连接请求,可以先建立与用户终端之间的数据输出通道,也可以先建立与数据源服务器之间的数据输入通道,具体顺序不做限制。
应用层模块建立好与用户终端连接的数据输出通道以及连接网络数据的转发服务器和数据源服务器的数据输入通道后,获取上述的数据输出通道和数据输入通道的网络连接信息,并将数据输入通道的网络连接信息与数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息,
其中,数据输入通道和数据输出通道之间是一对多的绑定关系。
应用层模块生成数据输入通道与数据输出通道之间的绑定信息后,可以主动发送该绑定信息至网络数据的转发模块;当然,网络数据的转发模块也可以向应用层模块发送绑定信息请求消息,应用层模块接收到请求消息后,再发送绑定信息给网络数据的转发模块。通过这两种方式,网络数据的转发模块都可以从应用层模块获取到数据输入通道与数据输出通道之间的绑定信息。
作为本发明的一个优选实施例,网络数据的转发模块将获取到的绑定信息存储在通道绑定信息数据库中,该通道绑定信息数据库可以是一个哈希表,具体该数据库采用何种形式,在此不做限制。
另外,本发明实施例中的用户终端可以为一个,也可以为多个,用户终端的具体个数在此不做限制。数据源服务器是一个云存储接入点或者媒体服务器亦或网络摄像头,它本质上是一个数据源,其中存储有用户终端需要的网络数据。
在步骤S202中,网络数据的转发模块读取数据输入通道的网络数据,该数据输入通道是网络数据的转发服务器与数据源服务器之间的数据传输通道。
在本发明实施例中,网络数据的转发模块可以读取数据输入通道中正在传输的网络数据。
作为本发明的一个优选实施例,网络数据的转发模块接收到底层网络驱动发送的数据到达消息后,读取数据输入通道中正在传输的网络数据。
其中,该数据到达消息通知网络数据的转发模块底层网络驱动已经接收到数据输入通道发送的网络数据。
需要说明的是,此处的底层网络驱动指的是图3所示的Windows网络结构图中的D05至D07,网络数据的转发模块是D04中的一个模块。
其中,数据通道是一个逻辑概念,其覆盖面涉及图3中的D02至D07几乎整个环节,该数据通道由应用层的Socket来表示。正常的数据流应该是从D07一直传输到D02,由D01接收处理后,再由D01传递至D07,最后由D07输出至用户终端。本实施例是在D04层通过网络数据的转发模块提前对D04层以下的底层网络驱动接收的数据流进行处理,数据流将不再沿着原有数据通道向上传递至D02,而是D04进行处理后,直接通过D05至D07进行传递,最后由D07输出至相应的用户终端。
在步骤S203中,网络数据的转发模块根据绑定信息查找与数据输入通道绑定的数据输出通道,该数据输出通道是网络数据的转发服务器与用户终端设备之间的数据传输通道。
在本发明实施例中,网络数据的转发模块读取通道绑定信息数据库,根据通道绑定信息数据库中存储的绑定信息确定与数据输入通道绑定的数据输出通道,一个数据输入通道可以对应一个或者多个数据输出通道。
在步骤S204中,网络数据的转发模块转发读取到的网络数据至数据输出通道。
在本发明实施例中,网络数据的转发模块将读取到的网络数据传输至相应的数据输出通道,网络数据通过数据输出通道输出至用户终端。
本实施例,位于内核层的网络数据的转发模块对从数据输入通道接收的数据流进行处理后直接转发至数据输出通道,整个数据流的传递、处理均是在内核层完成,数据流将不再沿着原有的数据通道向上传递至应用层,从而避免了用户层的参与,节省了大量的内存拷贝开销和系统调用开销,提高了整个系统运行效率。
本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘或光盘等。
实施例二
鉴于不同类型的操作系统具有不同的实现方式,本实施例以Windows操作系统为例描述网络数据的转发模块的工作过程,但不仅限于Windows操作系统。Linux虽然在具体实现上有别于Windows操作系统,但从功能和架构上都是相同的,也应在专利保护权利范围之内。
Windows系统的网络模型是一个定义良好的层次结构,从而允许第三方组件替换或者融入到其体系结构中。
请参考图3,Windows系统的网络结构描述如下:
D01:Sockets应用程序层,负责调用系统的应用程序编程接口(ApplicationProgramming Interface,API)。
D02:系统提供的网络API接口,即Sockets应用程序接口层,将API调用转换成系统调用。
D03:Sockets模拟器层,将用户对Socket文件描述符的调用转换成网络IO系统调用,并产生D04以下各驱动可以理解的输入输出请求包(I/O RequestPackages,IRP)。
D04:TDI(Transport Driver Interface,TDI)过滤器驱动层,实现内核网络数据转发,按照D05描述的规范实现与D03和D06的通信。
D05:TDI传输驱动接口规范层。D05描述的仅是一套接口规范,用于说明D04TDI过滤器层如何与D03和D06实现通信,不是一个实际设备。
D06:TCP/IP协议驱动层,即TDI层,该层实现完整的TCP/IP协议栈。
D07:TDI以下的底层网络驱动层,包括网络驱动接口规范(Network DriverInterface Specification,NDIS)和网卡驱动。
由参考图3可见,Microsoft Windows在D03和D06之间提供了一个D05和D04。只要遵从D05的规范,就可以在D03与D06之间加入D04,从而在Windows内核层实现对网络数据的转发控制。
因此,优选的,本实施例在D04中实现一个TDI的过滤器驱动,以实现前述参考图2中的网络数据的转发模块。
优选的,上述TDI的过滤器驱动包括TCP流和UDP流的接入与转发。采用上述TDI的过滤器驱动的另一个优点是,整个转发逻辑将建立在TCP/IP协议层,即D06之上的,因此可以避免介入TCP层复杂的流控机制,从而实现对TCP流转发的完整支持。
实施例三
图4示出了本发明实施例三提供的网络数据的转发模块的启动和初始化过程的实现流程,详述如下:
在步骤S401中,应用层模块加载TDI的过滤器驱动。
在本发明实施例中,TDI的过滤器驱动程序,即实施例一种提到的网络数据的转发模块,被应用层模块加载时,TDI的过滤器驱动的入口函数被内核调用。
在步骤S402中,TDI的过滤器驱动的入口函数设置分发函数。
在本发明实施例中,TDI的过滤器驱动的入口函数中设置有该驱动的分发函数DeviceDispatch,此分发函数用于处理所有发送给TDI的过滤器驱动的IRP请求。
在步骤S403中,入口函数创建和初始化通道绑定信息数据库。
在本发明实施例中,由TDI的过滤器驱动的入口函数根据从应用层模块获取的绑定信息创建和初始化通道绑定信息数据库,通道绑定信息数据库中存储有数据通道绑定信息。优选的,该通道绑定信息数据库是一个哈希表。
在步骤S404中,入口函数设置数据通道绑定信息处理函数。
在本发明实施例中,为TDI的过滤器驱动中的IRP_MJ_DEVICE_CONTROL功能新增一个控制号IOCTL_SET_TRANSFER_ADDRESS,在步骤S402设置的分发函数中添加对此新控制号的处理函数。该处理函数用于将应用层模块设置的输入数据通道与输出数据通道之间的绑定信息保存到通道绑定信息数据库中。同时,该处理函数为输入数据通道设置数据回调函数,确保在输入数据通道中有网络数据到达时,网络数据的转发模块能够读取到到达的网络数据。
在步骤S405中,入口函数设置TDI的过滤器驱动的卸载函数。
在本发明实施例中,在TDI的过滤器驱动的入口函数中设置过滤器驱动的卸载函数。该卸载函数用于在卸载TDI的过滤器驱动时,解除虚拟设备对象的绑定和删除虚拟设备对象,还用于包括其它一些内存回收等清理回收工作。
在步骤S406中,入口函数生成虚拟TCP设备。
在本发明实施例中,在TDI的过滤器驱动的入口函数中生成一个虚拟设备对象"\\Device\\MyTcp",并绑定到原有设备"\\Device\\Tcp"上。一旦绑定,则本来操作系统发送给原有设备"\\Device\\Tcp"的请求,首先会发送给这个新虚拟设备\\Device\\MyTcp进行过滤处理。
在步骤S407中,入口函数保存原有TCP设备指针。
在本发明实施例中,在TDI的过滤器驱动的入口函数中保存原有设备\\Device\\Tcp指针。网络数据的转发模块转发TCP数据时,需要该原有设备指针。
在步骤S408中,入口函数生成虚拟UDP设备。
在本发明实施例中,在TDI的过滤器驱动的入口函数中生成一个虚拟设备对象"\\Device\\MyUdp",并绑定到原有设备"\\Device\\Udp"上。一旦绑定,则本来操作系统发送给原有设备"\\Device\\Udp"的请求,首先会发送到这个虚拟设备"\\Device\\MyUdp"进行过滤处理。
在步骤S409中,入口函数保存原有UDP设备指针。
在本发明实施例中,在TDI的过滤器驱动的入口函数中保存原有设备\\Device\\Udp指针。网络数据的转发模块转发UDP数据时,需要该原有设备指针。
在步骤S410中,入口函数保存原有IP多播设备。
在本发明实施例中,在TDI的过滤器驱动的入口函数中保存原有IP多播设备\\Device\\IPMULTICAST指针。可选的,网络数据的转发模块转发数据到多播通道时,需要该原有IP多播设备指针。
在步骤S411中,完成TDI的过滤器驱动的初始化。
实施例四
图5示出了本发明实施例四提供的应用层模块将数据输入通道的网络连接信息与数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息的过程以及发送绑定信息至网络数据的转发模块的实现流程,以应用层模块侧为例进行说明,详述如下:
在步骤S501中,应用层模块接收用户终端的连接请求,根据连接请求建立网络数据的转发服务器与用户终端之间的数据输出通道。
具体来说,应用层模块接收用户终端发起的连接请求,用户终端向服务器应用层模块发送的连接请求中包括所要获取的目标数据源的相关信息,可选的,云存储的文件编号。
应用层模块解析用户终端发送的目标数据源的相关信息,并根据该相关信息建立起网络数据的转发服务器与用户终端之间的数据输出通道。
在步骤S502中,应用层模块根据连接请求建立网络数据的转发服务器与数据源服务器之间的数据输入通道。
具体来说,应用层模块使用步骤S501解析获得的目标数据源的相关信息,可选的云存储的文件编号等,向数据源服务器,可选的是云存储,发起数据请求,并建立起网络数据的转发服务器与数据源服务器之间的数据输入通道。
优选的,如果应用层模块对连接请求进行解析,获得用户终端发送的目标数据源的相关信息后,发现网络数据的转发服务器与数据源服务器之间的数据输入通道已经存在,则不需要重复建立此数据输入通道。
在步骤S503中,应用层模块获取数据输入通道和所述数据输出通道的网络连接信息。
具体来说,应用层模块获取步骤S502中建立的数据输入通道的协议信息和<IP,PORT>地址对,获取S501步骤中建立的数据输出通道的协议信息和<IP,PORT>地址对。
在步骤S504中,应用层模块将数据输入通道的网络连接信息与数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息。
在步骤S505中,应用层模块发送数据输入通道与数据输出通道之间的绑定信息至网络数据的转发模块。
具体来说,应用层模块以实施例三中的步骤S404新添加控制号IOCTL_SET_TRANSFER_ADDRESS为参数,调用函数DeviceIoControl,该函数发送控制号IOCTL_SET_TRANSFER_ADDRESS直接到指定的设备驱动程序,这里即将数据输入输出通道的协议信息和各自的<IP,PORT>地址对等绑定信息传递到网络数据的转发模块中。
其中,应用层模块可以主动传递绑定信息至网络数据的转发模块,也可以在接收到网络数据的转发模块发送的获取绑定信息的请求后,再发送绑定信息至网络数据的转发模块,具体采用何种方式,本实施不做限制。
具体的,网络数据的转发模块在IRP_MJ_DEVICE_CONTROL这个IRP派遣函数中根据控制号IOCTL_SET_TRANSFER_ADDRESS,可以对应用层模块发送的数据输入输出通道的协议信息和各自的<IP,PORT>地址对等绑定信息进行提取,将其存储到通道绑定信息数据库中,后续,网络数据的转发模块读取通道绑定信息数据库,从中查找与数据输入通道绑定的数据输出通道。
实施例五
图6示出了本发明实施例五提供的网络数据的转发模块获取到绑定信息后,根据该绑定信息对数据输入数据通道中的数据进行转发的过程的实现流程,以网络数据的转发模块侧为例进行说明,详述如下:
在步骤S601中,网络数据的转发模块为每个数据通道添加内核地址对象映射表项。
本发明实施例中,网络数据的转发模块为每一个数据通道添加一个<<协议,地址对信息>,内核地址对象>表项到内核地址对象映射表中。其中,内核地址对象用来在内核中唯一标识一个数据通道。
优选的,如果网络数据的转发服务器与数据源服务器之间的数据输入通道已经存在,则不需要重复建立此数据输入通道,也不需要为此数据输入通道添加一个<<协议,地址对信息>,内核地址对象>表项到内核地址对象映射表中。
在步骤S602中,网络数据的转发模块为数据输入通道设置接收数据回调函数。
本发明实施例中,网络数据的转发模块为每一个数据输入通道注册接收数据回调函数。
进一步的,TDI_EVENT_RECEIVE用来设置TCP数据回调函数,TDI_EVENT_RECEIVE_DATAGRAM用来设置UDP数据回调函数。在套接字Sockets关闭后,需要在IRP_MJ_CLEANUP处理中将上述数据回调函数释放掉。
在步骤S603中,数据输入通道的数据到达内核后,内核回调上述数据回调函数。
在步骤S604中,数据回调函数查询通道绑定信息数据库,获取与数据输入通道对应的数据输出数据通道的信息。
具体的,由数据回调函数获取本次数据输入通道的协议类型,<IP,PORT>地址对,从通道绑定信息数据库中查找与本次数据输入通道对应的数据输出通道的信息。
在步骤S605中,数据回调函数查询内核地址对象映射表,获取数据输出通道的内核地址对象。
在步骤S606中,数据回调函数查询数据输出通道信息中的协议信息,根据该协议信息获取正确的原始设备对象指针。
在步骤S607中,数据回调函数通过上述数据输出通道的内核地址对象和原始设备对象指针,将数据转发到相应的数据输出通道。
实施例六
图7示出了本发明实施例六提供的数据转发超时异常时,网络数据的转发模块和应用层模块对数据进行处理的实现流程,详述如下:
在步骤S701中,网络数据的转发模块检测预设时间内是否接收到底层网络驱动发送的数据到达消息,如果是,则读取数据输入通道中传输的数据,如果否,则执行步骤S702。
本发明实施例中,网络数据的转发模块通过检测预设时间内是否接收到底层网络驱动发送的数据到达消息来检测数据输入通道中是否有数据到达。
在步骤S702中,网络数据的转发模块生成一个异常事件通知应用层模块,由应用层根据数据源服务器反馈的当前状态决定向数据源服务器重新请求数据或者重新建立与数据源服务器之间的数据输入通道。
具体的,当网络数据的转发模块检测到预设时间内没有接收到底层网络驱动发送的数据到达消息时,会产生一个异常事件,可选的,触发一个命名的事件对象。
进一步地,应用层模块接收到异常事件通知后的处理过程如下:
步骤1、应用层模块捕获到上述事件对象有信号产生,则向数据源服务器发送查询命令,并通知数据源服务器接收数据超时。
步骤2、数据源服务器向应用层模块发送当前状态。
步骤3、应用层模块根据数据源服务器返回的当前状态,向数据源服务器重新请求数据或者重新建立与数据源服务器之间的数据输入通道。
实施例七
图8示出了本发明实施例七提供的网络数据的转发模块的具体结构框图,为了便于说明,仅示出了与本发明实施例相关的部分。该网络数据的转发模块位于网络数据的转发服务器的操作系统的内核层,该网络数据的转发模块8包括:绑定信息获取单元81、数据读取单元82、输出通道获取单元83和数据转发单元84。
其中,绑定信息获取单元81,用于从应用层模块获取数据输入通道与数据输出通道之间的绑定信息;
数据读取单元82,用于读取数据输入通道的网络数据,该数据输入通道是网络数据的转发服务器与数据源服务器之间的数据传输通道;
输出通道获取单元83,用于根据绑定信息获取单元81获取得到的绑定信息查找与数据输入通道绑定的数据输出通道,该数据输出通道是网络数据的转发服务器与用户终端之间的数据传输通道;
数据转发单元84,用于转发数据读取单元82读取到的网络数据至查找到的数据输出通道。
进一步地,该网络数据的转发模块8还包括:
消息接收单元,用于接收底层网络驱动发送的数据到达消息,该数据到达消息通知网络数据的转发模块,底层网络驱动已经接收到数据输入通道发送的网络数据。
进一步地,所述网络数据的转发模块8还包括:
异常事件生成单元,用于当检测到预设时间内没有接收到底层网络驱动发送的数据到达消息时,生成一个异常事件通知应用层模块,由应用层模块根据数据源服务器反馈的当前状态决定向数据源服务器重新请求数据或者重新建立与数据源服务器之间的数据输入通道。
本发明实施例提供的网络数据的转发模块可以应用在前述对应的方法实施例一中,详情参见上述实施例一的描述,在此不再赘述。
实施例八
图9示出了本发明实施例八提供的网络数据的转发服务器的具体结构框图,为了便于说明,仅示出了与本发明实施例相关的部分。该网络数据的转发服务器9包括:应用层模块91和网络数据的转发模块92。
网络数据的转发模块92的具体结构请参见图8,位于网络数据的转发服务器9的操作系统的内核层。
应用层模块91位于网络数据的转发服务器9的操作系统的应用层,包括:
连接请求接收单元911,用于接收用户终端的连接请求,根据该连接请求建立网络数据的转发服务器与用户终端之间的数据输出通道;
输入通道建立单元912,用于根据接收到的连接请求建立网络数据的转发服务器与数据源服务器之间的数据输入通道;
通道信息获取单元913,用于获取数据输入通道和数据输出通道的网络连接信息;
通道绑定单元914,用于将数据输入通道的网络连接信息与数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息;
绑定信息发送单元915,用于发送该绑定信息至网络数据的转发模块92。
实施例九
图10示出了本发明实施例九提供的网络数据的转发系统的具体结构框图,为了便于说明,仅示出了与本发明实施例相关的部分。该网络数据的转发系统10包括:用户终端101、与用户终端101连接的网络数据的转发服务器102,还包括与网络数据的转发服务器102连接的数据源服务器103。
其中,系统中至少包括一个用户终端,本实施例中以一个为例来进行说明。网络数据的转发服务器102的结构请参见图9。
值得注意的是,上述系统实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种网络数据的转发方法,其特征在于,所述方法包括:
网络数据的转发模块从应用层模块获取数据输入通道与数据输出通道之间的绑定信息;
网络数据的转发模块读取数据输入通道的网络数据,所述数据输入通道是网络数据的转发服务器与数据源服务器之间的数据传输通道;
网络数据的转发模块根据所述绑定信息查找与所述数据输入通道绑定的数据输出通道,所述数据输出通道是网络数据的转发服务器与用户终端之间的数据传输通道;
网络数据的转发模块转发所述网络数据至所述数据输出通道;
所述网络数据的转发模块位于所述网络数据的转发服务器的操作系统的内核层;
所述网络数据的转发模块转发所述网络数据至所述数据输出通道包括:
网络数据的转发模块为每个数据通道添加内核地址对象映射表项;
网络数据的转发模块为数据输入通道设置接收数据回调函数;
数据输入通道的数据到达内核后,内核回调上述数据回调函数;
数据回调函数查询通道绑定信息数据库,获取与数据输入通道对应的数据输出数据通道的信息;
数据回调函数查询内核地址对象映射表,获取数据输出通道的内核地址对象;
数据回调函数查询数据输出通道信息中的协议信息,根据该协议信息获取正确的原始设备对象指针;
数据回调函数通过上述数据输出通道的内核地址对象和原始设备对象指针,将数据转发到相应的数据输出通道。
2.如权利要求1所述的方法,其特征在于,在所述网络数据的转发模块获取数据输入通道与数据输出通道之间的绑定信息之前,还包括:
应用层模块接收用户终端的连接请求,根据所述连接请求建立网络数据的转发服务器与用户终端之间的数据输出通道;
应用层模块根据所述连接请求建立网络数据的转发服务器与数据源服务器之间的数据输入通道;
应用层模块获取所述数据输入通道和所述数据输出通道的网络连接信息;
应用层模块将所述数据输入通道的网络连接信息与所述数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息;
应用层模块发送所述绑定信息至网络数据的转发模块;
所述应用层模块位于所述网络数据的转发服务器的操作系统的应用层。
3.如权利要求1所述的方法,其特征在于,在所述网络数据的转发模块读取数据输入通道的网络数据之前,还包括:
网络数据的转发模块接收底层网络驱动发送的数据到达消息,所述数据到达消息通知网络数据的转发模块,底层网络驱动已经接收到数据输入通道发送的网络数据。
4.如权利要求3所述的方法,其特征在于,在所述网络数据的转发模块接收底层网络驱动发送的数据到达消息之前,还包括:
当检测到预设时间内没有接收到底层网络驱动发送的数据到达消息时,网络数据的转发模块生成一个异常事件通知应用层模块,由应用层模块根据数据源服务器反馈的当前状态决定向数据源服务器重新请求数据或者重新建立与数据源服务器之间的数据输入通道。
5.一种网络数据的转发模块,其特征在于,所述网络数据的转发模块包括:
绑定信息获取单元,用于从应用层模块获取数据输入通道与数据输出通道之间的绑定信息;
数据读取单元,用于读取数据输入通道的网络数据,所述数据输入通道是网络数据的转发服务器与数据源服务器之间的数据传输通道;
输出通道获取单元,用于根据所述绑定信息查找与所述数据输入通道绑定的数据输出通道,所述数据输出通道是网络数据的转发服务器与用户终端之间的数据传输通道;
数据转发单元,用于转发所述网络数据至所述数据输出通道;
所述网络数据的转发模块位于所述网络数据的转发服务器的操作系统的内核层;
所述数据转发单元通过以下步骤转发所述网络数据至所述数据输出通道:
为每个数据通道添加内核地址对象映射表项;
为数据输入通道设置接收数据回调函数;
数据输入通道的数据到达内核后,内核回调上述数据回调函数;
数据回调函数查询通道绑定信息数据库,获取与数据输入通道对应的数据输出数据通道的信息;
数据回调函数查询内核地址对象映射表,获取数据输出通道的内核地址对象;
数据回调函数查询数据输出通道信息中的协议信息,根据该协议信息获取正确的原始设备对象指针;
数据回调函数通过上述数据输出通道的内核地址对象和原始设备对象指针,将数据转发到相应的数据输出通道。
6.如权利要求5所述的网络数据的转发模块,其特征在于,所述网络数据的转发模块还包括:
消息接收单元,用于接收底层网络驱动发送的数据到达消息,所述数据到达消息通知网络数据的转发模块,底层网络驱动已经接收到数据输入通道发送的网络数据。
7.如权利要求6所述的网络数据的转发模块,其特征在于,所述网络数据的转发模块还包括:
异常事件生成单元,用于当检测到预设时间内没有接收到底层网络驱动发送的数据到达消息时,生成一个异常事件通知应用层模块,由应用层模块根据数据源服务器反馈的当前状态决定向数据源服务器重新请求数据或者重新建立与数据源服务器之间的数据输入通道。
8.一种网络数据的转发服务器,其特征在于,所述网络数据的转发服务器包括应用层模块和如权利要求5至7任一项所述的网络数据的转发模块。
9.如权利要求8所述的网络数据的转发服务器,其特征在于,所述应用层模块位于所述网络数据的转发服务器的操作系统的应用层,包括:
连接请求接收单元,用于接收用户终端的连接请求,根据所述连接请求建立网络数据的转发服务器与用户终端之间的数据输出通道;
输入通道建立单元,用于根据所述连接请求建立网络数据的转发服务器与数据源服务器之间的数据输入通道;
通道信息获取单元,用于获取所述数据输入通道和所述数据输出通道的网络连接信息;
通道绑定单元,用于将所述数据输入通道的网络连接信息与所述数据输出通道的网络连接信息进行绑定,生成数据输入通道与数据输出通道之间的绑定信息;
绑定信息发送单元,用于发送所述绑定信息至网络数据的转发模块。
10.一种网络数据的转发系统,其特征在于,所述网络数据的转发系统包括用户终端、与所述用户终端连接的如权利要求8或9所述的网络数据的转发服务器,还包括与所述网络数据的转发服务器连接的数据源服务器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310566650.8A CN103607442B (zh) | 2013-11-13 | 2013-11-13 | 一种网络数据的转发方法、模块及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310566650.8A CN103607442B (zh) | 2013-11-13 | 2013-11-13 | 一种网络数据的转发方法、模块及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103607442A CN103607442A (zh) | 2014-02-26 |
CN103607442B true CN103607442B (zh) | 2016-09-28 |
Family
ID=50125642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310566650.8A Expired - Fee Related CN103607442B (zh) | 2013-11-13 | 2013-11-13 | 一种网络数据的转发方法、模块及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103607442B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105101294A (zh) * | 2015-07-10 | 2015-11-25 | 努比亚技术有限公司 | 数据传输装置和方法 |
CN108234359B (zh) * | 2016-12-13 | 2020-12-04 | 华为技术有限公司 | 传输报文的系统和方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7808992B2 (en) * | 2004-12-30 | 2010-10-05 | Cisco Technology, Inc. | Platform independent implementation of private VLANS |
CN101252527B (zh) * | 2008-04-09 | 2011-01-26 | 腾讯科技(深圳)有限公司 | 一种网络中转的方法、网络中转服务器和内核管理模块 |
CN101442497B (zh) * | 2008-12-25 | 2012-02-29 | 中兴通讯股份有限公司 | 一种实现数据报文转发的系统及方法 |
CN103179028A (zh) * | 2013-01-10 | 2013-06-26 | 上海斐讯数据通信技术有限公司 | 基于内核进行rtp数据收发的网关设备及其实现方法 |
-
2013
- 2013-11-13 CN CN201310566650.8A patent/CN103607442B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7808992B2 (en) * | 2004-12-30 | 2010-10-05 | Cisco Technology, Inc. | Platform independent implementation of private VLANS |
CN101252527B (zh) * | 2008-04-09 | 2011-01-26 | 腾讯科技(深圳)有限公司 | 一种网络中转的方法、网络中转服务器和内核管理模块 |
CN101442497B (zh) * | 2008-12-25 | 2012-02-29 | 中兴通讯股份有限公司 | 一种实现数据报文转发的系统及方法 |
CN103179028A (zh) * | 2013-01-10 | 2013-06-26 | 上海斐讯数据通信技术有限公司 | 基于内核进行rtp数据收发的网关设备及其实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103607442A (zh) | 2014-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11765000B2 (en) | Method and system for virtual and physical network integration | |
US10210015B2 (en) | Virtual machine (VM) migration from switched fabric based computing system to external systems | |
US8005022B2 (en) | Host operating system bypass for packets destined for a virtual machine | |
US10742697B2 (en) | Packet forwarding apparatus for handling multicast packet | |
CN106416147B (zh) | 一种用于软件定义协议网络节点的系统和方法 | |
US8677030B2 (en) | Apparatus and method for managing packet classification tables | |
US8478853B2 (en) | Handling of multiple MAC unicast addresses with virtual machines | |
US11457096B2 (en) | Application based egress interface selection | |
US7751401B2 (en) | Method and apparatus to provide virtual toe interface with fail-over | |
CN110932890B (zh) | 一种数据传输方法、服务器及计算机可读存储介质 | |
CN101800690B (zh) | 一种使用地址池实现源地址转换的方法和装置 | |
WO2016095345A1 (zh) | 报文转发的方法及网络设备 | |
EP3493477B1 (en) | Message monitoring | |
CN111182063B (zh) | 应用于电子设备的数据处理方法、电子设备及介质 | |
WO2020135856A1 (zh) | 一种网络通信方法及系统 | |
US20070002822A1 (en) | Multi homing transport protocol on a multi-processor arrangement | |
CN103607442B (zh) | 一种网络数据的转发方法、模块及系统 | |
WO2016175872A1 (en) | Network based service discovery via unicast messages | |
CN110391919A (zh) | 组播流量转发方法、装置、电子设备 | |
CN112788072B (zh) | 数据处理方法、数据处理系统、计算机设备、存储介质 | |
CN113765799A (zh) | 容器报文发送和接收的方法及存储介质、容器通信系统 | |
JP6371321B2 (ja) | 通信システム、及びパケット転送方法 | |
WO2023207278A1 (zh) | 一种报文处理方法及装置 | |
WO2002078292A1 (fr) | Duplexeur de protocole et procede de duplexage de protocole | |
CN115834722A (zh) | 一种数据处理方法、装置、网元设备以及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160928 Termination date: 20191113 |
|
CF01 | Termination of patent right due to non-payment of annual fee |