一种协议栈和应用程序间传输数据的方法及装置制造方法及图纸

技术编号:10181277 阅读:164 留言:0更新日期:2014-07-03 10:57
本发明专利技术提供了一种协议栈和应用程序间传输数据的方法及装置;所述方法包括:接收应用程序发送给协议栈的单链表形式的第一数据;将所述第一数据中各数据块按照单链表的顺序依次映射到传输控制协议TCP段中,在一个TCP段中映射的数据块的长度小于或等于预定长度;所述映射是指将表示所述数据块在发送数据缓冲区中起止位置的信息写入所述TCP段;将映射得到的TCP段依次加入发送队列。本发明专利技术能够在协议栈和应用程序间传输数据的过程中避免复制,提高处理性能。

【技术实现步骤摘要】
一种协议栈和应用程序间传输数据的方法及装置
本专利技术涉及网络领域,尤其涉及一种协议栈和应用程序间传输数据的方法及装置。
技术介绍
目前比较常用的专用协议栈大致分为两种,一种是以linux或者FreeBSD标准协议栈为基础的商用专有协议栈,另一种是遵守TCP协议栈标准,按照某种系统框架进行修改而得出的开源的轻量级协议栈,最常见的能够移植商用的就是LWIP协议栈。其他的协议栈类似OpenTCP这些开源的协议栈大多适用于理论研究以及协议栈教学使用,其实现虽然提出一些比较实用的技术和概念,但缺乏一些具体实现方案,商业化难度较大。传统TCP协议栈在接收和发送数据的时候至少存在有三次数据内存复制,报文从网卡接收到内核空间需要一次复制,内核空间传递到用户空间需要一次复制,从用户空间把数据交给应用程序需要一次复制;发送的过程与之类似。现有各种协议栈基本都是考虑到兼容各种不同的应用程序,因此协议栈中的一些内存复制操作其实是不可避免的,而内存复制是会造成一定的性能下降的。目前LWIP协议栈由于其资源消耗小,处理流程实现简洁而被广泛使用在嵌入式的数据处理终端上,例如图像采集终端,可视化监控终端设备上。LWIP协议栈使用mbuf(存储器缓存)作为接收和发送数据的数据载体来传递数据,虽然避免了从内核空间传递到用户空间这一次复制,但是仍然没有能够避免另外两次复制的发生。
技术实现思路
本专利技术的技术解决问题是如何在协议栈和应用程序间传输数据的过程中避免复制,提高处理性能。为了解决上述问题,本专利技术提供了一种协议栈和应用程序间传输数据的方法,包括:S101、接收应用程序发送给协议栈的单链表形式的第一数据;S102、将所述第一数据中各数据块按照单链表的顺序依次映射到传输控制协议TCP段中,在一个TCP段中映射的数据块的长度小于或等于预定长度;所述映射是指将表示所述数据块在发送数据缓冲区中起止位置的信息写入所述TCP段;将映射得到的TCP段依次加入发送队列。可选地,所述步骤S102包括:S201、当接收到所述第一数据后,创建TCP段作为当前TCP段;S202、将所述第一数据中未映射完成的数据块按照所述单链表的顺序依次映射到所述当前TCP段中,当映射到所述当前TCP段中的数据块的数据长度达到预定长度或所述第一数据已全部映射完成时进行步骤S203;S203、将所述当前TCP段加入发送队列的末尾;S204、判断所述第一数据中是否还存在未映射的数据块,如果不存在则指示映射结束;如果存在则进行步骤S205;S205、创建新的TCP段,将新创建的TCP段的地址记录在所述当前TCP段中;将新创建的TCP段作为当前TCP段,返回步骤S202。可选地,所述步骤S202包括:S202A、在当前TCP段中创建分片,所述分片包括数据首地址和数据长度;创建分片后根据所述单链表的顺序,查找所述第一数据中第一个未映射完的数据块;将所查找到的数据块内未映射数据在发送缓冲区的起始地址写入所创建的分片的数据首地址;S202B、比较该数据块内未映射数据的长度与当前TCP段的剩余长度;所述剩余长度为所述预定长度与所述当前TCP段中已映射的数据块的总长度之差;如果该数据块内未映射数据的长度小于所述剩余长度,则进行步骤S202C;如果该数据块内未映射数据的长度等于所述剩余长度,则将数据块的长度或所述剩余长度写入所创建的分片的数据长度,进行步骤S203;如果该数据块内未映射数据的长度大于所述剩余长度,则将所述剩余长度写入所创建的分片的数据长度,进行步骤S203;S202C、将数据块内未映射数据的长度写入所创建的分片的数据长度;判断所述第一数据中是否还存在未映射的数据块,如果不存在则指示映射结束;如果存在则返回步骤S202A。可选地,所述TCP段各包括一个用于描述本TCP段的结构体tcp_seg;所述tcp_seg包含本TCP段中所映射的数据块的数据总长度,其值等于该TCP段中所有分片的数据长度的总和;所述tcp_seg还包含本TCP段中第一个分片的地址;所述将新创建的TCP段的地址记录在当前TCP段中的步骤包括:将新创建的TCP段的tcp_seg的地址记录在当前TCP段的tcp_seg中;所述分片还包括本TCP段中前一个和下一个分片的地址。可选地,所述的方法还包括:当协议栈收到包含数据的报文且连接处于已建立状态时,将接收到的报文控制块加入接收链表的末尾,将接收到的报文控制块中表示数据起始位置的指针设置为该报文控制块在接收数据缓冲区中的起始地址。本专利技术还提供了一种协议栈和应用程序间传输数据的装置,包括:发送数据接口模块,用于接收应用程序发送给协议栈的单链表形式的第一数据;映射模块,用于将所述第一数据中各数据块按照单链表的顺序依次映射到TCP段中,在一个TCP段中映射的数据块的长度小于或等于预定长度;所述映射是指将表示所述数据块在发送数据缓冲区中起止位置的信息写入所述TCP段;将映射得到的TCP段依次加入发送队列。可选地,所述映射模块包括:映射控制单元、映射执行单元、发送控制单元;所述映射控制单元用于当接收到所述第一数据后,创建TCP段作为当前TCP段发送给所述映射执行单元;所述映射执行单元用于将所述第一数据中未映射完成的数据块按照单链表的顺序依次映射到所述当前TCP段中,当映射到所述当前TCP段中的数据块的数据长度达到预定长度或所述第一数据已全部映射完成时通知所述发送控制单元;所述发送控制单元用于将所述当前TCP段加入发送队列的末尾,然后通知所述映射控制单元;所述映射控制单元还用于当收到所述发送控制单元的通知后,判断所述第一数据中是否存在未映射的数据块,如果不存在则指示映射结束;如果存在则创建新的TCP段,将新创建的TCP段的地址记录在所述当前TCP段中;将新创建的TCP段作为当前TCP段,发送给所述映射执行单元。可选地,所述映射执行单元包括:分片子单元,用于在当前TCP段中创建分片,所述分片包括数据首地址和数据长度;还用于创建分片后根据所述单链表的顺序,查找所述第一数据中第一个未映射完的数据块;将所查找到的数据块内未映射数据在发送缓冲区的起始地址写入所创建的分片的数据首地址;比较子单元,用于比较该数据块内未映射数据的长度与当前TCP段的剩余长度;所述剩余长度为所述预定长度与所述当前TCP段中已映射的数据块的总长度之差;如果该数据块内未映射数据的长度小于所述剩余长度,则通知所述分片子单元;如果该数据块内未映射数据的长度等于所述剩余长度,则指示所述分片子单元将数据块的长度或所述剩余长度写入所创建的分片的数据长度,通知所述发送控制模块;如果该数据块内未映射数据的长度大于所述剩余长度,则指示所述分片子单元将所述剩余长度写入所创建的分片的数据长度,通知所述发送控制模块;所述分片子单元还用于当收到所述比较子单元的通知后将数据块内未映射数据的长度写入所创建的分片的数据长度;判断所述第一数据中是否还存在未映射的数据块,如果不存在则结束;如果存在则创建分片。可选地,所述映射控制单元所创建的TCP段各包括一个用于描述本TCP段的结构体tcp_seg;所述tcp_seg包含本TCP段中所映射的数据块的数据总长度,其值等于该TCP段中所有分片的数据长度的总和;所述tcp_seg还包含本TCP段中第一本文档来自技高网...
一种协议栈和应用程序间传输数据的方法及装置

【技术保护点】
一种协议栈和应用程序间传输数据的方法,包括:S101、接收应用程序发送给协议栈的单链表形式的第一数据;S102、将所述第一数据中各数据块按照单链表的顺序依次映射到传输控制协议TCP段中,在一个TCP段中映射的数据块的长度小于或等于预定长度;所述映射是指将表示所述数据块在发送数据缓冲区中起止位置的信息写入所述TCP段;将映射得到的TCP段依次加入发送队列。

【技术特征摘要】
1.一种协议栈和应用程序间传输数据的方法,包括:S101、接收应用程序发送给协议栈的单链表形式的第一数据;S102、将所述第一数据中各数据块按照单链表的顺序依次映射到传输控制协议TCP段中,在一个TCP段中映射的数据块的长度小于或等于预定长度;所述映射是指将表示所述数据块在发送数据缓冲区中起止位置的信息写入所述TCP段;将映射得到的TCP段依次加入发送队列;其中,所述发送数据缓存区是用于发送报文的、可以被系统任何模块访问的共享内存缓存区,由驱动程序维护。2.如权利要求1所述的方法,其特征在于,所述步骤S102包括:S201、当接收到所述第一数据后,创建TCP段作为当前TCP段;S202、将所述第一数据中未映射完成的数据块按照所述单链表的顺序依次映射到所述当前TCP段中,当映射到所述当前TCP段中的数据块的数据长度达到预定长度或所述第一数据已全部映射完成时进行步骤S203;S203、将所述当前TCP段加入发送队列的末尾;S204、判断所述第一数据中是否还存在未映射的数据块,如果不存在则指示映射结束;如果存在则进行步骤S205;S205、创建新的TCP段,将新创建的TCP段的地址记录在所述当前TCP段中;将新创建的TCP段作为当前TCP段,返回步骤S202。3.如权利要求2所述的方法,其特征在于,所述步骤S202包括:S202A、在当前TCP段中创建分片,所述分片包括数据首地址和数据长度;创建分片后根据所述单链表的顺序,查找所述第一数据中第一个未映射完的数据块;将所查找到的数据块内未映射数据在发送数据缓冲区的起始地址写入所创建的分片的数据首地址;S202B、比较该数据块内未映射数据的长度与当前TCP段的剩余长度;所述剩余长度为所述预定长度与所述当前TCP段中已映射的数据块的总长度之差;如果该数据块内未映射数据的长度小于所述剩余长度,则进行步骤S202C;如果该数据块内未映射数据的长度等于所述剩余长度,则将数据块的长度或所述剩余长度写入所创建的分片的数据长度,进行步骤S203;如果该数据块内未映射数据的长度大于所述剩余长度,则将所述剩余长度写入所创建的分片的数据长度,进行步骤S203;S202C、将数据块内未映射数据的长度写入所创建的分片的数据长度;判断所述第一数据中是否还存在未映射的数据块,如果不存在则指示映射结束;如果存在则返回步骤S202A。4.如权利要求3所述的方法,其特征在于:所述TCP段各包括一个用于描述本TCP段的结构体tcp_seg;所述tcp_seg包含本TCP段中所映射的数据块的数据总长度,其值等于该TCP段中所有分片的数据长度的总和;所述tcp_seg还包含本TCP段中第一个分片的地址;所述将新创建的TCP段的地址记录在当前TCP段中的步骤包括:将新创建的TCP段的tcp_seg的地址记录在当前TCP段的tcp_seg中;所述分片还包括本TCP段中前一个和下一个分片的地址。5.如权利要求1到4中任一项所述的方法,其特征在于,还包括:当协议栈收到包含数据的TCP报文且连接处于已建立状态时,将接收到的TCP报文控制块加入接收链表的末尾,将接收到的TCP报文控制块中表示数据起始位置的指针设置为该报文控制块在接收数据缓冲区中的起始地址。6.一种协议栈和应用程序间传输数据的装置,包括:发送数据接口模块,用于接收应用程序发送给协议栈的单链表形式的第一数据;映射模块,用于...

【专利技术属性】
技术研发人员:冯璐
申请(专利权)人:北京太一星晨信息技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1