具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本公开的实施方式,提供一种数据报文传输方法、数据报文传输装置、计算机可读存储介质及电子设备。
在本文中,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
发明概述
在相关技术中,应用程序的底层网络均以TCP作为底层协议。TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。在基于TCP协议的传输中,当数据报文到达接收端时,接收端反馈一个已收到的确认应答,若在一定时间内没有收到确认应答,则发送端认为报文数据已丢失,则重新发送数据报文,直到确认接收端收到为止。而对于接收端,也需要等待丢失的报文送达才将报文上送至应用程序,增加了报文延时。
鉴于此,本公开的实施方式提供一种新的数据报文传输方法,发送端发送的第一数据报文中,通过第一信息指示该第一数据报文和第一数据报文之前的数据报文的可丢弃性,以通知接收端已发送数据报文是否具备可丢弃性,之后发送端可以收到接收端所反馈的第二数据报文的发送方式,避免不断重传报文,从而可以降低发送端的报文重传量。
本公开实施方式的数据报文传输方法,考虑到一些应用程序,例如音视频应用,在数据流传输的过程中可能存在某些非关键的报文(如非关键视频帧),即便这些非关键的报文丢失,只要接收端接收到后续的报文,也不会对音视频应用的使用产生影响。因此,若存在丢包,且接收端获知已丢包是允许丢失的,之后接收端通过确认报文通知发送端第二数据报文的发送方式,可以避免发送端针对非关键的报文进行重传。
其中,由于TCP应用的数据传输要求可靠传输,发送端若在一定时间没有收到接收端反馈的确认应答,则重新发送数据,因此在发送端发送的第一数据报文中携带第一信息,在接收端反馈的确认报文中携带第二信息,无需改动相关技术的TCP应用数据传输所涉及的相关网络中间设备,部署成本可控。
示例性应用场景
需要注意的是,下述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。
以视频应用的数据流传输场景为例,用户观看到的视频出现卡顿非常影响用户体验。若存在丢包,发送端将不断地进行报文重传,直到收到接收端反馈的确认报文,而只有在数据报文送达接收端,接收端才返回确认报文。并且,对于接收端,如果报文序列号较小的报文丢包,而收到后续报文序列号较大的报文,则在数据缓冲区形成空隙,当空隙存在时,后续报文不能上送至应用程序,需等待丢失的报文送达并将空隙填充后进行上送,增加报文延时,进而导致视频卡顿。
举例而言,如图1所示,接收端先接收到第一视频帧(报文序列号1-101),然后接收到第三视频帧(报文序列号201-301),第二视频帧(报文序列号101-201)丢失,只有接收端收到发送端重传的第二视频帧后,将Gap区域填充满,第三视频帧才能上送至应用程序。该过程需要发送端重传第二视频帧直到接收端成功收到后反馈确认响应,进而影响视频数据流传输的流畅性。
当接收端获知第二视频帧对应的数据报文具有可丢弃性,则可以及时向发送端反馈确认报文,以指示发送端无需重传第二视频帧对应的数据报文,保障视频播放流畅的同时,降低数据报文的重传量。
同样的,对于音频应用等其它数据流传输场景,同样存在具有上述报文重传量大、影响用户体验等问题。
在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。
示例性方法
下面将通过具体的实施方式对本公开的数据报文传输方法进行详细描述。
如图2示出了根据本公开示例性实施方式的数据报文传输方法的流程图,该方法应用于发送端。如图2所示,本公开示例性实施方式的数据报文传输方法包括如下步骤S210和步骤S220:
步骤S210:发送第一数据报文至接收端。
在本公开的示例性实施方式中,第一数据报文包括第一信息,第一信息用于指示目标数据报文的可丢弃性。其中,目标数据报文包括第一数据报文和第一数据报文之前的数据报文。
例如,参见图3所示,发送端发送的若干段数据报文,每段数据报文包括自身报文序列号seq、长度length和用于指示目标数据报文的可丢弃性的第一信息,该第一信息指示了目标数据报文中允许丢失的报文范围。
示例性的,如第二段数据报文,“seq 501-1500”表征第二段数据报文自身的报文序列号为501,报文长度为1000,“rang 501-1500”表征第二段数据报文以及第二段数据报文之前的数据报文中允许丢失的报文范文,即报文序列号501至1500的数据报文是允许丢失的。
相应的,如第四段数据报文,“seq 2501-3000”表征第四段数据报文自身的报文序列号为2501,报文长度为500,“rang 501-2500”表征第四段数据报文以及第四段数据报文之前的数据报文中允许丢失的报文范文是501-2500,但报文序列号2501-3000的数据报文是不允许丢失的。
参见图4所示为第三段数据报文的TCP头,TCP头中除了包括源端口号(sourceport)、目的端口号(dest port)、确认号(Acknowledgement num)、4位头部长度(DO)、6位保留(RSV)、16位窗口、16位校验和以及16位紧急指针以外,还包括第一信息。其中,第一信息包括目标数据报文的初始报文序列号501和目标数据报文的长度2000,亦即报文序列号“501-2500”为允许丢失的报文范围。
可见,发送端发送的每段数据报文中的第一信息,指示自身是否允许丢失的同时,指示该数据报文之前的数据报文的可丢弃性。如图3和图4所示,在第三段数据报文中,结合“seq 1501-2500”和“range 501-2500”可以获知该数据报文自身是允许丢失的,且该数据报文之前的数据报文中,报文序列号501至1500的数据报文也是允许丢失的。因此,即便在数据报文的传输过程中存在丢包,接收端也可以从已接收到的数据报文中确定已丢包的数据报文是否允许丢失,例如数据报文范围为“seq 600-1400”的数据报文在传输过程中丢失,则接收端可以根据第一数据报文携带的第一信息中确定该段数据报文是允许丢失的。
在一种可能的实施方式中,第一数据报文之前的数据报文还可以满足以下条件:
第一数据报文之前的数据报文所对应的第一报文序列号,小于第一数据报文所对应的第二报文序列号,第一数据报文之前的数据报文为连续数据报文,该连续数据报文具有可丢弃性,且该连续数据报文与第一数据报文相紧邻。
其中,由于在第一数据报文之前的数据报文中,具有可丢弃性的连续数据报文可以具有多段,如图5所示,第一数据报文之前的数据报文包括5段连续数据报文(分别标记为M、N、Q、P和X),其中“Gap”用于指示已丢包范围对应的数据缓冲区。值得说明的是,每段连续数据报文中的数据报文具有相同的丢弃属性,例如第M段数据报文中的数据报文均为可丢弃的,第N段数据报文中的数据报文均为不可丢弃的。
如图5,第一数据报文之前的数据报文形成三段具有可丢弃性的连续数据报文(M、O和X),每段连续数据报文之间存在不允许丢失的数据报文。基于此,本公开实施方式的第一数据报文之前的数据报文是指与第一数据报文相紧邻的一段连续数据报文,其中第X段连续数据报文与第一数据报文是最近邻的,即第X段连续数据报文是第一数据报文最近一个允许丢失的连续数据报文,因此将第X段连续数据报文作为本公开实施方式所指的第一数据报文之前的数据报文。
基于此,可以通过第一信息指示与第一数据报文最近邻的第X段数据报文的可丢弃性,无需指示第M段数据报文和第O段数据报文的可丢弃性,在后续接收端根据第一信息确定第二数据报文的发送方式时,仅需根据唯一确定的报文可丢弃范围来确定第二数据报文的发送方式即可。另外,由于发送端发送的每个数据报文均携带有第一信息,且通过第一信息指示了与该数据报文最近邻的连续数据报文的可丢弃性,从而在数据报文的动态传输过程中,可以避免接收侧遗漏任何数据报文的可丢弃性。
值得说明的是,本公开实施方式的第二数据报文,是指在第一数据报文之后,由发送端待发送至接收端的数据报文。第二数据报文的报文范围与第一数据报文之前(包括第一数据报文)的报文范围之间可以存在重叠部分,也可以不存在重叠部分,二者之间是否存在重叠部分是根据第二数据报文的发送方式确定,在后文中将继续介绍。
步骤S220:发送端接收由接收端反馈的确认报文。
在本公开的示例性实施方式中,确认报文携带有第二信息,第二信息用于指示第二数据报文的发送方式。
第二数据报文的发送方式指示待发送的第二数据报文是否重传第一数据报文之前的数据报文,第二数据报文的发送方式可以包括以下两种情况:
1)无需重传第一数据报文之前的数据报文,按照第一数据报文的报文序列号,继续传输之后的数据报文。
2)待发送的第二数据报文需重传第一数据报文之前的一部分数据报文。
其中,第二数据报文的发送方式为根据第一信息确定的,由接收端基于目标数据报文的可丢弃性,确定是否重传第一数据报文之前的数据报文。
在发送端收到接收端反馈的确认报文后,则按照第二信息所指示的第二数据报文的发送方式进行数据报文传输,在发送端传输数据报文的过程中,不要求每个报文都送达接收端,而是存在可以容忍丢失的数据报文,从而避免发送端在发生丢包时不断地重传已丢包的报文数据,降低了丢包时的重传量。
在一示例性实施方式中,发送端为了与接收端交互以上数据报文,对于发送端需具备在第一数据报文中标记第一信息的能力、识别第一信息的能力。相应的,对于接收端也需具备识别第一信息的能力、标记第一信息的能力。
本公开实施方式还提供一种通信能力协商的实现方式,使得发送端与接收端的通信能力状况均满足目标能力条件,目标能力条件包括标记第一信息的能力,以及识别第一信息的能力。在发送端第一数据报文之前,还可以:
基于能力协商机制与接收端进行能力协商,以确定接收端的通信能力状况;
响应于接收端的通信能力状况满足目标能力条件,确定基于目标能力条件所对应的协议版本发送第一数据报文至接收端。
其中,能力协商机制包括:
向接收端发送携带有第一能力标识的第一能力报文;
获取接收端所反馈的第二能力报文,且第二能力报文携带有第二能力标识;
其中,第一能力标识用于指示发送端的通信能力状况满足目标能力条件,第二能力标识用于指示接收端的通信能力状况满足目标能力条件。
图6示出了根据本公开示例性实施方式的一种通信能力协商的示意图。如图6所示,发送端与接收端采用TCP协议的三次握手机制进行通信能力协商,下面结合图6对发送端与接收端之间的通信能力协商过程进行说明。
首先,发送端发送SYN报文至接收端,SYN报文中携带第一能力标识,用于标识发送端的通信能力状况满足目标能力条件,并进入“SYN_SEND”状态,等待接收端的确认。此时,接收端被动处于“LISTEN”状态。
其次,接收端收到SYN报文后,若接收端的通信能力状况满足目标能力条件,则发送SYN-ACK报文响应发送端的请求,并携带有第二能力标识,此后进入“SYN_RECY”状态。
接着,发送端收到SYN-ACK报文后,向接收端反馈一个确认报文ACK,待确认报文ACK发送完毕,发送端和接收端进入“ESTABLISHED”状态,完成通信能力协商,二者之间建立TCP连接。
最后,在建立TCP连接后,发送端与接收端之间可以基于目标能力条件所对应的协议版本进行数据交互。
其中,仅当发送端和接收端的通信能力状况均满足目标能力条件,才向接收端发送携带有第一信息的第一数据报文,否则按照传统的TCP协议方案发送第一数据报文。
在一示例性实施方式中,第一数据报文为传输控制协议TCP报文,第一信息为第一数据报文的TCP选项。第一信息至少还包括选项类型、选项总长度、目标数据报文的起始位置以及目标数据报文的总长度。
表1示意性示出了一种第一信息的选项结构。“kind=last-tolerate-range”为选项类型标识,“Length=8”为选项总长度,“Last-tolerate-range-Seq”为目标数据报文的起始位置(如起始报文序列号),“LastLength”为目标数据报文的总长度。
表1
基于此,发送端与接收端之间进行通信能力协商时,第一能力报文为TCP报文,参见表2所示,第一能力报文中的TCP选项还包括TCP选项类型、选项总长度和用于指示第一能力报文中的TCP选项所属版本的版本信息(Version XX),该版本信息表征发送端所满足的协议版本,亦即发送端的通信能力状况满足的目标能力条件所对应的协议版本。
表2
其中,Reserved为选项保留字段,以用于修改或升级能力协商机制。
相应的,发送端与接收端之间进行通信能力协商时,第二能力报文为TCP报文,第二能力报文中的TCP选项还包括TCP选项类型、选项总长度和用于指示第二能力报文中的TCP选项所属版本的版本信息,该版本信息表征接收端所满足的协议版本,亦即接收端的通信能力状况满足的目标能力条件所对应的协议版本。
在一示例性实施方式中,本公开实施方式中的发送端与接收端的通信能力状态均满足目标能力条件,但是,二者所满足的协议版本可能不同。
例如,发送端满足协议版本为Version1.1,接收端所满足的协议版本为Version1.0,则基于较低协议版本(Version1.0)发送第一报文数据至接收端。
由此可见,发送端在与接收端进行通信能力协商时,还可以进行协议版本协商。
在一示例性实施方式中,还可以响应于接收端的通信能力状况不能满足目标能力条件,基于TCP协议发送第一数据报文。
图7示出了一种应用场景下的发送端与接收端进行通信能力协商的流程示意图。根据发送端的应用程序A和接收端的应用程序B的通信能力状况是否均满足目标能力条件,可以建立不同的TCP连接。下面结合图7,以第一信息为第一数据报文的TCP选项(标识为tolerate-pkt-lose)为例,对于发送端与接收端之间的通信能力协商过程进行说明。
步骤S710:应用程序A的通信能力状况是否满足目标能力条件。
步骤S720:若应用程序A的通信能力状况不能满足目标能力条件,则转向步骤S790。
步骤S730:若应用程序A的通信能力状况满足目标能力条件,则基于能力协商机制与接收端进行能力协商,以确定接收端的通信能力状况。
其中,应用程序A发送SYN报文,且SYN报文携带tolerate-pkt-lose。
步骤S740:接收端收到SYN报文,解析获得tolerate-pkt-lose,则转向步骤S750。
步骤S750:接收端的应用程序B的通信能力状况是否满足目标能力条件。
步骤S760:若应用程序B的通信能力状况满足目标能力条件,则向发送端发送SYN-ACK报文,并携带tolerate-pkt-lose,完成能力协商,发送端与接收端基于目标能力条件所对应的版本协议进行数据交互。
步骤S770:若应用程序B的通信能力状况不能满足目标能力条件,则转向步骤S790,按照TCP协议的三次握手机制进行能力协商。
步骤S780:若接收端收到SYN报文,未解析获得tolerate-pkt-lose,也转向步骤S790。
步骤S790:应用程序A发送未携带tolerate-pkt-lose的SYN报文至应用程序B,按照TCP协议的三次握手机制进行能力协商。之后,应用程序A与应用程序B之间基于TCP协议方案进行报文传输。
由此可知,本公开实施方式的发送端与接收端之间的通信能力协商,可兼容现有网络,即便通信双方中的一端的通信能力状况不能满足目标能力条件,亦可按照TCP协议的三次握手机制进行能力协商,且建立TCP连接。以上能力协商的过程无需升级改造网络中的中间设备,部署成本低。
在一示例性实施方式中,第一数据报文包括第一信息,本公开实施方式还提供一种确定第一数据报文的实现方式。在发送第一数据报文之前,还可以基于预设的协议规则,确定携带有第一信息的第一数据报文。
其中,本公开实施方式的数据报文传输方法中,目标数据报文是否具备可丢弃性,由应用程序基于预设的协议规则确定,亦即由发送端的应用程序基于预设的协议规则,确定携带有第一信息的第一数据报文,进而获得目标数据报文的可丢弃性。
一些可能的实施方式中,应用程序包括规则注入模块,通过规则注入模块添加预设的协议规则,该预设的协议规则用于确定第一信息。预设的协议规则可根据应用程序的实际服务需求和数据报文特征设定,对此不做特殊限制。
例如,预设的协议规则为:将数据长度超过500字节的报文设置为具有可丢弃性,其它报文则必须确保接收端收到。基于该协议规则,应用程序发送端的数据长度超过500字节的数据报文均标记为“具有可丢弃性”。
基于预设的协议规则,可以对原始报文对应的原始函数进行参数替换处理,通过调用替换后的目标函数,以获得携带有第一信息的第一数据报文。
在一示例性实施方式中,应用程序还包括数据拦截模块,通过数据拦截模块对原始报文对应的原始函数进行拦截,并按照预设的协议规则对原始函数进行参数替换处理。
数据拦截模块用于拦截应用程序中,发送原始函数所对应的相关调用函数。例如,socket()/bind()/connect()/send()等调用函数,在拦截获得调用函数后,按照预设的协议规则对调用函数进行参数替换处理。
其中,通过数据拦截模块对原始函数进行拦截,并按照预设的协议规则对原始函数进行参数替换处理,以获得携带有第一信息的第一数据报文,可以包括:
对原始报文对应的原始函数进行拦截;
根据预设的协议规则,对原始函数中的目标参数进行替换以获得目标函数,基于目标函数获得携带有第一信息的第一数据报文。其中,目标参数为用于指示对应数据报文是否具有可丢弃性的参数。
其中,原始报文对应的原始函数是指发送原始报文的相关调用函数。
图8示出了根据本公开示例性实施例的一种确定第一数据报文的流程图。以原始函数send(data,length,0)为例,对于确定第一数据报文进行说明。
首先,通过规则注入模块添加预设的协议规则“length>500字节的报文允许丢失”。
其次,数据拦截模块拦截原始函数send(data,length,0),并按照协议规则“length>500字节的报文允许丢失”,将数据长度大于500字节的原始函数send(data,length,0)进行参数替换处理,将“0”替换为“特殊标记”。该“特殊标记”用于指示该第一数据报文是允许丢失的。相应的,对于数据长度小于或等于500字节的第一数据报文,则无需进行参数替换处理,仍获得原始数据报文。
最后,如图8所示,在数据拦截模块完成对原始函数的参数替换处理后,可以调用参数替换后的目标函数通知操作系统内核,从而获得携带有第一信息的第一数据报文。
通过数据拦截模块对原始函数进行拦截,并按照预设的协议规则对原始函数进行参数替换处理,对应用程序的原程序无侵入,避免修改应用程序的源代码,且操作系统对上述改动过程无感知,不会影响应用程序的使用。
在一示例性实施方式中,第一信息包括第一指示信息,第一指示信息表征目标数据报文中允许丢失的第一报文范围。例如,第一指示信息为“range 501-2500”,表征第一数据报文以及第一数据报文之前的数据报文中,报文序列号为501至2500的数据报文具有可丢弃性。
接收端反馈的第二信息可以指示第二数据报文的起始位置,该起始位置为根据第一报文范围和已丢包范围确定的。
其中,在发送端根据第二信息获得起始位置后,以该起始位置为起点,向接收端发送第二数据报文。例如,起始位置为seq=3001,则表征接收端请求发送端继续发送报文序列号3001之后的数据。
在一些可能的实施方式中,若第一报文范围完全覆盖已丢包范围,则起始位置为根据第一数据报文的末位报文位置确定的。其中,已丢包范围对应的数据缓冲区已通过填充报文的方式进行补包处理。
可选地,可以在已丢包范围对应的数据缓冲区填充任意报文,例如全部填充0、1,对此不做特殊限定。
可选地,由于在接收端收到数据报文后,需要对数据报文进行解析以获得解析结果,为了提高解析结果对于原始数据报文的还原度,还可以根据接收端已收到的第一数据报文对已丢失的报文进行预测,并将预测结果作为填充内容,填充至已丢包范围对应的数据缓冲区。例如,利用已接收到的视频帧所对应的数据报文来预测已丢失的视频帧所对应的数据报文。
可选地,还可以针对应用程序的报文特征预先设置报文类型,以利用预先设置的报文类型对已丢包范围对应的数据缓冲区进行填充。例如,某应用程序设置有视频报文类型、音频报文类型,且各报文类型具有对应的视频报文特征、音频报文特征。因此可以根据应用程序的数据报文的报文特征,按照所对应的报文类型,对已丢包范围对应的数据缓冲区进行填充。
如图9示出了根据本公开实施方式的一种确定起始位置的示意图。参考图9所示,第一数据报文自身的报文序列号为2501,报文长度为500(即seq 2501-3000),第一报文范围为“rang 1001-3000”,已丢包范围为“1000-2501”。由于第一报文范围完全覆盖已丢包范围,表明已丢包范围中的数据报文均具备可丢弃性,则可以确定起始位置为第一数据报文的末位报文位置确定,为“seq 3001”。
值得说明的是,由于已丢包范围对应的数据缓冲区已通过填充报文的方式进行补包处理,对于接收端,已丢包范围被认为已经成功接收,所以继续请求第一数据报文之后的数据报文。
基于此,避免了发送端获知丢包时,不断重传已丢包范围对应的数据报文,降低发送端的报文重传量,避免因不断重传影响数据流整体的流畅性。
在一些可能的实施方式中,若第一报文范围部分覆盖已丢包范围,则起始位置为根据第二报文范围的起始报文位置确定的,第二报文范围为已丢包范围未被第一报文范围所覆盖的范围。
如图10示出了根据本公开实施方式的另一种确定起始位置的示意图。参考图10所示,第一数据报文自身的报文序列号为2501,报文长度为500(即seq 2501-3000),第一报文范围为“rang 1501-3000”,已丢包范围为“1000-2501”,第二报文范围为“seq 1001-1500”。由于第一报文范围部分覆盖已丢包范围(覆盖部分为seq 1501-2500),表明已丢包范围中的数据报文(seq 1501-2500)具备可丢弃性,则至少需重传第二报文范围对应的数据报文,因此起始位置为根据第二报文范围的起始位置确定的,为“seq 1001”。
值得说明的是,虽然第一报文范围对应的数据缓冲区“seq 1501-2500”已通过填充报文的方式进行补包处理,但是为了重传第二报文范围的数据,接收端仍需以第二报文范文的起始位置开始,请求重传报文。其中,通过填充报文的方式进行补包处理在上述实施方式中已经介绍,在此不再赘述。
图11示出了根据本公开实施方式的又一种确定起始位置的示意图。图11所示,第一数据报文自身的报文序列号为2501,报文长度为500(即seq 2501-3000),第一报文范围为“rang 1001-1500”,已丢包范围为“1000-2501”,第二报文范围为“seq 1500-2500”。
图11中第一报文范围也是部分覆盖已丢包范围,覆盖情况与图10所示不同,但确定起始位置的确定方式相同。继续参见图11,第一报文范围对应的数据缓冲区通过填充报文的方式进行补包处理后,接收端需请求重传seq 1501之后的数据,即起始位置为根据第二报文范围的起始位置确定的,即起始位置为“seq 1501”。
本公开实施方式的确定起始位置的方式,第一报文范围部分覆盖已丢包范围,在发送端获知发生丢包时,不是直接重传丢失的报文,而根据接收端所反馈的第二数据报文的起始位置进行报文重传,为报文重传提供选择方式,降低报文重传量。
在一些可能的实施方式中,若第一报文范围未覆盖已丢包范围,则起始位置为根据已丢包范围的起始报文位置确定的。
如图12示出了根据本公开实施方式的再一种确定起始位置的示意图。图12所示的第一数据报文的第一信息指示的第一报文范围(seq 501-1000),未覆盖已丢包范围(seq1000-2501),表明已丢包范围对应的数据报文均不允许丢失,接收端需请求seq 1000之后的数据,因此起始位置根据已丢包范围的起始报文位置确定,即“seq 1001”。
本公开实施方式的数据传输方法,发生丢包时,由接收端根据第一报文范围和已丢包范围确定下一次需请求的数据,且通过发往发送端的确认报文告知发送端,避免发送端机械式地重传所有丢包,降低报文重传量,保障应用服务的稳定性。其中,通过填充报文的方式进行补包处理在上述实施方式中已经介绍,在此不再赘述。
图13示出了应用场景下的数据报文传输方法的报文发送示意图。视频应用程序在使用过程中期望更高的流畅度,是否存在丢包可能不会影响正常使用。例如,视频帧4对应的数据报文丢失,不会影响整个视频的观看,但有益于视频播放的流畅度,避免出现卡顿。
对于此类TCP应用,一些非关键报文允许丢失,关键报文(如控制信令等)仍需正常送达接收端。因此,本公开实施方式的数据报文传输方法,此类TCP应用的每个报文不必都送达至接收端,由视频应用程序自主决策报文是否具备可丢弃性。
下面结合图13,以视频应用程序为例,对本公开实施方式的数据传输方法进行说明。
1)视频应用程序A与视频应用程序B基于能力协商机制,确定二者的通信能力状况均满足目标能力条件。
2)通过视频应用程序A的数据拦截模块对视频原始报文对应的视频原始函数进行拦截,并基于预设的协议规则对视频原始函数进行参数替换处理,以获得携带有第一信息的第一数据报文。
3)视频应用程序A将携带有第一信息的第一数据报文,发送至视频应用程序B。
参见图13所示,在视频帧传输的过程中,网络条件不佳(如处于弱网环境下),视频帧4发生丢包,视频应用程序B收到第一数据报文(对应视频帧5)。
4)视频应用程序B根据第一数据报文携带的第一报文范围获知,视频帧4对应的数据报文时允许丢失的,则通过填充报文的方式对已丢包范围(视频帧4对应数据报文)进行补包。
在补包处理后,视频应用程序B向视频应用程序A请求视频帧6之后的视频数据,则视频应用程序B向视频应用程序A反馈确认报文,该确认报文中携带第二信息,第二信息指示视频应用程序A的第二报文数据自视频帧5对应数据报文开始发送。
5)视频应用程序A收到确认报文后,以视频帧5对应数据报文为起点,向视频应用程序B发送第二报文数据。
由以上可知,区别于传统的TCP协议方案,避免视频应用程序A的每个报文送达视频应用程序B,而是根据视频应用程序A自身注入的预设的协议规则自主决策数据报文的可丢弃性,在应用程序A感知到发往应用程序B的数据流中存在丢包时,通过舍弃视频数据流的部分完整性,保证视频应用服务的稳定性和流畅性。
本公开实施方式的数据传输报文方法,对于对应用服务的稳定性和流畅性要求较高,存在部分丢包不影响应用使用体验的TCP应用,即使网络条件不佳环境,仍可以通过舍弃部分数据报文来保证服务流畅性体验。另外,本公开实施方式的数据传输方法与现有网络具有兼容性,不必升级改造网络中的中间设备,倘若通信双方无需标记数据报文可丢弃性,仍可采用TCP协议方案进行数据交互,方便普及。
此外,本公开实施方式还提供一种数据报文传输方法,应用于接收端。如图14示出了根据本公开示例性实施方式的数据报文传输方法的流程图,该方法应用于接收端。如图14所示,本公开示例性实施方式的数据报文传输方法包括如下步骤S1410和步骤S1420:
步骤S1410:接收第一数据报文,其中第一数据报文包括第一信息,第一信息用于指示目标数据报文的可丢弃性,目标数据报文包括所述第一数据报文和第一数据报文之前的数据报文;
步骤S1420:发送确认报文,确认报文携带有第二信息,第二信息用于指示第二数据报文的发送方式,第二数据报文的发送方式为根据第一信息确定的。
根据本公开实施方式的数据报文传输方法,接收的第一数据报文,携带的第一信息用于指示第一数据报文和第一数据报文之前的数据报文的可丢弃性,接收端可以根据接收到的第一数据报文中的第一信息,获知发送端已发送的目标数据报文是否允许丢失,进而根据目标数据报文的可丢失性确定第二数据报文的发送方式,并反馈至接收端,该过程避免了存在丢包时,发送端不断重传已丢失的数据包,降低了丢包时的重传量,保证应用服务的稳定性。本公开实施方式的传输过程中,提供一种新的数据报文传输方式,不要求每个报文都送达接收端,即便存在部分数据报文丢失,也可以继续传输后续的数据报文,通过舍弃数据流的部分完整性,保障数据流的整体流畅性,对具有高流畅性需求的应用的普及,具有实际意义。
在一示例性实施例方式中,还提供一种通信能力协商的实现方式。在接收第一数据报文之前,还可以:
基于能力协商机制与发送端进行能力协商,以确定发送端的通信能力状况,其中接收端的通信能力状况满足目标能力条件,目标能力条件包括标记第一信息的能力,以及识别第一信息的能力;
响应于发送端的通信能力状况满足目标能力条件,确定基于所述目标能力条件所对应的协议版本接收所述第一数据报文。
其中,能力协商机制包括:
接收发送端发送的携带有第一能力标识的第一能力报文;
向发送端反馈第二能力报文,第二能力报文携带有第二能力标识;其中,第一能力标识用于指示发送端的通信能力状况满足目标能力条件,第二能力标识用于指示接收端的通信能力状况满足目标能力条件。
此外,在一示例性实施例中,还可以响应于发送端的通信能力状况不能满足目标能力条件,基于TCP协议接收第一数据报文。
在一示例性实施方式中,第一信息为基于预设的协议规则确定的,其中预设的协议规则为通过发送端的应用程序的规则注入模块添加的。
在一示例性实施方式中,第一信息包括第一指示信息,第一指示信息表征目标数据报文中允许丢失的第一报文范围。
其中,第二信息指示第二数据报文的起始位置,在发送确认报文之前,还可以:由接收端根据第一报文范围和已丢包范围确定起始位置。
在一些可能的实施方式中,根据第一报文范围和已丢包范围确定起始位置,可以包括:
若第一报文范围完全覆盖已丢包范围,则采用填充报文的方式,对已丢包范围对应的数据缓冲区进行补包处理;
补包处理后,根据第一数据报文的末位报文位置确定起始位置。
在一些可能的实施方式中,根据第一报文范围和已丢包范围确定起始位置,可以包括:
若第一报文范围部分覆盖已丢包范围,则采用填充报文的方式,对第一报文范围对应的数据缓冲区进行补包处理;
补包处理后,根据第二报文范围的起始报文位置确定起始位置;其中,第二报文范围为已丢包范围未被第一报文范围所覆盖的范围。
在一些可能的实施方式中,根据第一报文范围和已丢包范围确定起始位置,可以包括:
若第一报文范围未覆盖已丢包范围,则根据已丢包范围的起始报文位置确定起始位置。
在接收端向发送端反馈确认报文后,还可以接收发送端发送的以起始位置为起点的第二数据报文。
以上的第一数据报文之前的数据报文所对应的第一报文序列号,小于第一数据报文所对应的第二报文序列号;
第一数据报文之前的数据报文为连续数据报文,连续数据报文具有可丢弃性,且与第一数据报文相紧邻。
其中,第一数据报文可以为传输控制协议TCP报文,第一信息为第一数据报文的TCP选项;
第一信息至少还包括选项类型、选项总长度、目标数据报文的起始位置以及目标数据报文的总长度。
相应的,第二能力报文为TCP报文,第二能力报文中的TCP选项还包括TCP选项类型、选项总长度和用于指示第二能力报文中的TCP选项所属版本的版本信息,版本信息表征接收端所满足的协议版本。
需要说明的是,本公开实施方式的其他具体细节在上述应用于发送端的数据报文传输方法的公开实施方式中已经详细说明,在此不再赘述。
示例性装置
如图15示出了本公开一示例性实施方式的数据报文传输装置的结构示意图,该数据报文传输装置应用于发送端,数据报文传输装置至少包括发送模块1510和接收模块1520。
发送模块,用于发送第一数据报文,所述第一数据报文包括第一信息,所述第一信息用于指示目标数据报文的可丢弃性,所述目标数据报文包括所述第一数据报文和所述第一数据报文之前的数据报文;
接收模块,用于接收确认报文,所述确认报文携带有第二信息,所述第二信息用于指示第二数据报文的发送方式,所述第二数据报文的发送方式为根据所述第一信息确定的。
在本公开一示例性实施方式中,所述装置还包括:
第一能力协商模块,用于基于能力协商机制与接收端进行能力协商,以确定所述接收端的通信能力状况,其中所述发送端的通信能力状况满足目标能力条件,所述目标能力条件包括标记所述第一信息的能力,以及识别所述第一信息的能力;
所述发送模块还用于响应于所述接收端的通信能力状况满足所述目标能力条件,确定基于所述目标能力条件所对应的协议版本发送所述第一数据报文至所述接收端。
在本公开一示例性实施方式中,所述第一能力协商模块被配置为:
向所述接收端发送携带有第一能力标识的第一能力报文;
获取所述接收端所反馈的第二能力报文,所述第二能力报文携带有第二能力标识;
其中,所述第一能力标识用于指示所述发送端的通信能力状况满足所述目标能力条件,所述第二能力标识用于指示所述接收端的通信能力状况满足所述目标能力条件。
在本公开一示例性实施方式中,所述装置还包括:
第一确定模块,用于基于预设的协议规则,确定携带有所述第一信息的所述第一数据报文。
在本公开一示例性实施方式中,所述第一确定模块被配置为:
由所述发送端的应用程序基于所述预设的协议规则,确定携带有所述第一信息的所述第一数据报文。
在本公开一示例性实施方式中,所述应用程序包括规则注入模块,通过所述规则注入模块添加所述预设的协议规则,所述预设的协议规则用于确定所述第一信息。
在本公开一示例性实施方式中,所述应用程序包括数据拦截模块,通过所述数据拦截模块对原始报文对应的原始函数进行拦截,并按照所述预设的协议规则对所述原始函数进行参数替换处理,以获得携带有所述第一信息的所述第一数据报文。
在本公开一示例性实施方式中,所述通过所述数据拦截模块对原始报文对应的原始函数进行拦截,并按照所述预设的协议规则对所述原始函数进行参数替换处理,以获得携带有所述第一信息的所述第一数据报文,包括:
对原始报文对应的原始函数进行拦截;
根据所述预设的协议规则,对所述原始函数中的目标参数进行替换以获得目标函数,基于所述目标函数获得携带有所述第一信息的所述第一数据报文;
其中,所述目标参数为用于指示对应数据报文是否具有可丢弃性的参数。
在本公开一示例性实施方式中,所述第一信息包括第一指示信息,所述第一指示信息表征所述目标数据报文中允许丢失的第一报文范围。
在本公开一示例性实施方式中,所述第二信息指示所述第二数据报文的起始位置,所述起始位置为根据所述第一报文范围和已丢包范围确定的。
在本公开一示例性实施方式中,若所述第一报文范围完全覆盖所述已丢包范围,则所述起始位置为根据所述第一数据报文的末位报文位置确定的;
其中,所述已丢包范围对应的数据缓冲区已通过填充报文的方式进行补包处理。
在本公开一示例性实施方式中,若所述第一报文范围部分覆盖所述已丢包范围,则所述起始位置为根据第二报文范围的起始报文位置确定的,所述第二报文范围为所述已丢包范围未被所述第一报文范围所覆盖的范围;
其中,所述第一报文范围对应的数据缓冲区已通过填充报文的方式进行补包处理。
在本公开一示例性实施方式中,若所述第一报文范围未覆盖所述已丢包范围,则所述起始位置为根据所述已丢包范围的起始报文位置确定的。
在本公开一示例性实施方式中,所述发送模块被配置为:
以所述起始位置为起点,向所述接收端发送所述第二数据报文。
在本公开一示例性实施方式中,所述第一数据报文之前的数据报文所对应的第一报文序列号,小于所述第一数据报文所对应的第二报文序列号;
所述第一数据报文之前的数据报文为连续数据报文,所述连续数据报文具有可丢弃性,且与所述第一数据报文相紧邻。
在本公开一示例性实施方式中,所述第一数据报文为传输控制协议TCP报文,所述第一信息为所述第一数据报文的TCP选项;
所述第一信息至少还包括选项类型、选项总长度、所述目标数据报文的起始位置以及所述目标数据报文的总长度。
在本公开一示例性实施方式中,所述第一能力报文为TCP报文,所述第一能力报文中的TCP选项还包括TCP选项类型、选项总长度和用于指示所述第一能力报文中的TCP选项所属版本的版本信息,所述版本信息表征所述发送端所满足的协议版本。
在本公开一示例性实施方式中,所述发送模块还被配置为:
响应于所述接收端的通信能力状况不能满足所述目标能力条件,基于TCP协议发送所述第一数据报文。
需要说明的是,本公开实施方式的其他具体细节在上述方法的公开实施方式中已经详细说明,在此不再赘述。
本公开实施方式还提供一种数据报文传输装置,应用于接收端。如图16所示,数据报文传输装置1600包括接收模块1610和发送模块1620。
接收模块1610,用于接收第一数据报文,所述第一数据报文包括第一信息,所述第一信息用于指示目标数据报文的可丢弃性,所述目标数据报文包括所述第一数据报文和所述第一数据报文之前的数据报文;
发送模块1620,用于发送确认报文,所述确认报文携带有第二信息,所述第二信息用于指示第二数据报文的发送方式,所述第二数据报文的发送方式为根据所述第一信息确定的。
在本公开一示例性实施方式中,所述装置还包括:
第二能力协商模块,用于基于能力协商机制与发送端进行能力协商,以确定所述发送端的通信能力状况,其中所述接收端的通信能力状况满足目标能力条件,所述目标能力条件包括标记所述第一信息的能力,以及识别所述第一信息的能力;
响应于所述发送端的通信能力状况满足所述目标能力条件,确定基于所述目标能力条件所对应的协议版本接收所述第一数据报文。
在本公开一示例性实施方式中,所述能力协商机制包括:
接收所述发送端发送的携带有第一能力标识的第一能力报文;
向所述发送端反馈第二能力报文,所述第二能力报文携带有第二能力标识;
其中,所述第一能力标识用于指示所述发送端的通信能力状况满足所述目标能力条件,所述第二能力标识用于指示所述接收端的通信能力状况满足所述目标能力条件。
在本公开一示例性实施方式中,所述第一信息为基于预设的协议规则确定的,所述预设的协议规则为通过所述发送端的应用程序的规则注入模块添加的。
在本公开一示例性实施方式中,所述第一信息包括第一指示信息,所述第一指示信息表征所述目标数据报文中允许丢失的第一报文范围。
在本公开一示例性实施方式中,所述第二信息指示所述第二数据报文的起始位置,在所述发送确认报文之前,所述装置还包括:
确定模块,用于根据所述第一报文范围和已丢包范围确定所述起始位置。
在本公开一示例性实施方式中,所述确定模块被配置为:
若所述第一报文范围完全覆盖所述已丢包范围,则采用填充报文的方式,对所述已丢包范围对应的数据缓冲区进行补包处理;
补包处理后,根据所述第一数据报文的末位报文位置确定所述起始位置。
在本公开一示例性实施方式中,所述确定模块被配置为:
若所述第一报文范围部分覆盖所述已丢包范围,则采用填充报文的方式,对所述第一报文范围对应的数据缓冲区进行补包处理;
补包处理后,根据第二报文范围的起始报文位置确定所述起始位置;
其中,所述第二报文范围为所述已丢包范围未被所述第一报文范围所覆盖的范围。
在本公开一示例性实施方式中,所述确定模块被配置为:
若所述第一报文范围未覆盖所述已丢包范围,则根据所述已丢包范围的起始报文位置确定所述起始位置。
在本公开一示例性实施方式中,所述接收模块被配置为:
接收所述发送端发送的以所述起始位置为起点的所述第二数据报文。
在本公开一示例性实施方式中,所述第一数据报文之前的数据报文所对应的第一报文序列号,小于所述第一数据报文所对应的第二报文序列号;
所述第一数据报文之前的数据报文为连续数据报文,所述连续数据报文具有可丢弃性,且与所述第一数据报文相紧邻。
在本公开一示例性实施方式中,所述第一数据报文为传输控制协议TCP报文,所述第一信息为所述第一数据报文的TCP选项;
所述第一信息至少还包括选项类型、选项总长度、所述目标数据报文的起始位置以及所述目标数据报文的总长度。
在本公开一示例性实施方式中,所述第二能力报文为TCP报文,所述第二能力报文中的TCP选项还包括TCP选项类型、选项总长度和用于指示所述第二能力报文中的TCP选项所属版本的版本信息,所述版本信息表征所述接收端所满足的协议版本。
在本公开一示例性实施方式中,所述接收模块还被配置为:
响应于所述发送端的通信能力状况不能满足所述目标能力条件,基于TCP协议接收所述第一数据报文。
需要说明的是,本公开实施方式的其他具体细节在上述方法的公开实施方式中已经详细说明,在此不再赘述。
示例性存储介质
下面对本公开示例性实施方式的存储介质进行说明。根据本公开的示例性实施方式的用于实现上述方法的程序产品,如可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。该程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RE等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言-诸如Java、C++等,还包括常规的过程式程序设计语言-诸如"C"语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(FAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
示例性电子设备
参考图17对本公开示例性实施方式的电子设备进行说明。图17显示的电子设备1700仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。如图17,电子设备1700以通用计算设备的形式表现。电子设备1700的组件可以包括但不限于:至少一个处理单元1710、至少一个存储单元1720、连接不同系统组件(包括存储单元1720和处理单元1710)的总线1730、显示单元1740。其中,存储单元存储有程序代码,程序代码可以被处理单元1710执行,使得处理单元1710执行本说明书上述"示例性方法"部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元1710可以执行如图1所示的方法步骤等。
存储单元1720可以包括易失性存储单元,例如随机存取存储单元(RAM)1721和/或高速缓存存储单元1722,还可以进一步包括只读存储单元(ROM)1723。存储单元1720还可以包括具有一组(至少一个)程序模块1725的程序/实用工具1724,这样的程序模块1725包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。总线1730可以包括数据总线、地址总线和控制总线。
电子设备1700也可以与一个或多个外部设备1800(例如键盘、指向设备、蓝牙设备等)通信,这种通信可以通过输入/输出(I/O)接口1750进行。电子设备1700还包括显示单元1740,其连接到输入/输出(I/O)接口1750,用于进行显示。并且,电子设备1700还可以通过网络适配器1760与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1760通过总线1730与电子设备1700的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1700使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了装置的若干模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。