CN113645291B - 数据通信方法及装置、电子设备和存储介质 - Google Patents
数据通信方法及装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN113645291B CN113645291B CN202110891988.5A CN202110891988A CN113645291B CN 113645291 B CN113645291 B CN 113645291B CN 202110891988 A CN202110891988 A CN 202110891988A CN 113645291 B CN113645291 B CN 113645291B
- Authority
- CN
- China
- Prior art keywords
- data packet
- data
- buffer
- sender
- data packets
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
- H04L67/5681—Pre-fetching or pre-delivering data based on network characteristics
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/131—Protocols for games, networked simulations or virtual reality
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
Abstract
根据本公开的示例实施例,提供了数据通信方法及装置、电子设备和存储介质,涉及通信领域,尤其涉及数据通信、云游戏技术领域。数据通信方法包括:响应于确定在阈值时间内从发送方接收到第一数据包,向发送方发送针对第一数据包的确认消息;响应于确定在阈值时间内未从发送方接收到第二数据包,向发送方发送针对第二数据包的伪确认消息,其中伪确认消息与确认消息一致。本公开的实施例能够有效降低网络通信延迟,同时提高通信的可靠性。
Description
技术领域
本公开涉及通信领域,并且更具体地,涉及数据通信方法及装置、电子设备和存储介质和计算机程序产品。
背景技术
在某些应用,例如联机游戏中,对通信延迟要求较高。现有的用于联机游戏的通信协议中,有些只用于玩家同服务器之间建立长连接传输数据,玩家之间的通信需要通过中心服务器进行中转。有些既可用于玩家同服务器之间通信,也可以用于玩家之间交换数据,进行游戏进程的推演和计算。通常每个玩家要将自己的数据传输给同局游戏里所有其他玩家,各玩家在本地计算本局游戏下一个时间点的状态。全球的游戏玩家接入的网络环境参差不齐,在某些网络中,由于网络延迟等问题,导致丢包率高,影响应用上述协议的网络游戏体验。
发明内容
本公开提供了一种数据通信方法及装置、电子设备和存储介质和计算机程序产品。
根据本公开的第一方面,提供了一种数据通信方法。该方法包括:响应于确定在阈值时间内从发送方接收到第一数据包,向发送方发送针对第一数据包的确认消息;响应于确定在阈值时间内未从发送方接收到第二数据包,向发送方发送针对第二数据包的伪确认消息,其中伪确认消息与确认消息一致。
在本公开的第二方面中,提供了另一种数据通信方法。该方法包括:接收第一数据包;将第一数据包暂存在接收缓冲器中;以及按照接收到第一数据包的顺序,将第一数据包暂存到读取缓冲器中。
在本公开的第三方面中,提供了一种数据通信装置。该装置包括:确认消息发送模块,被配置为响应于确定在阈值时间内从发送方接收到第一数据包,向发送方发送针对第一数据包的确认消息;以及伪确认消息发送模块,被配置为响应于确定在阈值时间内未从发送方接收到第二数据包,向发送方发送针对第二数据包的伪确认消息,其中伪确认消息与确认消息一致。
在本公开的第四方面中,提供了另一种数据通信装置。该装置包括:接收模块,被配置为接收第一数据包;第一暂存模块,被配置为将第一数据包暂存在接收缓冲器中;以及第二暂存模块,被配置为按照接收到第一数据包的顺序,将第一数据包暂存到读取缓冲器中。
在本公开的第五方面中,提供了一种电子设备,包括一个或多个处理器;以及存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现根据本公开的第一方面的方法。
在本公开的第六方面中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现根据本公开的第一方面的方法。
在本公开的第七方面中,提供了一种计算机程序产品,计算机程序在被处理器执行时实现根据本公开的第一方面的方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
图1示出了一种常规数据通信的流程示意图;
图2示出了本公开的多个实施例能够在其中实现的示例环境的示意图;
图3示出了根据本公开的实施例的数据通信方法的流程图;
图4示出了根据本公开的实施例的数据通信方法的滑动窗口示意图;
图5示出了根据本公开的实施例的数据通信方法的流程示意图;
图6示出了根据本公开的实施例的数据通信装置的示意图;
图7示出了根据本公开的另一实施例的数据通信方法的流程图;
图8示出了根据本公开的另一实施例的数据通信方法的流程示意图;
图9示出了根据本公开的另一实施例的数据通信装置的示意图;
图10示出了根据本公开的另一实施例的数据通方法的流程示意图;以及
图11示出了能够实施本公开的多个实施例的计算设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本公开的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如前面所提到的,在某些应用,例如联机游戏中,对通信延迟要求较高。由于网络环境参差不齐,网络延迟和抖动等会导致丢包率高。对于网络游戏来说,这会给玩家造成较差的网络游戏体验。
针对上述问题,目前有如下方案:(1)使用基于传输控制协议(TransmissionControl Protocol,TCP)的超文本传输协议(Hyper Text Transfer Protocol overSecureSocket Layer,HTTPS)或者安全传输层协议(Transport Layer Security,TLS)进行通信。该方案通常只用于玩家同服务器之间建立长连接传输数据,玩家之间的通信需要通过中心服务器进行中转。(2)基于用户数据报协议(User Datagram Protocol,UDP)实现的自定义通信协议,既可用于玩家同服务器之间通信,也可以用于玩家之间交换数据,进行游戏进程的推演和计算。通常每个玩家要将自己的数据传输给同局游戏里所有其他玩家,各玩家在本地计算本局游戏下一个时间点的状态。
可见,上述方案主要是基于TCP或者UDP协议实现的。这些传统的方案存在以下问题:(1)TCP协议每次通信前都需要建立连接,无法做到对有效数据立即发送,并且在网络不稳定丢包率高的情况下,必须等到收全报文才能处理,由此增加了上层应用处理数据的延时。(2)UDP协议可以提供低延时的传输,但是UDP协议是不可靠协议,在数据包丢失的时候应用层无法感知。
下面结合图1对此进行进一步说明。图1示出了一种常规数据通信的流程100示意图。如图1所示,其中示出了一种传统的数据通信的流程。其中灰色框代表接收并处理的数据包,带有数字的白色框代表接收但还不满足处理条件的数据包。发送方10依次发送第1、2、3、4个数据包,接收方20接收数据包,将其暂存到接收缓冲器中,并对其排序依次处理。接收缓冲器初始状态为空,rcv_nxt=1(即下一个待接收的数据包的序号为1),预期接收下一个序号为1的数据包。
第一个数据包到达,放入接收缓冲器中,rcv_nxt更新为2。此时第一个数据包可以被应用层读取。如图1所示,第二个数据包丢失,接收方并不知情,rcv_nxt继续为2,等待第二个数据包到达。第三个数据包由于网络延迟尚未到达。第四个数据包到达,放入接收缓冲器中,由于序号和rcv_nxt并不相符,第四个数据包只能暂存于接收缓冲器中,无法被应用层读取。当第三个数据包到达时,被放入接收缓冲器中。由于其序号和rcv_nxt并不相符,第三个数据包只能暂存于接收缓冲器中,无法被应用层读取。发送方10重传第二个数据包(重传机制并不是此处讨论的重点,可能是单纯的确认超时,发送方10迟迟等不到第二个数据包的确认,从而触发重传;又或者发送方10连续收到了第四个、第三个数据包的确认(ACK),猜测第二个数据包可能丢失而主动重传)。当第二个数据包到达时,被放入接收缓冲器中,rcv_nxt连续更新为2、3、4、5(即下一个等待接收的序号为5)。此时第2、3、4个数据包可以被应用层读取。
可见,由于第二个数据包丢失,即使第3、4个数据包到达也需要等待第二个数据包重传之后才能交付应用层来顺序读取,最终的顺序为1、2、3、4,很多基于UDP的优化协议都有这个现象,例如快速网络传输协议(Fast and Reliable ARQ Protocol,KCP)/快速UDP网络连接(Quick UDP Internet Connection,QUIC)等。
为了改善用户体验,对于数据传输而言,需要保证数据尽可能地快速可靠地送达接收方。
为了解决数据通信中,例如,前面所提到的联机游戏的解决方案中存在的问题,本公开的实施例提供了改进的数据通信方案。在该方案中,响应于确定在阈值时间内从发送方接收到第一数据包,向发送方发送针对第一数据包的确认消息;响应于确定在阈值时间内未从发送方接收到第二数据包,向发送方发送针对第二数据包的伪确认消息,其中伪确认消息与确认消息一致。即,在阈值时间内未从发送方接收到第二数据包的情况下,也向发送方发送确认消息,使得发送方认为接收方已经接收到该数据包,从而发送方避免继续等待,从而能够防止滑动窗口拥堵。根据本公开的另一方面的方案中,接收第一数据包,将第一数据包暂存在接收缓冲器中,并且按照接收到第一数据包的顺序,将第一数据包暂存到读取缓冲器中。以此方式,能够使得应用层直接从读取缓冲器中对数据包进行读取。而不是如同传统技术那样要等到数据包按照顺序在缓冲器中排列之后,应用层才能读取,从而能够显著降低数据传输的延时。
以下将参照附图来具体描述本公开的实施例。图2示出了本公开的多个实施例能够在其中实现的示例环境200的示意图。如图2所示,示例环境200中包括发送方210和接收方220。
在一些实施例中,发送方210可以是任何能够发送数据包的设备。接收方220可以是任何能够接收数据包的设备。
在一些实施例中,发送方210以及接收方220可以包括但不限于个人计算机、服务器计算机、手持或膝上型设备、移动设备(诸如移动电话、个人数字助理PDA、媒体播放器等)、消费电子产品、游戏机、小型计算机、大型计算机、云计算资源等。
应当理解,仅出于示例性的目的描述示例环境200的结构和功能并不旨在限制本文所描述主题的范围。本文所描述主题可以在不同的结构和/或功能中实施。
上文描述的技术方案仅用于示例,而非限制本发明。应理解,示例环境200还可以具有其他实现方式。为了更清楚地解释本公开方案的原理,下文将参考图3至图5来更详细描述。图3示出了根据本公开的实施例的数据通信方法的流程图;图4示出了根据本公开的实施例的数据通信方法的滑动窗口示意图;图5示出了根据本公开的实施例的数据通信方法的流程示意图。
图3示出了根据本公开的实施例的数据通信方法的流程图。在某些实施例中,过程300可以在图2的发送方210和接收方220中实现。现参照图3并结合图2至图5描述根据本公开实施例的数据通信方法的过程300和500。为了便于理解,在下文描述中提及的具体实例均是示例性的,并不用于限定本公开的保护范围。
在302,响应于确定在阈值时间内从发送方210接收到第一数据包,向发送方210发送针对第一数据包(以下通常简称数据包)的确认消息。例如,接收方220在阈值时间内从发送方210接收到第一数据包,则向发送方210发送确认消息。发送方210在接收方确认接收到第一数据包的情况下,可以继续后续数据包的发送。
在某些实施例中,收到一个数据包后,可以进行自动重传请求(AutomaticRepeat-reQuest,ARQ)检查,判断该数据包是否合法。该判断可包括确定该数据包是否已被接收方确认过,如果该数据包尚未被确认过,则可以向发送方210发送针对该数据包的确认消息。以此方式,能够避免重复接收同一数据包。例如,由于网络波动,接收方220收到疑似丢失的第2号数据包和重传的第2号数据包,通过ARQ检查会保证只有第一次收到的第2号数据包被放入接收缓冲器rcv_buf中。
在某些实施例中,按照数据包的发送顺序,向发送方发送针对数据包的确认消息。以此方式,能够兼容现有的ARQ协议。
在某些实施例中,在阈值时间内从发送方210接收到第一数据包后,将第一数据包暂存在接收缓冲器rcv_buf中,以备后续过程中,由应用层从接收缓冲器rcv_buf中进行读取。以此方式,能够兼容现有的ARQ协议。
在某些实施例中,将第一数据包暂存在接收缓冲器rcv_buf中包括:响应于确定接收到第一数据包的顺序与发送第一数据包的顺序一致,将第一数据包暂存到接收缓冲器rcv_buf中的能够被应用层直接读取的第一缓冲区中;以及响应于确定接收到第一数据包的顺序与发送第一数据包的顺序不一致,将第一数据包暂存到接收缓冲器rcv_buf中不能被应用层直接读取的第二缓冲区中。通过该实施例中将第一数据包暂存在接收缓冲器rcv_buf中的方式,能够实现与现有的ARQ协议兼容。
在某些实施例中,响应于确定接收第一数据包的顺序与发送第一数据包的顺序一致,可以将第一数据包暂存到接收缓冲器rcv_buf中的能够被应用层直接读取的第一缓冲区中包括:响应于确定第一数据包中标识第一数据包的发送顺序的发送序号与接收缓冲器rcv_buf中指示下一个待接收的数据包的指示序号一致,可以将第一数据包暂存在第一缓冲区中。在某些实施例中,发送第一数据包的顺序可通过第一数据包中所包括的用于标识发送顺序的序号来确定。例如,如图5所示,在某些实施例中,接收方220在rcv_nxt=1时,即下一个待接收的包序号为1时,接收到第1号数据包(其中标识发送顺序的序号为1),则表明接收到第一数据包的顺序与发送第一数据包的顺序一致,从而可将第一数据包暂存到接收缓冲器rcv_buf中的能够被应用层直接读取的第一缓冲区(可称为已确认接收缓冲区)中。暂存到第一缓冲区中的数据包能够被应用层直接读取。因为第一缓冲区中的数据是经过排序的,ARQ协议设计上可确保经严格排序的数据包才能被读取。因此,在某些实施例中,第一缓冲区中数据是可以随时被应用层读取的。以此方式,能够实现与现有的ARQ协议兼容。
在某些实施例中,其中响应于确定接收到第一数据包的顺序与发送第一数据包的顺序不一致,将第一数据包暂存到接收缓冲器rcv_buf中不能被应用层直接读取的第二缓冲区中包括:响应于确定第一数据包中标识第一数据包的发送顺序的发送序号与接收缓冲器rcv_buf中指示下一个待接收的数据包的指示序号不一致,可将第一数据包暂存到第二缓冲区中。在某些实施例中,例如,如图5所示,接收方220在rcv_nxt=2时,即下一个待接收的包序号为2时,接收到第4号数据包(其中标识发送顺序的序号为4),则表明接收到数据包的顺序与发送第一数据包的顺序不一致,则可以将第一数据包暂存到接收缓冲器rcv_buf中不能被应用层直接读取的第二缓冲区中(可称为待接收缓冲区)。暂存到第二缓冲区中的第n号数据包在rcv_nxt指向n时,可以被移入第一缓冲区中,从而能够被应用层读取。以此方式,能够实现与现有的ARQ协议兼容。
在某些实施例中,将第一数据包暂存到接收缓冲器rcv_buf中的能够被应用层直接读取的第一缓冲区中包括:按照第一数据包的标识发送顺序的序号,将各个第一数据包依次暂存到第一缓冲区中的与序号对应的位置。例如,在某些实施例中,如图5所示,可将第1号数据包暂存到接收缓冲器rcv_buf的第一个位置(存储单元),可将第3号数据包暂存到接收缓冲器rcv_buf的第三个位置(存储单元);可将第4号数据包暂存到接收缓冲器rcv_buf的第四个位置(存储单元)。而第2号数据包由于被跳过,所以第二个位置处为空。以此方式,能够实现与现有的ARQ协议兼容。
在304,响应于确定在阈值时间内未从发送方210接收到第二数据包,向发送方发送210针对第二数据包的伪确认消息,其中伪确认消息与确认消息一致。例如,在某些实施例中,伪确认消息与确认消息采用同样的形式、格式、长度等。例如,在某些实施例中,伪确认消息与确认消息可都采用发送数字“1”的方式来向发送方确认收到数据包等。在阈值时间内接收方220未接收到来自发送方210的数据包(该未接收到的数据包被称为第二数据包),则可以向发送方210发送确认消息,使得发送方210认为接收方220已经收到了该第二数据包。由此使得发送方210能够进行后续数据包的发送。因为,在数据通信中,由于物理资源受限(网络带宽,设备内存等),自动重传请求(ARQ)协议通常提供流量控制机制,防止发送方无限制的发送数据包。因此,需要在保证发送方210确认接收方220已经成功接收到所发送的数据包的情况下,才继续进行后续数据包的发送。
下面参考附图4对此进一步说明。图4中示出了滑动窗口400,如图4所示,灰色代表发送且收到确认的数据包,白色代表发送但尚未确认送达的数据包,snd_una指向第一个待确认的数据包(之前的已全部确认送达),snd_nxt指向下一个待发送的数据包,snd_wnd大小决定了发送速率(snd_nxt-snd_una>=snd_wnd时,停止继续发送数据)。可见,由于发送方210受到滑动窗口的限制,第一个待确认的数据包与待发送的数据包之间的距离不能超过窗口限制的长度。
对于前面图1中所示的情况,第2号数据包在传送过程中丢失,需要重传。导致接收方220对第2号数据包的确认晚于第3、第4号数据包(而且考虑到确认也可能丢失,网络不稳定时可能情况更为复杂),因此snd_una无法及时更新(阻塞在第2号数据包),即使后面的第3、4号数据包等等都已经收到确认了),这隐性地影响了发送速率。
在许多应用中,例如玩家联机对战中,绝大部分的数据包都有很强的时效性,对于接收方长时间没收到某个数据包,也没有等待的必要。例如某些操作指令移动、射击等。经常延迟送达反容易被服务器误判成作弊等。对于某些必须准确送达的关键数据,上层应用也会自动重传。
鉴于上述因素,在某些实施例中,rcv_buf在处理接收到的数据包时,如果发现某一个数据包长时间(阈值可调,比如国内联机游戏延迟200ms,海外游戏300ms)未收到,可以自动跳过等待,将该数据包标记成已收到,底层ARQ会自动负责相关的处理,发送方收到对应的确认会立即更新snd_una,恢复可用发送缓冲大小。下面结合附图5进行详细介绍。
如图5所示,接收缓冲器rcv_buf的初始状态为空,预期接收下一个序号为1的数据包到达,即等待第一个数据包到达。rcv_nxt=1,表示下一个待接收的包序号为1。接下来,第1号数据包到达,放入(也可称为暂存)rcv_buf中,rcv_nxt更新为2。第1号数据包可以被应用层读取。由于第2号数据包丢失,rcv_nxt继续为2,等待第2号数据包到达。第3号数据包由于网络延迟尚未到达。第4号数据包到达,被放入rcv_buf中。由于序号和rcv_nxt并不相符,所以将其暂存于rcv_buf中的待接收缓冲区中(该缓冲区中的序号不连续),同时记录到达时间。此时第4号数据包无法被应用层读取。第3号数据包到达,放入rcv_buf中,由于序号和rcv_nxt并不相符,同样暂存于rcv_buf中的待接收缓冲区中,同时记录到达时间。第3号数据包同样无法被应用层读取。
在某些实施例中,在等待第2号数据包到达经过阈值时间后,不再等待第2号包的到达。例如,通过比较后续已确认的第3号和第4号数据包的到达时间,发现第2号数据包已经超过阈值时间未到达。不再继续等待第2号数据包,而是将其当作已成功收到,继续后续处理。因此,向发送方210发送确认消息,以告知发送方210该第2号数据包已经被收到。由于接收方并未真正收到该第2号数据包,所以该确认消息实际上为伪确认消息。由于后续第3号和第4号数据包已收到,rcv_nxt更新为5,即等待标号为5的数据包到达。
以此方式,通过响应于确定在阈值时间内未从发送方接收到第二数据包,向发送方发送针对第二数据包的伪确认消息,使得发送方210能够及时更新snd_una,即及时更新指向第一个待确认的数据包。换言之,滑动窗口的指针snd_nxt指向下一个待发送的数据包,从而发送方210能够继续发送下一个数据包。由此避免了由于长时间等待第二数据包而造成滑动窗口拥堵。
在某些实施例中,发送方210可能会重传第2号数据包,取决于接收方220决定跳过第2号数据包后的确认抵达时间。在某些实施例中,第2号数据包可能延迟到达接收方220。在某些实施例中,向发送方210发送针对第2号数据包的伪确认消息后,如果发送方针对第2号数据包进行重新发送或者在阈值时间后第2号数据包到达接收方220,则接收方220丢弃所重发的或延迟到达的第2号数据包。在某些实施例中,无论是重传的第2号数据包还是之前发送的第2号数据包延迟到达接收方,由于rcv_nxt=5>2,即,指向下一个待发送的数据包指向的是5,大于2,因此接收方220会忽略该数据包,而等待接收第5号数据包。如果重传该数据包,对于底层传输协议就是一个全新的数据包,需要发送方用新的标号标识该数据包,例如将其作为第5号数据包进行发送,接收方220会将其作为全新数据包进行接收。通过向发送方210发送针对第2数据包的伪确认消息后,丢弃发送方针对第二数据包新发送的数据包或者在阈值时间后到达的第二数据包,从而与ARQ机制兼容。
图6示出了根据本公开的实施例的数据通信装置的示意图。如图6所示,数据通信装置600可以包括:确认消息发送模块610,被配置为响应于确定在阈值时间内从发送方接收到第一数据包,向发送方发送针对第一数据包的确认消息;以及伪确认消息发送模块620,被配置为响应于确定在阈值时间内未从发送方接收到第二数据包,向发送方发送针对第二数据包的伪确认消息,其中伪确认消息与确认消息一致。
在某些实施例中,数据通信装置600还包括:第一暂存模块,被配置为将第一数据包暂存在接收缓冲器中。
在某些实施例中,第一暂存模块包括:第一缓冲区第一暂存模块,被配置为响应于确定接收到第一数据包的顺序与发送第一数据包的顺序一致,将第一数据包暂存到接收缓冲器rcv_buf中的能够被应用层直接读取的第一缓冲区中;以及第二缓冲区第一暂存模块,被配置为响应于确定接收到第一数据包的顺序与发送第一数据包的顺序不一致,将第一数据包暂存到接收缓冲器rcv_buf中不能被应用层直接读取的第二缓冲区中。
在某些实施例中,数据通信装置600还包括:丢弃模块,被配置为丢弃发送方针对第二数据包新发送的数据包或者在阈值时间后到达的第二数据包。
下面结合图7和图8描述根据本公开的另一实施例的数据通信方法。图7示出了根据本公开的另一实施例的数据通信方法的流程图;图8示出了根据本公开的另一实施例的数据通信方法的流程示意图。
现参照图7并结合图8描述根据本公开实施例的数据通信方法的过程700。在某些实施例中,过程700可以在图2的发送方210和接收方220中实现。为了便于理解,在下文描述中提及的具体实例均是示例性的,并不用于限定本公开的保护范围。
在702,接收第一数据包。例如,接收方220接收来自发送方210的数据包。
在704,将第一数据包暂存在接收缓冲器rcv_buf中。在某些实施例中,将第一数据包暂存在接收缓冲器rcv_buf中包括:按照第一数据包的标识发送顺序的序号,将各个第一数据包依次暂存到缓冲器rcv_buf的第一缓冲区中的与序号对应的位置。例如,参考图8,图8所示的通信方法的过程800可以在图2所示的环境200中实施。与前面所提到的类似,图中灰色代表接收并处理的数据包,白色代表接收但还不满足处理条件的数据包。图8中所示的第4号数据包虽然比第1号和第2号数据包先到达,但是由于其中标识发送顺序的序号与rcv_nxt所指示的不一致,所以第4号数据包不能放入第一缓冲区中,仅能暂存到第二缓冲区中。待rcv_nxt=4时,第4号再数据包从第二缓冲区移入第一缓冲区中。该移入过程图8中并未显示。如图8所示,第1号至第4号数据包最终依次排列在缓冲器rcv_buf的第一缓冲区中的第1至第4位置处。以此方式,能够维持原有的确认机制,从而实现与现有的ARQ协议兼容。
在某些实施例中,将第一数据包暂存在接收缓冲器中包括:可将在阈值时间后延迟到达的第一数据包和发送方针对延迟到达的第一数据包重新发送的数据包两者中先到达的第一数据包暂存到接收缓冲器rcv_buf和读取缓冲器中。例如,由于网络波动,接收方220接收到疑似丢失的第2号数据包和重传的第2号数据包。通过ARQ确认机制,保证只有第一个收到的第2号数据包会被放入接收缓冲器rcv_buf中。以此方式,能够避免数据重复接收导致数据的错误。
在706,按照接收到第一数据包的顺序,将第一数据包暂存到读取缓冲器中。例如,在某些实施例中,如图8所示,第1号数据包先到达,被暂存到接收缓冲器rcv_buf中。之后可以将第1号数据包暂存到读取缓冲器read_buf中。然后,第4号数据包到达,可被暂存到接收缓冲器rcv_buf中。之后可以将第4号数据包暂存到读取缓冲器read_buf中。然后依次是第3号和第2号数据包,可被暂存到到读取缓冲器read_buf中。以此方式,解决了等待序号靠前的数据包先到达之后,序号靠后的数据包才能被读取的缺陷,能够显著降低等待时间。
在某些应用中,例如在联机游戏场景中,很多使用UDP协议传输的数据包并没有强制的顺序关系。即使他们之间并没有依赖关系。然而,根据传统的方案,会导致某个数据包丢失后,尚未成功重传之前,后续到达的数据包都无法处理。例如,第1至第4号数据包可能是完全不同玩家间的交互数据,先处理哪个数据包都是正确合理的。因此,在本公开的某些实施例中,通过将接收的数据包暂存到读取缓冲器中,使得应用层能够从中直接读取数据包,从而降低了排队接收所导致的时延。
在某些实施例中,如图8所示,将数据包的读取和确认拆分,即收到的数据包数据部分不仅可暂存到接收缓冲器rcv_buf中,还暂存到读取缓冲器中。数据包依旧保留在接收缓冲器rcv_buf的接收队列中,维持原有的确认机制(兼容ARQ原有逻辑)。这样既保留了原有ARQ协议的可靠特性,又没有等待包排队的问题。
如图8所示,在某些实施例中,发送方依次发送第1,2,3,4数据包,接收方使用接收缓冲器rcv_buf接收数据包,并对其排序依次处理。可保持原有的确认/重传机制不变。而且每个收到的数据包可暂存到读取缓冲器read_buf中,上层应用可以直接对其中的数据包进行读取。
通过图8的流程图,可以发现,虽然第2号数据包丢失,但是第3和4号数据包依旧可以正常读取。重传机制可以保证第2号数据包最终收到。该实施例中,数据包最终被读取的顺序为1、4、3和2。这与数据包到达的顺序一致。
在某些实施例中,该数据通信方法还包括:应用层基于第一数据包被暂存到读取缓冲器中的顺序,读取第一数据包。例如,在某些实施例中,暂存到读取缓冲器read_buf中的数据能够被随时读取。因此,首先被暂存到读取缓冲器read_buf中的数据能够被最先读取,从而避免了等待时间。
在某些实施例中,该方法还包括:响应于确定在阈值时间内从发送方210接收到第一数据包,向发送方210发送针对第一数据包的确认消息。以此方式,能够与ARQ协议兼容,使得发送方能够进行后续数据包的发送。
在某些实施例中,将第一数据包暂存到读取缓冲器read_buf中包括:仅将第一数据包中的数据负载暂存到读取缓冲器中。例如,在某些实施例中,仅将数据包中的数据负载部分,而数据报头等其他部分并不暂存到读取缓冲器中。以此方式,能够节省缓冲器中的存储空间。
在某些实施例中,该方法还还包括:确定第一数据包未被确认过;以及针对第一数据包,向发送方210发送确认消息。例如,对接收的第一数据包进行ARQ检查,以确定该数据包是否为合法的数据包。以此方式,能够避免重复接收数据包。
图9示出了根据本公开的另一实施例的数据通信装置的示意图;(模块图)如图9所示,数据通信装置900可以包括:接收模块910,被配置为接收第一数据包;第一暂存模块920,被配置为将所述第一数据包暂存在所述接收缓冲器中;以及第二暂存模块930,被配置为按照接收到所述第一数据包的顺序,将所述第一数据包暂存到读取缓冲器中。
在某些实施例中,所述第一暂存模块920包括:暂存选择模块,被配置为将在阈值时间后延迟到达的所述第一数据包和所述发送方针对所述延迟到达的所述第一数据包重新发送的数据包两者中先到达的第一数据包暂存到所述接收缓冲器rcv_buf和所述读取缓冲器中。
在某些实施例中,数据通信装置还包括:伪确认消息发送模块,被配置为响应于确定在所述阈值时间内未从所述发送方接收到第二数据包,向所述发送方发送针对所述第二数据包的伪确认消息,其中所述伪确认消息与所述确认消息一致。
图10示出了根据本公开的另一实施例的数据通方法的流程示意图(图表4)。图10所示实施例的数据通信方法的过程1000可以在图2所示的示例环境200中实施。
如图10所示,在某些实施例中,与图8中所示的类似,灰色框代表接收并处理的数据包,带有数字的白色框代表接收但还不满足处理条件的数据包。在图10所示的实施例中,接收缓冲器rcv_buf的状态与图5中所示的接收缓冲器rcv_buf的状态一致。
如图8所示,在初始时,接收缓冲器rcv_buf的初始状态为空,预期接收下一个序号为1的数据包到达。此时rcv_nxt=1。接下来第1号数据包到达,暂存到rcv_buf中,rcv_nxt更新为2。并且还将第1号数据包暂存到读取缓冲器read_buf中。然后,第4号数据包先到达,被暂存到接收缓冲器rcv_buf中。但是由于其中标识发送顺序的序号与rcv_nxt所指示的不一致,所以第4号数据包不能放入第一缓冲区中,仅能暂存到第二缓冲区中。待rcv_nxt=4时,第4号再数据包从第二缓冲区移入第一缓冲区中。该移入过程图8中并未显示。此外,第4号数据包被暂存到接收缓冲器rcv_buf中之后,还可以将第4号数据包暂存到读取缓冲器read_buf中。然后第3号数据包到达,同样被暂存到接收缓冲器中和读取缓冲器rcv_buf中。
在某些实施例中,在等待第2号数据包到达经过阈值时间后,不再等待第2号包的到达。例如,通过比较第3号和第4号数据包的到达时间,发现第2号数据包已经超过阈值时间未到达。不再继续等待第2号数据包,而是将其当作已成功收到,继续后续处理。因此,向发送方210发送伪确认消息,以告知发送方210该第2号数据包已经被收到。由于后续第3号和第4号数据包已收到,rcv_nxt更新为5,即等待标号为5的数据包到达。
如图8所示,第1号和3、4号数据包最终排列在接收缓冲器rcv_buf的第一缓冲区中的第1、3和号4位置处。第2号位置处为空。以此方式,能够维持原有的确认机制,从而实现与现有的ARQ协议兼容。而在读取缓冲器read_buf中,第1号和3、4号数据包的排列顺序为1、4和3。暂存到读取缓冲器read_buf中的数据包能够随时被读取。例如,第2号数据包被存入到读取缓冲器read_buf中,可立即被应用层读取。同样,第4号和第3号数据包一旦被存入读取缓冲器read_buf中,即可立即被应用层读取。以此方式,解决了等待序号靠前的数据包先到达之后,序号靠后的数据包才能被读取的缺陷,能够显著降低等待时间。此外,通过响应于确定在阈值时间内未从发送方接收到第二数据包,向发送方发送针对第二数据包的伪确认消息,使得发送方210能够及时更新滑动窗口的指针snd_nxt,以指向下一个待发送的数据包,从而发送方210能够继续发送下一个数据包。由此避免了由于长时间等待第二数据包而造成滑动窗口拥堵。
在某些实施例中,按照接收到第一数据包的顺序,将第一数据包暂存到读取缓冲器中。在某些实施例中,按照接收到第一数据包的顺序,将所述数据包暂存到所述接收缓冲器rcv_buf中和所述读取缓冲器中。以此方式,使得接收到的数据包能够被应用层立即读取,即根据数据包到达的顺序被读取,减少等待时间。
在某些实施例中,数据通信方法还包括:响应于确定在阈值时间内未从发送方接收到第二数据包,向发送方发送针对第二数据包的伪确认消息,其中伪确认消息与确认消息一致。即,在阈值时间内未从发送方接收到第二数据包也向发送方发送确认消息,使得发送方认为接收方已经接收到该数据包,从而发送方能够避免继续等待,从而能够防止滑动窗口拥堵。
在某些实施例中,可以在通信协议中规定,应用层仅从读取缓冲器read_buf中读取数据包,而不从接收缓冲器rcv_buf中读取数据包,即使在接收缓冲器rcv_buf中已经按顺序排列好数据包。
通过上述实施例,提出了数据通信方法。一方面,在阈值时间内未从发送方接收到第二数据包的情况下,向发送方发送针对第二数据包的伪确认消息,从而忽略该第二数据包。以此方式解决了等待序号靠前的数据包先到达之后,序号靠后的数据包才能被读取的缺陷,能够显著降低等待时间。另一方面,按照接收到第一数据包的顺序,将第一数据包从接收缓冲器rcv_buf暂存到读取缓冲器中。以此方式,使得接收到的数据包能够被应用层立即读取,即根据数据包到达的顺序被读取,减少等待时间。
在某些实施例中,例如,对于游戏玩家而言,在各种网络环境中都能获得很好的联机体验。例如,实现在<40%丢包率网络环境下某些类型游戏可以正常联机。
上面的一些实施例中,以联机游戏为例进行了数据包传输的说明,本公开并不限于联机游戏中的数据通信。而是可以应用于对于延时敏感的任何数据通信。本公开实施例的技术能有效降低网络通信延迟,同时提供可靠性通信。
本公开实施例的方案可以以插件的形式配合各种UDP优化协议传输。本公开实施例的方案没用改变原始数据包结构,方便在上层添加诸如前向纠错码(Forward ErrorCorrection,FEC)纠错加强网络稳定或高级加密标准(Advanced Encryption Standard,AES)保证安全性等等。实际使用时,可以根据需要决定采样本发明各个实施例中的哪种方案。本公开实施例的方案能够针对各种场景实现严格有序的可靠传输或者局部乱序的更低延迟传输。
图11示出了能够实施本公开的多个实施例的计算设备1100的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图11所示,设备1100包括计算单元1101,其可以根据存储在只读存储器(ROM)1102中的计算机程序或者从存储单元1108加载到随机访问存储器(RAM)1103中的计算机程序,来执行各种适当的动作和处理。在RAM 503中,还可存储设备1100操作所需的各种程序和数据。计算单元1101、ROM 1102以及RAM 1103通过总线1104彼此相连。输入/输出(I/O)接口1105也连接至总线1104。
设备1100中的多个部件连接至I/O接口1105,包括:输入单元1105,例如键盘、鼠标等;输出单元1107,例如各种类型的显示器、扬声器等;存储单元1108,例如磁盘、光盘等;以及通信单元1109,例如网卡、调制解调器、无线通信收发机等。通信单元1109允许设备1100通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元1101可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1101的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元1101执行上文所描述的各个方法和处理,例如过程300、500、700、800、1000。例如,在一些实施例中,过程300、500、700、800、1000可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1108。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1102和/或通信单元1109而被载入和/或安装到设备1100上。当计算机程序加载到RAM 1103并由计算单元1101执行时,可以执行上文描述的过程300、500、700、800、1000的一个或多个步骤。备选地,在其他实施例中,计算单元1101可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行过程300、500、700、800、1000。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (23)
1.一种数据通信方法,包括:
响应于确定在阈值时间内从发送方接收到第一数据包,向所述发送方发送针对所述第一数据包的确认消息;
响应于确定在所述阈值时间内未从所述发送方接收到第二数据包,向所述发送方发送针对所述第二数据包的伪确认消息,其中所述伪确认消息与所述确认消息一致;
将所述第一数据包暂存在接收缓冲器中;以及
按照接收到第一数据包的顺序,将所述第一数据包暂存到读取缓冲器中,以使得应用层直接从所述读取缓冲器中对所述第一数据包进行读取;
其中将所述第一数据包暂存在所述接收缓冲器中包括:
响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序一致,将所述第一数据包暂存到所述接收缓冲器中的能够被应用层直接读取的第一缓冲区中;以及
响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序不一致,将所述第一数据包暂存到所述接收缓冲器中不能被所述应用层直接读取的第二缓冲区中。
2.根据权利要求1所述的数据通信方法,其中响应于确定接收所述第一数据包的顺序与发送所述第一数据包的顺序一致,将所述第一数据包暂存到所述接收缓冲器中的能够被应用层直接读取的第一缓冲区中包括:
响应于确定所述第一数据包中标识所述第一数据包的发送顺序的发送序号与所述接收缓冲器中指示下一个待接收的数据包的指示序号一致,将所述第一数据包暂存在所述第一缓冲区中。
3.根据权利要求1所述的数据通信方法,其中响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序不一致,将所述第一数据包暂存到所述接收缓冲器中不能被所述应用层直接读取的第二缓冲区中包括:
响应于确定所述第一数据包中标识所述第一数据包的发送顺序的发送序号与所述接收缓冲器中指示下一个待接收的数据包的指示序号不一致,将所述第一数据包暂存到所述第二缓冲区中。
4.根据权利要求1至3中任一项所述的数据通信方法,其中将所述第一数据包暂存到所述接收缓冲器中的能够被应用层直接读取的第一缓冲区中包括:
按照所述第一数据包的标识发送顺序的序号,将各个所述第一数据包依次暂存到所述第一缓冲区中的与所述序号对应的位置。
5.根据权利要求1所述的数据通信方法,其中响应于确定在阈值时间内从发送方接收到第一数据包,向所述发送方发送针对所述第一数据包的确认消息包括:
确定所述第一数据包未被确认过;以及
向所述发送方发送针对所述第一数据包的确认消息。
6.根据权利要求1所述的数据通信方法,其中响应于确定在阈值时间内从发送方接收到第一数据包,向所述发送方发送针对所述第一数据包的确认消息包括:
按照所述第一数据包的发送顺序,向所述发送方发送针对所述第一数据包的确认消息。
7.根据权利要求1所述的数据通信方法,其中向所述发送方发送针对所述第二数据包的伪确认消息后还包括:
丢弃所述发送方针对所述第二数据包重新发送的数据包或者在所述阈值时间后到达的所述第二数据包。
8.一种数据通信方法,包括:
接收第一数据包;
将所述第一数据包暂存在接收缓冲器中;以及
按照接收到所述第一数据包的顺序,将所述第一数据包暂存到读取缓冲器中,以使得应用层直接从所述读取缓冲器中对所述第一数据包进行读取;
其中将所述第一数据包暂存在所述接收缓冲器中包括:
响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序一致,将所述第一数据包暂存到所述接收缓冲器中的能够被应用层直接读取的第一缓冲区中;以及
响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序不一致,将所述第一数据包暂存到所述接收缓冲器中不能被所述应用层直接读取的第二缓冲区中。
9.根据权利要求8所述的数据通信方法,还包括:
应用层基于所述第一数据包被暂存到所述读取缓冲器中的顺序,读取所述第一数据包。
10.根据权利要求8所述的数据通信方法,其中将所述第一数据包暂存在所述接收缓冲器中包括:
按照所述第一数据包的标识发送顺序的序号,将各个所述第一数据包依次暂存到所述第一缓冲区中的与所述序号对应的位置。
11.根据权利要求8所述的数据通信方法,其中将所述第一数据包暂存在所述接收缓冲器中包括:
将在阈值时间后延迟到达的所述第一数据包和所述发送方针对所述延迟到达的所述第一数据包重新发送的数据包两者中先到达的第一数据包暂存到所述接收缓冲器和所述读取缓冲器中。
12.根据权利要求8所述的数据通信方法,其中还包括:
响应于确定在阈值时间内从发送方接收到第一数据包,向所述发送方发送针对所述第一数据包的确认消息。
13.根据权利要求12所述的数据通信方法,其中还包括:
响应于确定在所述阈值时间内未从所述发送方接收到第二数据包,向所述发送方发送针对所述第二数据包的伪确认消息,其中所述伪确认消息与所述确认消息一致。
14.根据权利要求8所述的数据通信方法,其中还包括:
确定所述第一数据包未被确认过;以及
针对所述第一数据包,向所述发送方发送确认消息。
15.根据权利要求8至14中任一项所述的数据通信方法,其中将所述第一数据包暂存到读取缓冲器中包括:
仅将所述第一数据包中的数据负载暂存到读取缓冲器中。
16.一种数据通信装置,包括:
确认消息发送模块,被配置为响应于确定在阈值时间内从发送方接收到第一数据包,向所述发送方发送针对所述第一数据包的确认消息;以及
伪确认消息发送模块,被配置为响应于确定在所述阈值时间内未从所述发送方接收到第二数据包,向所述发送方发送针对所述第二数据包的伪确认消息,其中所述伪确认消息与所述确认消息一致;以及
第一暂存模块,被配置为将所述第一数据包暂存在接收缓冲器中;
其中,按照接收到第一数据包的顺序,将所述第一数据包暂存到读取缓冲器中,以使得应用层直接从所述读取缓冲器中对所述第一数据包进行读取;
其中所述第一暂存模块包括:
第一缓冲区第一暂存模块,被配置为响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序一致,将所述第一数据包暂存到所述接收缓冲器中的能够被应用层直接读取的第一缓冲区中;以及
第二缓冲区第一暂存模块,被配置为响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序不一致,将所述第一数据包暂存到所述接收缓冲器中不能被所述应用层直接读取的第二缓冲区中。
17.根据权利要求16所述的数据通信装置,还包括:
丢弃模块,被配置为丢弃所述发送方针对所述第二数据包重新发送的数据包或者在所述阈值时间后到达的所述第二数据包。
18.一种数据通信装置,包括:
接收模块,被配置为接收第一数据包;
第一暂存模块,被配置为将所述第一数据包暂存在所述接收缓冲器中;以及
第二暂存模块,被配置为按照接收到所述第一数据包的顺序,将所述第一数据包暂存到读取缓冲器中,以使得应用层直接从所述读取缓冲器中对所述第一数据包进行读取;
其中将所述第一数据包暂存在所述接收缓冲器中包括:
响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序一致,将所述第一数据包暂存到所述接收缓冲器中的能够被应用层直接读取的第一缓冲区中;以及
响应于确定接收到所述第一数据包的顺序与发送所述第一数据包的顺序不一致,将所述第一数据包暂存到所述接收缓冲器中不能被所述应用层直接读取的第二缓冲区中。
19.根据权利要求18所述的数据通信装置,其中所述第一暂存模块包括:
暂存选择模块,被配置为将在阈值时间后延迟到达的所述第一数据包和所述发送方针对所述延迟到达的所述第一数据包重新发送的数据包两者中先到达的第一数据包暂存到所述接收缓冲器和所述读取缓冲器中。
20.根据权利要求18所述的数据通信装置,其中还包括:
伪确认消息发送模块,被配置为响应于确定在所述阈值时间内未从所述发送方接收到第二数据包,向所述发送方发送针对所述第二数据包的伪确认消息,其中所述伪确认消息与所述确认消息一致。
21.一种电子设备,所述电子设备包括:
一个或多个处理器;以及
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-15中任一项所述的方法。
22.一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如权利要求1-15中任一项所述的方法。
23.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-15中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110891988.5A CN113645291B (zh) | 2021-08-04 | 2021-08-04 | 数据通信方法及装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110891988.5A CN113645291B (zh) | 2021-08-04 | 2021-08-04 | 数据通信方法及装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113645291A CN113645291A (zh) | 2021-11-12 |
CN113645291B true CN113645291B (zh) | 2022-11-18 |
Family
ID=78419636
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110891988.5A Active CN113645291B (zh) | 2021-08-04 | 2021-08-04 | 数据通信方法及装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113645291B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115297364B (zh) * | 2022-07-27 | 2024-01-23 | 北京奇艺世纪科技有限公司 | 一种云游戏视频传输时延的确定方法、系统及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101636970A (zh) * | 2007-03-08 | 2010-01-27 | 日本电气株式会社 | 伪响应帧通信系统、伪响应帧通信方法以及伪响应帧传输设备 |
CN108632245A (zh) * | 2017-03-15 | 2018-10-09 | 安华高科技通用Ip(新加坡)公司 | 低功率高清晰度无线媒体传送 |
CN112235234A (zh) * | 2020-07-30 | 2021-01-15 | 视联动力信息技术股份有限公司 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100596108C (zh) * | 2007-04-20 | 2010-03-24 | 杭州华三通信技术有限公司 | 数据传输方法及装置 |
CN111970092B (zh) * | 2020-08-12 | 2023-01-31 | 北京工业大学 | 一种支持可靠性调节的多协议冗余网络异步通信方法 |
-
2021
- 2021-08-04 CN CN202110891988.5A patent/CN113645291B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101636970A (zh) * | 2007-03-08 | 2010-01-27 | 日本电气株式会社 | 伪响应帧通信系统、伪响应帧通信方法以及伪响应帧传输设备 |
CN108632245A (zh) * | 2017-03-15 | 2018-10-09 | 安华高科技通用Ip(新加坡)公司 | 低功率高清晰度无线媒体传送 |
CN112235234A (zh) * | 2020-07-30 | 2021-01-15 | 视联动力信息技术股份有限公司 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113645291A (zh) | 2021-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11934340B2 (en) | Multi-path RDMA transmission | |
US10430374B2 (en) | Selective acknowledgement of RDMA packets | |
US8169914B2 (en) | Method and node for transmitting data over a communication network using negative acknowledgment | |
TWI332150B (en) | Processing data for a tcp connection using an offload unit | |
US9515928B1 (en) | Network transfer protocol | |
US7782905B2 (en) | Apparatus and method for stateless CRC calculation | |
CN110830472B (zh) | 基于tcp/ip协议的灵活数据传输协议的灵活数据传输方法 | |
US8699521B2 (en) | Apparatus and method for in-line insertion and removal of markers | |
US7411959B2 (en) | System and method for handling out-of-order frames | |
US7512072B2 (en) | TCP/IP method FPR determining the expected size of conjestion windows | |
US20070223395A1 (en) | Methods and apparatus for optimizing a TCP session for a wireless network | |
US20060271680A1 (en) | Method For Transmitting Window Probe Packets | |
CN113645291B (zh) | 数据通信方法及装置、电子设备和存储介质 | |
US7929536B2 (en) | Buffer management for communication protocols | |
US20060262738A1 (en) | Administering acknowledgment messages in the transmission control protocol | |
CN111654505B (zh) | Udp数据包可靠传输方法、系统、计算机设备及存储介质 | |
US10461892B2 (en) | Low latency communications | |
US10498867B2 (en) | Network interface device and host processing device field | |
US10063489B2 (en) | Buffer bloat control | |
US7526706B2 (en) | Method and apparatus for preventing network outages | |
TWI839155B (zh) | 電腦裝置以及應用於電腦裝置的傳輸控制協定封包處理方法 | |
US20080091841A1 (en) | Communication method, communication system, communication apparatus, and recording medium | |
CN114070877A (zh) | 基于用户数据报协议的数据传输方法、服务端及客户端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |