快速处理报文的装置及方法
技术领域
本发明涉及数据通信技术,尤其是一种快速处理报文的装置及方法。
背景技术
在网联网通信技术中,必须借助于各种网络协议来传输数据,其中,TCP(Transimission Control Protocol,传输控制协议)/IP(Internet Protocol,互联网协议)协议是互联网的基础协议,而在TCP/IP协议中,TCP与UDP(UserDatagram Protocol,用户数据报协议)为两个具有代表性的传输层协议。由于UDP协议是无连接的通信,所以无论何时都能够发送数据,并且,由于它对数据的处理比较简单,所以能够对数据进行高速的处理,因此,与TCP协议相比,UDP协议在以下几个方面的应用呈现出无可比拟的优越性:
(1)总包数比较少的通信;
(2)动画和声音的多媒体通信;
(3)限定在LAN等特定的计算机网络中的应用通信;
(4)需要同步进行的通信如广播通信与多播通信。
TCP/IP协议栈通常包含传输层、网络层、链路层与物理层,各自具有不同的通信功能,依次对接收到的数据进行处理。数据被送入TCP/IP协议栈中后,当应用程序使用UDP协议传送数据时,TCP/IP协议栈中的传输层、网络层、链路层与应用层依次对被传送的数据增加报文首部信息即报文头信息以构造可在网络中正常传输的IP报文。例如在以太网中利用UDP协议传送数据时,TCP/IP协议栈中的传输层、网络层、链路层与物理层依次在该数据的头部增加了APP首部、UDP首部、IP首部及以太网首部信息。TCP/IP协议栈发送数据的过程也就是传输层、网络层、链路层与物理层依次填写各个字段的过程,应用程序每次使用UDP协议发送数据时,都必须依次填写UDP首部信息,IP首部信息和链路层首部信息。以以太网为例,TCP/IP协议栈每发送一组数据,从传输到应用,需要填写的报文头总长度为42个字节,其中UDP头为8字节,IP头为20字节,以太头为14字节。
在实际应用中,通常需要在两个固定的应用程序间采用UDP通信,通信过程中需要发送大量的报文,这些报文的共同特征是其五元组即源IP地址、目的IP地址、源端口号、目的端口号与协议类型(如UDP)都相同,因此被称为报文流。报文流中的报文头基本相同,也就是说TCP/IP协议栈为这些数据填写的报文头字段基本相同,只有极少数字段不同。参见图1,图1所示为报文流的报文头结构示意图,图1中粗斜体字表示不同报文流的报文头中的不同部分。可见,不同报文流中只有IP报文总长度、IP报文标识、IP首部校验和、UDP长度以及UDP校验和不同,这些不同部分的字节数仅占报文头总长度28%左右,而相同部分则占报文头总长度的72%,由于两个固定的应用程序间发送的报文量庞大,对于这些数量庞大的报文流,TCP/IP协议栈都需要逐一计算与填写报文头,而在这些计算与填写工作中,72%的工作都为重复工作,这些重复工作的工作量大,且需要的时间长,严重影响了报文的发送速度。
发明内容
本发明所要解决的技术问题在于,针对现有技术中TCP/IP协议栈重复计算与填写报文流中的报文头的缺陷,提供一种快速处理报文的装置及方法,可保存报文流中首次计算与添加的报文头,并将该报文头添加在后续的报文中,仅进行简单更新即可,不需要重复计算与填写报文头,从而提高报文的发送速度。
本发明提供的一种快速处理报文的装置,包括依次连接的传输层信息处理模块、网络层信息处理模块与链路层信息处理模块,还包括:
报文头信息处理模块,与所述链路层信息处理模块连接,用于提取报文的报文头信息以及发送报文;
报文头信息存储模块,与所述报文头信息处理模块连接,用于存储所述报文头信息;
连接模块,分别与所述传输层信息处理模块、报文头信息处理模块及所述报文头信息存储模块连接,用于添加所述报文头信息,从而生成报文。
该快速处理报文的装置中,连接模块具体可以是一个套接口(SOCKET)模块。
所述报文头信息处理模块包括依次连接的报文接收单元、报文解析单元与报文发送单元,所述报文接收单元与所述链路层信息处理模块连接,所述报文解析单元与所述报文头信息存储模块连接。
另外,上述快速处理报文的装置还包括用于发送用户数据报协议报文的物理层信息处理模块,与所述报文头信息处理模块连接,具体是与所述报文发送单元连接。
本发明提供的一种快速处理报文的方法,执行以下步骤:
步骤1、接收报文数据,查询报文头信息存储模块中是否存在对应于同一套接口标识、且与所述报文数据具有相同的五元组信息,若不存在,执行步骤2;若存在,跳转执行步骤3;
步骤2、将所述报文数据封装成可发送的报文,并存储该可发送的报文的报文头信息,然后执行步骤4;
步骤3、将所述五元组信息对应的报文头信息添加在所述报文数据中,并更新添加在该报文数据中的报文头信息形成可发送的报文;
步骤4、发送所述可发送的报文。
上述快速处理报文的方法尤其适用于处理UDP报文,另外,也适用于处理其它报文,如TCP报文。针对UDP报文,步骤2包括:
步骤21、对所述报文数据设置套接口标识后将该携带了套接口标识的报文数据依次进行用户数据报协议封装、互联网协议封装与链路层封装,形成可发送的用户数据报协议报文;
步骤22、存储从所述可发送的用户数据报协议报文中提取的套接口标识、五元组与报文头信息。
其中,所述步骤22包括:
向报文解析单元发送所述可发送的用户数据报协议报文以及从该可发送的用户数据报协议报文中提取报文头信息的指示信息;
报文解析单元对所述可发送的用户数据报协议报文进行解析,提取套接口标识、五元组与报文头信息并存储在报文头信息存储模块中,同时该可发送的用户数据报协议报文转发给报文发送单元。
所述步骤3具体为:
将所述五元组信息对应的报文头信息添加在所述报文数据中,并更新添加在该报文数据中的报文头信息形成可发送的用户数据报协议报文。该操作具体包括:
步骤31、获取与所述报文数据的五元组相同的报文头信息,并将该报文头信息添加到所述报文数据中;
步骤32、更新所述报文头信息,然后将报文头信息被更新后的数据封装成可发送的用户数据报协议报文。
所述步骤32中对所述报文头信息进行更新具体为:对所述报文头信息中的UDP长度、用户数据报协议校验和、IP首部校验和、IP标识与IP总长度信息进行更新。
所述步骤4具体为:发送所述可发送的用户数据报协议报文。该步骤包括:将所述可发送的报文发送给物理层信息处理模块;发送所述可发送的报文。
所述步骤3与所述步骤4之间还执行对所述报文头信息进行循环冗余码检验的操作。该操作具体为:
检验所述报文头信息是否正确,若正确,执行步骤4;否则,将所述可发送的报文发送给所述套接口模块,然后执行步骤3。
由上述技术方案可知,本发明提供了一种快速处理报文的装置及利用该装置快速处理报文的方法,装置中设有报文头信息处理模块、报文头信息存储模块与连接模块,可以从报文中提取报文头并存储在报文头信息存储模块中,当以后需要对接收到的报文数据添加报文头信息时,从报文头信息存储模块中提取并将其直接添加在报文数据中,然后对添加的报文头进行简单的更新,与现有技术重新计算与添加72%的内容都相同的报文头的方法相比,避免了重复计算与填写报文头的繁琐工作,因此,缩短了处理报文数据的时间,节省了因重复计算与填写报文头所用的资源,因此提高了报文发送速度,同时降低了出错率。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1为报文流的报文头结构示意图;
图2为本发明快速处理报文的装置的一结构示意图;
图3为本发明快速处理报文的装置的另一结构示意图;
图4为本发明快速处理报文的装置的又一结构示意图;
图5为本发明快速处理报文的装置的再一结构示意图;
图6为本发明快速处理报文的方法的流程图;
图7为本发明的生成报文并存储报文头信息的方法的流程图;
图8为本发明的提取、添加与更新报文头信息的方法的流程图。
具体实施方式
参见图2,图2所示为本发明快速处理报文的装置的一结构示意图,该装置由依次连接的连接模块1、传输层信息处理模块2、网络层信息处理模块3、链路层信息处理模块4、报文头信息处理模块5与报文头信息存储模块6构成。其中,报文头信息处理模块5用于提取依次经过传输层信息处理模块2、网络层信息处理模块3与链路层信息处理模块4封装后形成的报文中的报文头信息,并将该报文头信息保存在报文头信息存储模块6中;连接模块1还与传输层信息处理模块2、报文头信息处理模块5及报文头信息存储模块6连接,除了将第一应用模块发送的报文数据转发给传输层信息处理模块2外,还可以从报文头信息存储模块6中提取与接收到的报文数据的五元组相同的报文头信息,将其添加在报文数据中并进行更新,形成完整的可发送的报文,然后通过报文头信息处理模块5发送给第二应用模块。
在上述实施例中,具体如图3所示,连接模块1具体可以是一个SOCKET模块11。另外,报文头信息处理模块5具体可由依次连接的报文接收单元51、报文解析单元52与报文发送单元53构成,其中报文接收单元51与链路层信息处理模块4连接,用于将接收到的报文转发给报文解析单元52,报文解析单元52与报文头信息存储模块6连接,对接收到的报文进行解析,获取报文头信息并将其存储在报文头信息存储模块6中,同时将该报文转发给报文发送单元53以发送给第二应用模块,报文发送单元53还与SOCKET模块11连接。
报文头信息处理模块5可以从首次处理的报文中提取报文头并存储在报文头信息存储模块6中,当以后需要对接收到的报文数据添加报文头信息时,连接模块1直接从报文头信息存储模块6中提取并将其添加在报文数据中,然后对添加的报文头进行简单的更新,与现有技术重新计算与添加72%的内容都相同的报文头的方法相比,避免了重复计算与填写报文头的繁琐工作,因此,缩短了处理数据的时间,节省了因重复计算与填写报文头使用的资源,因此提高了报文发送速度,同时降低了出错率。
图4所示为本发明快速处理报文的装置的又一结构示意图,该装置还包括物理层信息处理模块7,该物理层信息处理模块7与报文头信息处理模块5连接,用于将接收到的报文发送出去。
图5所示为本发明快速处理报文的装置的再一结构示意图,该实施例中,报文头信息处理模块5包括依次连接的报文接收单元51、报文解析单元52与报文发送单元53,其中,报文发送单元53与物理层信息处理模块7连接。
图6为本发明的快速处理报文的方法的一具体流程,其执行以下步骤:
步骤1、SOCKET模块11接收报文数据,查询报文头信息存储模块6中是否存在对应于同一SOCKET标识(简称SOCKET ID)、且与该报文数据的相同的五元组信息,若不存在,执行步骤2;若存在,跳转执行步骤3;
例如接收到的数据的源IP地址为10.2.2.2,目的IP地址为10.1.1.1,源端口号为80,目的端口号为3000,协议类型为UDP,则查询报文头信息存储模块6中是否存在源IP地址为10.2.2.2、目的IP地址为10.1.1.1、源端口号为80、目的端口号为3000、协议类型为UDP的信息,若不存在,执行步骤2;若存在,进一步判断源IP地址为10.2.2.2、目的IP地址为10.1.1.1、源端口号为80、目的端口号为3000、协议类型为UDP的信息是否对应于同一SOCKET ID(例如SOCKET ID均为1),即源IP地址为10.2.2.2、目的IP地址为10.1.1.1、源端口号为80、目的端口号为3000、协议类型为UDP的报文头信息所对应的报文数据是否由同一应用模块发送,是,则执行步骤3;否则,执行步骤2;
下表1为报文头信息存储模块6的存储内容一个具体实例,其存储有SOCKET ID、源IP地址、目的IP地址、源端口号、目的端口号、协议类型(UDP)与报文头信息。
表1
SOCKETID |
源IP地址 |
目的IP地址 |
源端口号 |
目的端口号 |
协议类型 |
报文头信息 |
1 |
10.2.2.2 |
10.1.1.1 |
80 |
3000 |
UDP |
XXX |
2 |
10.4.4.4 |
10.3.3.3 |
90 |
4000 |
UDP |
YYY |
步骤2、将接收到的报文数据封装成可发送的报文,提取该可发送的报文中的报文头信息并将其存储在报文头信息存储模块6中,然后执行步骤4;
步骤3、从报文头信息存储模块6中提取与接收到的报文数据的相同的五元组所对应的报文头信息,并将该报文头信息添加在报文数据中,然后更新添加的报文头信息,形成可发送的报文;
步骤4、发送可发送的报文。
图6所示的方法尤其适用于处理UDP报文,另外,也适用于处理其它报文,如TCP报文。下面以UDP报文为例,对该方法作具体说明,处理其他报文的方法相同,不再赘述。
在上述方法的步骤2中,生成报文并存储报文头信息的方法的具体操作可通过图7所示的流程实现,参见图7,其具体执行以下步骤:
步骤201、SOCKET模块11对接收到的报文数据增加SOCKET ID,例如1,然后将该报文数据发送给传输层信息处理模块2;
步骤202、传输层信息处理模块2、网络层信息处理模块3与链路层信息处理模块4依次对携带了SOCKET ID的报文数据进行UDP封装、IP封装与链路层封装,即增加相应的首部信息;
步骤203、链路层信息处理模块4将封装完成后形成的UDP报文发送给报文头信息处理模块5;
步骤204、报文头信息处理模块5从UDP报文中提取SOCKET ID、五元组与UDP报文头信息并存储在报文头信息存储模块6中。
在该实施例中,步骤203中,链路层信息处理模块4具体是将UDP报文发送给报文头信息处理模块5中的报文接收单元51;相应的,步骤204的操作具体为:报文接收单元51将接收到的UDP报文转发给报文解析单元52,同时发送对该UDP报文进行解析并提取报文头信息的指示信息;报文解析单元52对UDP报文进行解析,提取SOCKET ID、五元组与UDP报文头信息并存储在报文头信息存储模块6中,同时将UDP报文转发给报文发送单元53。
在图6所示实施例的步骤3中,提取、添加与更新报文头信息的方法的具体操作可通过图6所示的流程实现,参见图8,其具体执行以下步骤:
步骤301、SOCKET模块11从报文头信息存储模块6中获取与接收到的报文数据的五元组相同、且对应于同一SOCKET ID的报文头信息,并将该报文头信息添加到接收到的报文数据中;
步骤302、SOCKET模块11根据接收到的报文数据的属性信息以及快速发送报文的装置中的报文发送情况信息,重新计算添加到报文数据中的报文头信息中需要变化的字段,包括UDP长度、UDP校验和、IP首部校验和、IP标识与IP总长度信息,然后利用计算结果数据对添加到报文数据中的报文头信息进行更新,并将该报文数据封装成UDP报文发送给报文头信息处理模块5或报文头信息处理模块5中的报文发送单元53。
图6所示实施例的步骤4中,可以由报文头信息处理模块5或报文头信息处理模块5中的报文发送单元53直接将UDP报文发送给具体的应用模块,也可以将UDP报文发送给物理层信息处理模块7,由物理层信息处理模块7发送给具体的应用模块。其中,由物理层信息处理模块7发送UDP报文的一具体流程为:
步骤401、报文头信息处理模块5将UDP报文发送给物理层信息处理模块7;
步骤402、物理层信息处理模块7将UDP报文发送给具体的应用模块。
具体地,步骤401中可由报文头信息处理模块5中的报文发送单元53将UDP报文发送给物理层信息处理模块7。另外,为了确保UDP报文中报文头信息的准确性,在步骤302与步骤401之间,报文头信息处理模块5还可以对UDP报文头信息做循环冗余码(Cyclic Redundancy Code)检验,判断UDP报文中的首部信息是否正确,若正确,执行步骤401;否则,将该UDP报文发送给SOCKET模块11,重新计算与更新报文头信息,即执行步骤302。
总的有益效果:
基于上述技术方案,本发明可以从UDP报文中提取报文头并存储在报文头信息存储模块中,当以后需要对接收到的数据添加报文头信息时,从报文头信息存储模块中提取并将其直接添加在数据中,然后对添加的报文头进行简单的更新,与现有技术重新计算与添加72%的内容都相同的报文头的方法相比,避免了重复计算与填写报文头的繁琐工作,因此,缩短了TCP/IP协议栈处理数据的时间,节省了TCP/IP协议栈的资源,因此提高了报文发送速度,同时降低了出错率。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。