数据接收方法、装置和网卡制造方法及图纸

技术编号:18899767 阅读:54 留言:0更新日期:2018-09-11 22:40
本发明专利技术实施例提供了一种数据接收方法、装置和网卡,涉及数据传输领域,所述方法包括:根据TCP接收窗口接收数据,通过将TCP接收窗口的左边缘右移目标距离的方式缩小TCP接收窗口;在TCP接收窗口的右边缘未达到边缘上限时,通过右移TCP接收窗口的右边缘的方式放大缩小后的TCP接收窗口,并再次执行通过将TCP接收窗口的左边缘右移目标距离的方式缩小TCP接收窗口的步骤;在TCP接收窗口的右边缘达到边缘上限时,再次执行通过将TCP接收窗口的左边缘右移目标距离的方式缩小TCP接收窗口的步骤,在TCP接收窗口缩小至关闭时,将历史接收到的数据DMA到用户空间。解决了现有技术中数据传输会发生中断的问题。

Data receiving method, device and network card

The embodiment of the invention provides a data receiving method, device and network card, which relates to the field of data transmission. The method includes: receiving data according to the TCP receiving window, reducing the TCP receiving window by shifting the left edge of the TCP receiving window to the right by moving the target distance; and when the right edge of the TCP receiving window does not reach the upper edge limit. To enlarge the reduced TCP receiving window by shifting the right edge of the TCP receiving window to the right, and perform the steps of reducing the TCP receiving window by shifting the left edge of the TCP receiving window to the right by shifting the target distance; when the right edge of the TCP receiving window reaches the upper edge limit, perform again the steps of reducing the TCP receiving window by shifting the left edge of the TCP receiving window to the right. The step of narrowing the TCP receiving window by moving the edge to the right of the target distance. When the TCP receiving window is narrowed to close, the historical received data is DMA into user space. The problem of interruption of data transmission in the existing technology is solved.

【技术实现步骤摘要】
数据接收方法、装置和网卡
本专利技术实施例涉及数据传输领域,特别涉及一种数据接收方法、装置和网卡。
技术介绍
在符合数据传输协议(英文:TransmissionControlProtocol,简称:TCP)的数据传输过程中,发送端发送TCP数据包至接收端之后,接收端中的网卡将接收该TCP数据包,并将该TCP数据包直接内存访问(英文:DirectionalMemoryAccess,简称:DMA)至中央处理器(英文,CentralProcessingUnit,简称:CPU),由CPU将该TCP数据包拷贝到用户空间。零拷贝接收技术是指网卡直接将接收到的TCP数据包DMA至用户空间,中间无需CPU参与,进而降低CPU的负载,提高CPU的性能的技术。一种基于零拷贝接收技术的数据接收方法包括:网卡根据TCP接收窗口接收TCP数据包,将TCP接收窗口的左边缘右移该TCP数据包的数据大小所对应的距离,当TCP接收窗口的左边缘右移至右边缘,也即TCP接收窗口缩小至关闭时,网卡将接收到的TCP数据包DMA至用户空间。此后,在CPU确认用户空间收到数据且用户空间中仍然可以存储数据时,CPU发送窗口开启指令至网卡,网卡接收到该窗口开启指令之后,重新打开一个TCP接收窗口,并根据重新打开的TCP接收窗口继续接收数据,直至用户空间中存满数据为止。其中,最后一次打开的TCP接收窗口关闭时,网卡累计接收到的数据的数据大小等于用户空间的空间大小。上述方案中,在用户空间中仍然可以存储数据,但是在TCP接收窗口被关闭之后,发送端将无法向网卡继续发送数据,数据传输将发生中断。
技术实现思路
为了解决现有技术中在用户空间仍然可以存储数据的情况下,由于TCP接收窗口关闭而导致的数据传输发生中断的问题,本专利技术实施例提供了一种数据接收方法、装置和网卡,所述技术方案如下:在符合TCP的数据传输过程中,TCP的头部设置有一个16bit的接收窗口的字段,该字段用于告知数据的发送端当前能够接收的数据的数据大小,也即用于表示接收数据的缓冲区的大小。通常情况下,我们将该字段表示的大小称之为TCP接收窗口的窗口大小。TCP接收窗口的窗口大小会随着接收到的数据的数据大小而不断减小。具体的,在网卡接收到发送端发送的数据之后,为了表征网卡能够接收到的数据变小,网卡可以通过将该TCP接收窗口的左边缘右移接收到的数据的数据大小所对应的距离的方式来缩小该TCP接收窗口。比如,在网卡接收到10kb的数据时,说明网卡能够继续接收到的数据的数据大小将减少10kb,所以此时,网卡可以将该TCP接收窗口的左边缘右移10kb所对应的距离。这样,随着数据的接收,TCP接收窗口将不断缩小,在该TCP接收窗口缩小至关闭时,发送端将不能再向网卡发送数据,数据接收过程结束。其中,每个应用进程在运行时,应用进程会在CPU中申请一个用户空间,该用户空间的空间大小即为所需接收的数据的数据大小。TCP接收窗口的左边缘的初始位置对应于该用户空间的起始位置。与上述方案不同的是,在本专利技术实施例的第一方面,提供了一种数据接收方法,该数据接收方法包括:每个应用进程在运行时,应用进程均会在CPU中申请一个用户空间,该用户空间的空间大小即为所需接收的数据的数据大小。在本专利技术实施例中,为了使得网卡能够接收到用户空间的空间大小的数据,网卡中可以预先设置有一个边缘上限,当TCP接收窗口的左边缘右移至该边缘上限时,网卡累计接收到的数据的数据大小与用户空间的空间大小相同,而不会存在接收到的数据不能填充满用户空间,或者接收到的数据会溢出用户空间的问题。其中,该边缘上限为根据用户空间的空间大小设置的TCP接收窗口的右边缘所能达到的最大上限。在实际数据接收过程中,网卡根据开启的TCP接收窗口接收发送端发送的数据,在接收到发送端发送的数据之后,通过将TCP接收窗口的左边缘右移目标距离的方式来缩小TCP接收窗口,该目标距离为接收到的数据的数据大小所对应的距离;此后,网卡检测TCP接收窗口的右边缘是否达到边缘上限,若未达到边缘上限,则通过右移TCP接收窗口的右边缘的方式放大缩小后的TCP接收窗口,并再次执行根据接收到的数据的数据大小缩小TCP接收窗口的步骤;而在检测结果为TCP接收窗口的右边缘达到边缘上限时,根据继续接收到的数据的数据大小继续缩小TCP接收窗口,并在TCP接收窗口关闭时,将历史接收到的全部数据DMA至用户空间。通过在TCP接收窗口的右边缘未达到边缘上限时,通过右移TCP接收窗口的右边缘的方式来放大TCP接收窗口,并根据放大后的TCP接收窗口继续接收数据,直至TCP接收窗口的右边缘达到边缘上限且TCP接收窗口关闭时,将累计接收到的数据DMA至用户空间;解决了现有技术中用户空间中还可以存储数据时TCP接收窗口关闭,数据传输中断的问题,达到了可以避免数据传输中断的效果。在第一方面的第一种可能的实现方式中,通过右移TCP接收窗口的右边缘的方式放大缩小后的TCP接收窗口的步骤可以包括:将缩小后的TCP接收窗口的右边缘右移接收到的数据的数据大小的距离;根据缩小后的TCP接收窗口的左边缘确定放大后的TCP接收窗口的左边缘;或者,确定放大后的TCP接收窗口的窗口大小。结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,上述确定放大后的TCP接收窗口的窗口大小的步骤可以包括:根据缩小后的TCP接收窗口的窗口大小和接收到的数据的数据大小的总和,确定放大后的TCP接收窗口的窗口大小;或者,根据缩小前的TCP接收窗口的窗口大小确定放大后的TCP接收窗口的窗口大小。结合第一方面的第一种可能的实现方式,在第三种可能的实现方式中,根据缩小后的TCP接收窗口的左边缘确定放大后的TCP接收窗口的左边缘;或者,确定放大后的TCP接收窗口的窗口大小之前,方法还包括:检测右移后的TCP接收窗口的右边缘是否超过边缘上限;若检测结果为超过边缘上限,则根据边缘上限确定放大后的TCP接收窗口的右边缘;根据确定的TCP接收窗口的右边缘以及放大前的TCP接收窗口的左边缘,确定放大后的TCP接收窗口的窗口大小;而若检测结果为未超过边缘上限,则执行根据缩小后的TCP接收窗口的左边缘确定放大后的TCP接收窗口的左边缘;或者,确定放大后的TCP接收窗口的窗口大小的步骤。通过在放大TCP接收窗口之前,检测右移后的TCP接收窗口的右边缘是否达到边缘上限,当达到边缘上限时,将边缘上限确定为放大后的TCP接收窗口的右边缘,避免了TCP接收窗口的右边缘会超过上限进而导致接收到的数据会溢出用户空间的问题。结合第一方面、第一方面的第一种可能的实现方式至第四种可能的实现方式中的任一种,在第五种可能的实现方式中,在TCP接收窗口的右边缘未达到边缘上限时,通过右移TCP接收窗口的右边缘的方式放大缩小后的TCP接收窗口之前,方法还包括:检测是否满足TCP接收窗口的窗口放大条件;若满足窗口放大条件,则执行在TCP接收窗口的右边缘未达到边缘上限时,通过右移TCP接收窗口的右边缘的方式放大缩小后的TCP接收窗口的步骤。结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,检测自身是否满足TCP接收窗口的窗口放大条件,包括:检测数据接收模式是否为零拷贝接收模式;和/或,检测缩小后的TCP本文档来自技高网...

【技术保护点】
1.一种数据接收方法,其特征在于,所述方法包括:根据传输控制协议TCP接收窗口接收数据,通过将所述TCP接收窗口的左边缘右移目标距离的方式缩小所述TCP接收窗口,所述目标距离为接收到的所述数据的数据大小所对应的距离,所述TCP接收窗口的窗口大小用于表示接收数据的缓冲区的大小;在所述TCP接收窗口的右边缘未达到边缘上限时,通过右移所述TCP接收窗口的右边缘的方式放大缩小后的所述TCP接收窗口,并再次执行所述根据TCP接收窗口接收数据,通过将所述TCP接收窗口的左边缘右移目标距离的方式缩小所述TCP接收窗口的步骤;所述边缘上限为根据用户空间预先设置的所述TCP接收窗口的右边缘所能达到的最大上限,所述用户空间的空间大小为所需接收的数据的数据大小;在所述TCP接收窗口的右边缘达到所述边缘上限时,再次执行所述根据TCP接收窗口接收数据,通过将所述TCP接收窗口的左边缘右移目标距离的方式缩小所述TCP接收窗口的步骤,在所述TCP接收窗口缩小至关闭时,将历史接收到的数据直接内存访问DMA到所述用户空间。

【技术特征摘要】
1.一种数据接收方法,其特征在于,所述方法包括:根据传输控制协议TCP接收窗口接收数据,通过将所述TCP接收窗口的左边缘右移目标距离的方式缩小所述TCP接收窗口,所述目标距离为接收到的所述数据的数据大小所对应的距离,所述TCP接收窗口的窗口大小用于表示接收数据的缓冲区的大小;在所述TCP接收窗口的右边缘未达到边缘上限时,通过右移所述TCP接收窗口的右边缘的方式放大缩小后的所述TCP接收窗口,并再次执行所述根据TCP接收窗口接收数据,通过将所述TCP接收窗口的左边缘右移目标距离的方式缩小所述TCP接收窗口的步骤;所述边缘上限为根据用户空间预先设置的所述TCP接收窗口的右边缘所能达到的最大上限,所述用户空间的空间大小为所需接收的数据的数据大小;在所述TCP接收窗口的右边缘达到所述边缘上限时,再次执行所述根据TCP接收窗口接收数据,通过将所述TCP接收窗口的左边缘右移目标距离的方式缩小所述TCP接收窗口的步骤,在所述TCP接收窗口缩小至关闭时,将历史接收到的数据直接内存访问DMA到所述用户空间。2.根据权利要求1所述的方法,其特征在于,所述通过右移所述TCP接收窗口的右边缘的方式放大缩小后的所述TCP接收窗口,包括:将缩小后的所述TCP接收窗口的右边缘右移接收到的所述数据的数据大小所对应的距离;根据缩小后的所述TCP接收窗口的左边缘确定放大后的所述TCP接收窗口的左边缘;或者,确定放大后的所述TCP接收窗口的窗口大小。3.根据权利要求2所述的方法,其特征在于,所述确定放大后的所述TCP接收窗口的窗口大小,包括:根据缩小后的所述TCP接收窗口的窗口大小和接收到的所述数据的数据大小的总和,确定放大后的所述TCP接收窗口的窗口大小;或者,根据缩小前的所述TCP接收窗口的窗口大小确定放大后的所述TCP接收窗口的窗口大小。4.根据权利要求2所述的方法,其特征在于,所述根据缩小后的所述TCP接收窗口的左边缘确定放大后的所述TCP接收窗口的左边缘;或者,确定放大后的所述TCP接收窗口的窗口大小之前,所述方法还包括:检测右移后的所述TCP接收窗口的右边缘是否超过所述边缘上限;若检测结果为超过所述边缘上限,则根据所述边缘上限确定放大后的所述TCP接收窗口的右边缘;根据确定的所述TCP接收窗口的右边缘以及放大前的所述TCP接收窗口的左边缘,确定放大后的所述TCP接收窗口的窗口大小。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:若检测结果为未超过所述边缘上限,则执行所述根据缩小后的所述TCP接收窗口的左边缘确定放大后的所述TCP接收窗口的左边缘;或者,确定放大后的所述TCP接收窗口的窗口大小的步骤。6.根据权利要求1至5任一所述的方法,其特征在于,所述在所述TCP接收窗口的右边缘未达到边缘上限时,通过右移所述TCP接收窗口的右边缘的方式放大缩小后的所述TCP接收窗口之前,所述方法还包括:检测是否满足所述TCP接收窗口的窗口放大条件;若满足所述窗口放大条件,则执行所述在所述TCP接收窗口的右边缘未达到边缘上限时,通过右移所述TCP接收窗口的右边缘的方式放大缩小后的所述TCP接收窗口的步骤。7.根据权利要求6所述的方法,其特征在于,所述检测是否满足所述TCP接收窗口的窗口放大条件,包括:检测数据接收模式是否为零拷贝接收模式;和/或,检测缩小后的所述TCP接收窗口的窗口大小是否低于预设阈值。8.根据权利要求1至5任一所述的方法,其特征在于,所述方法还包括:在放大所述TCP接收窗口之后,发送通知报文至所述数据的发送端,所述通知报文用于通知所述发送端放大后的所述TCP接收窗口的窗口大小。9.一种数据接收装置,其特征在于,所述装置包括:接收单元,用于根据传输控制协议TCP接收窗口接收数据,通过将所述TCP接收窗口的左边缘...

【专利技术属性】
技术研发人员:殷石
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东,44

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

1