本发明涉及数据传输技术领域,尤其涉及一种基于UDP的数据传输方法及装置。
背景技术:
由于UDP(User Datagram Protocol,用户数据包协议)是一种面向无连接的简单不可靠信息传送服务、基于报文的网络通信协议,是在IP协议的基础上增加一二非常简单的报头得到的,该协议报文结构简单,资源消耗小,数据传输延迟小,传输效率高,适合对传输实时性和效率要求高但是对可靠性不敏感的场合。
但是,由于是无连接的,UDP无法像TCP一样能够提供数据分片与重组、数据包确认、数据校验、超时重传、流量控制等多种可靠性保证机制,在需要可靠数据传输的实时应用中就无法满足要求。
综上,我们很容易看到现有技术存在以下缺点:1)TCP无法保障数据的实时性;2)UDP无法保障数据的完整性和可靠性。
技术实现要素:
本发明的主要目的在于提出一种基于UDP的数据传输方法及装置,在保障数据传输实时性的情况下,提高数据传输的可靠性,增加的开销较小,易于实现。
为实现上述目的,本发明提供的一种基于UDP的数据传输方法,包括:
发送端将待发送的数据分为若干个数据包;
向接收端发送握手包,所述握手包包括初始化序号字段和循环冗余校验码CRC;
依次发送所述若干个数据包,并根据初始化序号为每个数据包赋予相应的序号;
接收端判断接收到的数据包是否通过循环冗余校验,若未通过,则向发送端发送否定回答包,所述否定回答包中包括未通过循环冗余校验的数据包对应的序号;
发送端根据所述否定回答包中的序号重新发送对应的数据包。
可选地,所述接收端判断接收到的数据包是否通过循环冗余校验之后还包括:
若接收到的数据包通过循环冗余校验,
接收端保存所述接收到的数据包的接收标志;
判断所述接收到的数据包对应的序号与所述初始化序号之间是否存在未接收到的数据包;
若是,则表示有数据包发送超时,向发送端发送否定回答包,所述否定回答包中包括所述未接收到的数据包对应的序号。
可选地,所述初始化序号由随机数随机产生,所述数据包对应的序号根据发送次序在所述初始化序号的基础上依次累加。
可选地,所述循环冗余校验码CRC为一预设的多项式,所述预设的多项式与每个数据包的序号相关。
可选地,所述否定回答包内包括初始化序号和需要重传的序号。
作为本发明的另一个方面,提供的一种基于UDP的数据传输装置,包括:
分包模块,用于发送端将待发送的数据分为若干个数据包;
握手模块,用于向接收端发送握手包,所述握手包包括初始化序号字段和循环冗余校验码CRC;
发送模块,用于依次发送所述若干个数据包,并根据初始化序号为每个数据包赋予相应的序号;
冗余校验模块,用于接收端判断接收到的数据包是否通过循环冗余校验,若未通过,则向发送端发送否定回答包,所述否定回答包中包括未通过循环冗余校验的数据包对应的序号;
重发模块,用于发送端根据所述否定回答包中的序号重新发送对应的数据包。
可选地,还包括超时校验模块,所述超时校验模块包括:
接收标志单元,用于若接收到的数据包通过循环冗余校验,接收端保存所述接收到的数据包的接收标志;
超时判断单元,用于判断所述接收到的数据包对应的序号与所述初始化序号之间是否存在未接收到的数据包;若是,则表示有数据包发送超时,向发送端发送否定回答包,所述否定回答包中包括所述未接收到的数据包对应的序号。
可选地,所述初始化序号由随机数随机产生,所述数据包对应的序号根据发送次序在所述初始化序号的基础上依次累加。
可选地,所述循环冗余校验码CRC为一预设的多项式,所述预设的多项式与每个数据包的序号相关。
可选地,所述否定回答包内包括初始化序号和需要重传的序号。
本发明提出的一种基于UDP的数据传输方法及装置,该方法包括:发送端将待发送的数据分为若干个数据包;向接收端发送握手包,所述握手包包括初始化序号字段和循环冗余校验码CRC;依次发送所述若干个数据包,并根据初始化序号为每个数据包赋予相应的序号;接收端判断接收到的数据包是否通过循环冗余校验,若未通过,则向发送端发送否定回答包,所述否定回答包中包括未通过循环冗余校验的数据包对应的序号;发送端根据所述否定回答包中的序号重新发送对应的数据包,在保障数据传输实时性的情况下,提高数据传输的可靠性,增加的开销较小,易于实现。
附图说明
图1为本发明实施例一提供的一种基于UDP的数据传输方法流程图;
图2为本发明实施例一提供的数据包的字段分配示意图;
图3为本发明实施例一提供的另一种基于UDP的数据传输方法流程图;
图4为本发明实施例二提供的一种基于UDP的数据传输装置示范性结构框图;
图5为本发明实施例二提供的另一种基于UDP的数据传输装置示范性结构框图;
图6为图5中的超时校验模块示范性结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
实施例一
如图1所示,在本实施例中,一种基于UDP的数据传输方法,包括:
S10、发送端将待发送的数据分为若干个数据包;
S20、向接收端发送握手包,所述握手包包括初始化序号字段和循环冗余校验码CRC;
S30、依次发送所述若干个数据包,并根据初始化序号为每个数据包赋予相应的序号;
S40、接收端判断接收到的数据包是否通过循环冗余校验,若未通过,则进入步骤S50、向发送端发送否定回答包,所述否定回答包中包括未通过循环冗余校验的数据包对应的序号;
S60、发送端根据所述否定回答包中的序号重新发送对应的数据包。
如果所述接收到的数据包通过校验,则表示该数据包可靠传输。
在本实施例中,通过循环冗余校验码CRC(Cyclic Redundancy Check)来校验数据传输的可靠性,在保障数据传输实时性的情况下,提高数据传输的可靠性,增加的开销较小,易于实现。
在本实施例中,所述循环冗余校验码CRC为一预设的多项式,所述预设的多项式与每个数据包的序号相关,通过每个数据包对应的序号可以计算其对应的CRC,并在发送成功后进行CRC校验,校验成功则表示该数据包已可靠传输,若校验失败,则将接收到的数据包标记为异常包,以示其与发送的数据包不同,需要重新发送,此时,就需要接收端向发送端发送一个否定回答包:NACK(Negative ACKnowledgment)包,所述NACK包内包括初始化序号和需要重传的数据包对应的序号;当发送端接收到NACK包后,只需按照其中包含的序号进行对应数据包的发送,在此过程中,不需要发送端一直维持每个数据包的接收状态,增加的系统开销较小,易于实现。
在本实施例中,所述初始化序号字段为一个2字节的字段,其包含一个初始化序号,并且该初始化序号以字段的形式存在于握手包和每个数据包内,所述每个数据包的格式如图2所示,包括2字节的初始化序号、2字节的当前序号、2字节的CRC值及可变长度的UDP实际业务数据。
在本实施例中,所述初始化序号由随机数随机产生,所述数据包对应的序号根据发送次序在所述初始化序号的基础上依次累加,比如某次数据传输中,初始化序号为随机数100,那么发送握手包后,将初始化序号和CRC校验码发送至接收到,然后发送正常数据包,第一个数据包的序号累加为101,第二个数据包的序号则累加为102,以此类推,这样便于本方法根据数据包对应的序号来进行可靠性判断;仍以上述编号为例,在发送端将序号101、102的数据包发送出去后,接收端接收到两个数据包,则分别对两个数据包进行CRC校验,若校验通过,则表示接收到的数据包与发送到的数据包一致,数据包已可靠传输,此时,接收端保存所述接收到的数据包的接收标志,并记录其序号;如果序号为101的数据包未通过CRC校验,则接收端向发送端发送一个NACK包,所述NACK包内包括初始化序号100和需要重传的数据包对应的序号101;当发送端接收到NACK包后,只需按照其中包含的序号101进行对应数据包的发送。
如图3所示,在本实施例中,所述步骤S40之后还包括:
若接收到的数据包通过循环冗余校验,进入步骤S41、接收端保存所述接收到的数据包的接收标志;
S42、判断所述接收到的数据包对应的序号与所述初始化序号之间是否存在未接收到的数据包;
若是,则表示有数据包发送超时,进入步骤S50、向发送端发送否定回答包,所述否定回答包中包括所述未接收到的数据包对应的序号。
如果所述接收到的数据包对应的序号与所述初始化序号之间不存在未接收到的数据包,则表示此前的数据包皆可靠传输。
仍以上述编号为例,在发送端将序号101、102的数据包发送出去后,接收端接收到一个数据包,对数据包进行CRC校验后,校验通过,并检测出该数据包的序号为102,接收端保存该数据包的接收标志,并记录其序号为102,此时,判断所述接收到的数据包对应的序号102与所述初始化序号100之间是否存在未接收到的数据包,经过查找历史接收标志发现,序号为101的数据包还未接收到,则表示序号为101的数据包发送超时,此时就需要接收端向发送端发送一个NACK包,所述NACK包内包括序号101和初始化序号100,发送端接收到NACK包后,只需按照其中包含的序号101进行对应数据包的发送。
在本实施例中,不管UDP数据包是发送异常还是发送超时,都可以根据其序号及CRC校验码检测到,在保障数据传输实时性的情况下,提高数据传输的可靠性。
实施例二
如图4所示,在本实施例中,一种基于UDP的数据传输装置,包括:
分包模块10,用于发送端将待发送的数据分为若干个数据包;
握手模块20,用于向接收端发送握手包,所述握手包包括初始化序号字段和循环冗余校验码CRC;
发送模块30,用于依次发送所述若干个数据包,并根据初始化序号为每个数据包赋予相应的序号;
冗余校验模块40,用于接收端判断接收到的数据包是否通过循环冗余校验,若未通过,则向发送端发送否定回答包,所述否定回答包中包括未通过循环冗余校验的数据包对应的序号;
重发模块50,用于发送端根据所述否定回答包中的序号重新发送对应的数据包。
在本实施例中,通过循环冗余校验码CRC(Cyclic Redundancy Check)来校验数据传输的可靠性,在保障数据传输实时性的情况下,提高数据传输的可靠性,增加的开销较小,易于实现。
在本实施例中,所述循环冗余校验码CRC为一预设的多项式,所述预设的多项式与每个数据包的序号相关,通过每个数据包对应的序号可以计算其对应的CRC,并在发送成功后进行CRC校验,校验成功则表示该数据包已可靠传输,若校验失败,则将接收到的数据包标记为异常包,以示其与发送的数据包不同,需要重新发送,此时,就需要接收端向发送端发送一个否定回答包:NACK(Negative ACKnowledgment)包,所述NACK包内包括初始化序号和需要重传的数据包对应的序号;当发送端接收到NACK包后,只需按照其中包含的序号进行对应数据包的发送,在此过程中,不需要发送端一直维持每个数据包的接收状态,增加的系统开销较小,易于实现。
在本实施例中,所述初始化序号由随机数随机产生,所述数据包对应的序号根据发送次序在所述初始化序号的基础上依次累加,比如某次数据传输中,初始化序号为随机数100,那么发送握手包后,将初始化序号和CRC校验码发送至接收到,然后发送正常数据包,第一个数据包的序号累加为101,第二个数据包的序号则累加为102,以此类推,这样便于本方法根据数据包对应的序号来进行可靠性判断;仍以上述编号为例,在发送端将序号101、102的数据包发送出去后,接收端接收到两个数据包,则分别对两个数据包进行CRC校验,若校验通过,则表示接收到的数据包与发送到的数据包一致,数据包已可靠传输,此时,接收端保存所述接收到的数据包的接收标志,并记录其序号;如果序号为101的数据包未通过CRC校验,则接收端向发送端发送一个NACK包,所述NACK包内包括初始化序号100和需要重传的数据包对应的序号101;当发送端接收到NACK包后,只需按照其中包含的序号101进行对应数据包的发送。
如图5、图6所示,在本实施例中,还包括超时校验模块60,所述超时校验模块60包括:
接收标志单元61,用于若接收到的数据包通过循环冗余校验,接收端保存所述接收到的数据包的接收标志;
超时判断单元62,用于判断所述接收到的数据包对应的序号与所述初始化序号之间是否存在未接收到的数据包;若是,则表示有数据包发送超时,向发送端发送否定回答包,所述否定回答包中包括所述未接收到的数据包对应的序号。
仍以上述编号为例,在发送端将序号101、102的数据包发送出去后,接收端接收到一个数据包,对数据包进行CRC校验后,校验通过,并检测出该数据包的序号为102,接收端保存该数据包的接收标志,并记录其序号为102,此时,判断所述接收到的数据包对应的序号102与所述初始化序号100之间是否存在未接收到的数据包,经过查找历史接收标志发现,序号为101的数据包还未接收到,则表示序号为101的数据包发送超时,此时就需要接收端向发送端发送一个NACK包,所述NACK包内包括序号101和初始化序号100,发送端接收到NACK包后,只需按照其中包含的序号101进行对应数据包的发送。
在本实施例中,不管UDP数据包是发送异常还是发送超时,都可以根据其序号及CRC校验码检测到,在保障数据传输实时性的情况下,提高数据传输的可靠性。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。