一种在通信网络中使用udp协议进行数据可靠传输的方法

文档序号:7870520阅读:283来源:国知局
专利名称:一种在通信网络中使用udp协议进行数据可靠传输的方法
技术领域
本发明涉及一种在通信网络中进行数据传输的方法,尤其涉及一种使用UDP协议进行数据可靠传输的方法。
背景技术
互联网技术已经得到了普及应用,在各种各样的通信网络中也越来越多地使用了互联网技术。传统的互联网数据传输协议TCP协议和UDP协议各有优缺点,对此的描述已在申请号为200910193881. 2的中国专利文件(下称文件A)的背景技术部分记载,此处不再详细描述。为解决基于UDP协议的数据传输的不可靠问题,文件A给出了具体的解决方案, 即使用UDP协议进行可靠数据传输的方法。但是,文件A中所述的使用UDP协议进行数据传输的方法仍具有如下缺点1、文件A所述技术方案,没有考虑发送端与接收端之间对发送数据报文与确认报文之间的预定时间进行协商的过程,因此只适用于通信速率一致的网络。然而实际情况下,很多通信网络的通信状态并不一致,比如通信网络中的某一部分中继采用了卫星链路,由于卫星链路延时很大,这一部分的预定时间就必须比采用其他中继方式的部分的预定时间多很多,否则就会出现传输无法建立或者频繁重传的问题。
2、文件A所述技术方案,只适用于服务器或类似的资源丰富的设备。该方案中,应用层发送给通信层数据都保存到队列,应用层不能根据通信层实际情况停止发送。那么,如果链路不能及时恢复,对于资源匮乏的嵌入式设备将很快导致设备资源耗尽。
3、文件A所述方案中,对于数据报文的确认报文,单纯采用定时回复的方式。当单向传输数据量很大时,会因为不能及时得到确认报文而导致重传,从而造成通信资源浪费。
4、文件A所述方案,接收端的数据接收采用应用层轮询方式,影响系统效率。
5、文件A所述方案,在链路重新建立时,队列中的报文序号重新分配影响应用层工作。
总之,文件A所述方案具有很大的局限性,在通信带宽和设备资源都充裕的互联网网络可以得到应用,却难以适应通信网络中存在各种不同技术和不同设备的复杂情况。发明内容
本发明的目的是克服现有技术方案的不足,提供一种在通信网络中使用UDP协议的数据可靠传输方法。为此,本发明采用以下技术方案它首先由数据包发送端与接收端之间进行连接握手,数据包发送端通信层通知应用层可靠性传输通道建立;在数据包传输过程中,数据包发送端通信层通过心跳机制检测传输通道的通道状态,如果通道状态发生变化则通知应用层;数据包传输包括以下过程(I)发送端通信层设立发送缓存队列和重传队列, 应用层发送的数据包到达通信层后, 每个数据包封装上包含应用层标识的协议头并统一编排序号进入发送缓存队列,发送缓存队列中的数据包采用先入先出的方式,数据包由通信层传输后,从发送缓存队列删除所发的数据包,将其保存到重传队列中,发送端通信层在收到接收端包含数据包序号的数据传输确认报文后将已确认的数据包从重传队列中删除;(2)接收端通信层设立接收缓存队列,接收端通信层将接收到的数据包存入接收缓存队列中,向发送端回应数据传输确认报文,此过程中,若接收缓存队列中数据包最小序号符合期望序号,则解析该最小序号数据包的协议头,按照应用层标识将数据包传送给接收端应用层,将此数据包从接收缓存队列中删除,并更新期望序号;(3)过程(I)和过程(2)重复执行,直至所有数据包传送完毕,数据包发送端与接收端之间关闭传输通道。
进一步的技术方案是,如果传输通道的通道状态发生变化,采用如下步骤步骤一,若传输通道出现链路故障,通知应用层停止向通信层发送数据包;步骤二,若传输通道的链路恢复,通知应用层继续发送数据包。
故障时通知应用层停止向通信层发送数据包,可以防止通信层用于缓存数据包的资源被耗尽。
进一步的技术方案是,过程(2)接收端通信层同时采用两种方法向发送端回应数据传输确认报文方法一,定时法,每隔预定时间就回应一个数据传输确认报文;方法二,窗口法,规定数据包数量作为一个窗口,当窗口的数据包数量要求得到满足时,回应一个数据传输确认报文。
在本发明方案中,同时采用定时法和窗口法向发送端回应数据传输确认报文,可以保证数据传输确认报文被及时回复,减少发送端重传。当发送端发送数据包很多时,在定时器到期前窗口法可以及时回复确认数据;当发送端发送数据包很少时,虽然没有达到窗口回应数量,定时器可以及时回复数据传输确认报文。
进一步的技术方案是,所述连接握手过程采用如下步骤第一、发送端应用层通知通信层,发送端与接收端建立可靠性传输通道;第二、发送端通信层发送建立通道请求报文到接收端预定的UDP端口,建立通道请求报文中包含数据包传输的初始序号,包含与接收端协商的心跳间隔时间、链接请求间隔时间、重传时间、重传次数;第三、接收端通信层收到建立通道请求报文后,发送建立通道确认报文作为回应,建立通道确认报文包含协商后所同意的心跳间隔时间、链接请求间隔时间、重传时间、重传次数;第四、发送端通信层收到建立通道确认报文,连接握手过程完成。
通过发送端与接收端的协商,可以使本发明方案应用于具有任意类型的带有不同延时的通信网络中。
进一步的技术方案是,·对于保存在重传队列里的数据包,如果在预定时间内未能收到数据传输确认报文,发送端通信层会重新发送这样的数据包。
进一步的技术方案是,在执行过程(I)和过程(2)期间,若传输通道发生链路故障,且在总心跳时间内未恢复,则发送端的发送缓存队列和重传队列中所有数据包按序号整理,全部保存到发送缓存队列,数据包发送端与接收端之间重新进行连接握手,建立通道报文中包含的数据包传输初始序号为整理后发送缓存队列中第一个数据包的序号,此后进入过程(I)、(2)、(3)继续进行剩余数据包的传输。
本发明方案在链路断开又恢复后,不需要数据包序号重新排序,通过过程(I)握手,接收端就可以获得新的期望序号。
另一进一步的技术方案是,发送端通信层重新发送预定时间内未能收到数据传输确认报文的数据包,若重传次数超过阈值依然未能收到数据传输确认报文,则发送端的发送缓存队列和重传队列中所有数据包按序号整理,全部保存到发送缓存队列,数据包发送端与接收端之间重新进行连接握手,建立通道报文中包含的数据包传输初始序号为整理后发送缓存队列中第一个数据包的序号,此后进入过程(I)、(2)、(3)继续进行剩余数据包的传输。
在上述方案基础上,进一步的技术方案是,所述发送端的发送缓存队列和重传队列中所有数据包按序号整理,全部保存到发送缓存队列,按以下步骤进行将发送缓存队列中的数据包删除,保存到重传队列;再将重传队列中的所有数据包在重传队列中删除,保存到发送缓存队列。
这样的整理方式,可以保证整理完成后,在发送缓存队列中的数据包是按序号顺次排列的。重新执行过程(I)时,建立通道报文所使用的数据包初始化序号是发送缓存队列第一个数据包的序号。因此序号无需重新分配。
进一步的技术方案是,所述过程(3)数据包发送端与接收端之间关闭传输通道包括如下步骤发送端应用层通知通信层关闭传输通道,发送端通信层向接收端发送断开通道请求报文并停止心跳检测,接收端通信层收到断开请求报文后向发送端回应断开通道确认报文, 发送端通信层收到断开通道确认报文后通知应用层传输通道已关闭。
本发明方案中,发送端和接收端的握手过程还包含了对数据传输过程中相应定时器的一个协商过程,使得本方案具备很强的适应性,可应用于传输延时相差很大的通信网络。
本发明方案中,发送端应用层与通信层采用相互通知的方法,两者既相互独立又是一个统一的整体,在实现数据可靠传输的同时,避免了因为传输通道故障时不知情的应用层持续向通信层发送数据而耗尽资源的情况。
本发明方案中,接收端通信层直接根据协议头信息将数据包传送到应用层激活任务调度,比轮询和回调调度策略更有优势。


图1为建立传输通道时 ,本发明发送端应用层与通信层交互的示意图。
图2为通信网络中,正常传输时的示意图。
图3为心跳检测异常时,本发明的处理流程图。
图4为重传异常时,本发明的处理流程图。
图5为关闭传输通道时,本发明发送端应用层与通信层交互的示意图。
具体实施方式
以下结合附图用具体实施例来对本发明作进一步的说明。
图1所示为,当数据传输开始时,发送端应用层与发送端通信层发生交互的过程。 应用层通过0PEN_CMD通知发送端通信层与接收端建立可靠性传输101,发送端通信层在与接收端通信层进行握手并建立心跳检测102后,通过0PEN_ACK通知发送端应用层传输通道建立成功103,应用层可以开始发送数据APP_DATA给通信层104。
在通信层通知应用层传输通道建立之前,应用层发送的数据被丢弃。当传输通道建立之后,通信层将收到的数据包封装协议头,并统一编排序号,存入发送缓存队列。
协议头中应包含应用层标识。
图2所示为正常传输的过程。
SI部分是发送端与接收端通信层之间进行连接握手的过程,该握手过程采用如下步骤发送端通信层发送建立通道请求报文et_conn_req到接收端预定的UDP端口 211, et_ conn_req报文中包含数据包传输的初始序号,包含与接收端协商的心跳间隔时间、链接请求间隔时间、重传时间、重传次数;接收端通信层收到et_conn_req报文后,发送建立通道确认报文et_conn_ack作为回应212,et_conn_ack报文包含协商后所同意的心跳间隔时间、链接请求间隔时间、重传时间、重传次数;发送端通信层收到et_c0nn_ack报文,连接握手过程完成。
S2部分是连接握手过程完成后,发送端与接收端通信层之间建立心跳检测的过程,其步骤如下第一,根据握手过程协商的心跳间隔时间,发送端通信层发送心跳报文et_hb_req 221,启动心跳间隔定时器。
第二,接收端通信层收到et_hb_req报文后,回应心跳确认报文et_hb_ack 222。
第三,发送端通信层收到et_hb_ack报文,定时器复位。
重复第一到第三步骤的S2部分过程,保持心跳检测正常。
发送端通信层若连续多次没有收到et_hb_ack报文,超过规定的定时器阈值,则通知应用层停止发送数据,并重新进入Si部分过程。
S3部分为在心跳检测正常的情况下,数据包发送的过程。
发送端通信层设立发送缓存队列和重传队列。应用层发送的数据包到达通信层后,每个数据包封装包含应用层标识的协议头并统一编排序号进入发送缓存队列。发送缓存队列中的数据包et_data采用先入先出的方式,由通信层发往接收端通信层231。已发送的数据包从发送缓存队列删除,保存到重传队列中。
接收端通信层设立接收缓存队列,将接收到的et_data报文存入接收缓存队列中,向发送端回应数据传输确认报文et_data_ack 232。
发送端通信层在 收到包含数据包序号的et_data_ack报文后将已确认的数据包从重传队列中删除。
若接收缓存队列中数据包最小序号符合期望序号,则接收端通信层解析该最小序号数据包的协议头,按照应用层标识将数据包传送给应用层。将此数据包从接收缓存队列中删除,并更新期望序号。
S3部分过程重复进行,直至所有数据包从发送端传输到接收端为止。
图3所示为心跳检测出现异常时,发送端通信层的处理流程。在S3数据传输过程中301,保持心跳检测302。若et_hb_ack报文少量丢失,但在规定的定时器阈值内恢复收到et_hb_ack报文,则链路正常,继续进行S3过程;若et_hb_ack报文持续丢失超过规定的阈值,则判定为链路故障。链路故障时,发送端通信层通知应用层停止发送数据303,将发送缓存队列和重传队列中所有数据包按序号整理,全部保存到发送缓存队列304,然后重新开始SI握手过程305。
上述过程中的步骤304队列整理,按如下方式进行将发送缓存队列中的数据包删除,保存到重传队列;再将重传队列中的所有数据包在重传队列中删除,保存到发送缓存队列。
图4所示为数据重传出现异常时,发送端通信层的处理流程。在S3数据传输过程中401,对于未能获得et_data_ack确认序号的数据包et_data,发送端通信层会予以重新发送,即重传。重传的次数由握手时协商而定,发送端通信层会检测重传次数402。若重传次数没有超过规定的阈值,重传后收到了来自接收端的确认报文et_data_ack,则链路正常,继续进行S3过程;若重传次数超过规定的阈值,则判定为链路故障。链路故障时,发送端通信层通知应用层停止发送数据403,将发送缓存队列和重传队列中所有数据包按序号整理,全部保存到发送缓存队列404,然后重新开始SI握手过程405。
上述过程中的步骤404队列整理,按如下方式进行将发送缓存队列中的数据包删除,保存到重传队列;再将重传队列中的所有数据包在重传队列中删除,保存到发送缓存队列。
图5所示为,当所有数据传输完成后,发送端应用层与通信层发生交互的过程。应用层通过CL0SE_CMD通知通信层数据发送完毕,关闭到接收端的传输通道501 ;通信层检查发送缓存队列和重传队列都为空之后,停止向接收端发送et_hb_req心跳报文502,通过 CL0SE_ACK通知应用层传输通道关闭成功503。
接收端通信层在规定的心跳间隔时间内未能收到心跳报文et_hb_req,检查接收缓存队列为空,则通知应用层传输通道已关闭,传输完成。
以上所述仅为本发明较佳的实施方式。但本发明的保护范围不局限于此,任何本技术领域的普通技术人员在本发明披露的技术范围 内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
权利要求
1.一种在通信网络中采用UDP协议进行数据可靠传输的方法,其特征在于,它首先由数据包发送端与接收端之间进行连接握手,数据包发送端通信层通知应用层可靠性传输通道建立;在数据包传输过程中,数据包发送端通信层通过心跳机制检测传输通道的通道状态,如果通道状态发生变化则通知应用层;在数据包传输包括以下过程(1)发送端通信层设立发送缓存队列和重传队列,应用层发送的数据包到达通信层后, 每个数据包封装上包含应用层标识的协议头并统一编排序号进入发送缓存队列,发送缓存队列中的数据包采用先入先出的方式,数据包由通信层传输后,从发送缓存队列删除所发的数据包,将其保存到重传队列中,发送端通信层在收到接收端包含数据包序号的数据传输确认报文后将已确认的数据包从重传队列中删除;(2)接收端通信层设立接收缓存队列,接收端通信层将接收到的数据包存入接收缓存队列中,向发送端回应数据传输确认报文,此过程中,若接收缓存队列中数据包最小序号符合期望序号,则解析该最小序号数据包的协议头,按照应用层标识将数据包传送给接收端应用层,将此数据包从接收缓存队列中删除,并更新期望序号;(3)过程(I)和过程(2)重复执行,直至所有数据包传送完毕,数据包发送端与接收端之间关闭传输通道。
2.根据权利要求1所述的一种在通信网络中采用UDP协议进行数据可靠传输的方法, 其特征在于,如果传输通道的通道状态发生变化,采用如下步骤步骤一,若传输通道出现链路故障,通知应用层停止向通信层发送数据包;步骤二,若传输通道的链路恢复,通知应用层继续发送数据包。
3.根据权利要求2所述的一种在通信网络中采用UDP协议进行数据可靠传输的方法, 其特征在于,过程(2)接收端通信层同时采用两种方法向发送端回应数据传输确认报文方法一,定时法,每隔预定时间就回应一个数据传输确认报文;方法二,窗口法,规定数据包数量作为一个窗口,当窗口的数据包数量要求得到满足时,回应一个数据传输确认报文。
4.根据权利要求3所述的一种在通信网络中采用UDP协议进行数据可靠传输的方法, 其特征在于,所述连接握手过程采用如下步骤第一、发送端应用层通知通信层,发送端与接收端建立可靠性传输通道;第二、发送端通信层发送建立通道请求报文到接收端预定的UDP端口,建立通道请求报文中包含数据包传输的初始序号,包含与接收端协商的心跳间隔时间、链接请求间隔时间、重传时间、重传次数;第三、接收端通信层收到建立通道请求报文后,发送建立通道确认报文作为回应,建立通道确认报文包含协商后所同意的心跳间隔时间、链接请求间隔时间、重传时间、重传次数;第四、发送端通信层收到建立通道确认报文,连接握手过程完成。
5.根据权利要求4所述的一种在通信网络中采用UDP协议进行数据可靠传输的方法, 其特征在于,对于保存在重传队列里的数据包,如果在预定时间内未能收到数据传输确认报文,发送端通信层会重新发送这样的数据包。
6.根据权利要求5所述的一种在通信网络中采用UDP协议进行数据可靠传输的方法, 其特征在于,在执行过程(I)和过程(2)期间,若传输通道发生链路故障,且在总心跳时间内未恢复,则发送端的发送缓存队列和重传队列中所有数据包按序号整理,全部保存到发送缓存队列,数据包发送端与接收端之间重新进行连接握手,建立通道报文中包含的数据包传输初始序号为整理后发送缓存队列中第一个数据包的序号,此后进入过程(I)、(2)、(3)继续进行剩余数据包的传输。
7.根据权利要求5所述的一种在通信网络中采用UDP协议进行数据可靠传输的方法, 其特征在于,发送端通信层重新发送预定时间内未能收到数据传输确认报文的数据包,若重传次数超过阈值依然未能收到数据传输确认报文,则发送端的发送缓存队列和重传队列中所有数据包按序号整理,全部保存到发送缓存队列,数据包发送端与接收端之间重新进行连接握手,建立通道报文中包含的数据包传输初始序号为整理后发送缓存队列中第一个数据包的序号,此后进入过程(I)、(2)、(3)继续进行剩余数据包的传输。
8.根据权利要求6和7所述的一种在通信网络中采用UDP协议进行数据可靠传输的方法,其特征在于,所述发送端的发送缓存队列和重传队列中所有数据包按序号整理,全部保存到发送缓存队列,按以下步骤进行将发送缓存队列中的数据包删除,保存到重传队列;再将重传队列中的所有数据包在重传队列中删除,保存到发送缓存队列。
9.根据权利要求8所述的一种在通信网络中采用UDP协议进行数据可靠传输的方法, 其特征在于,所述过程(3)数据包发送端与接收端之间关闭传输通道包括如下步骤发送端应用层通知通信层关闭传输通道,发送端通信层向接收端发送断开通道请求报文并停止心跳检测,接收端通信层收到断开请求报文后向发送端回应断开通道确认报文, 发送端通信层收到断开通道确认报文后通知应用层传输通道已关闭。
全文摘要
本发明提供了一种在通信网络中使用UDP协议的数据可靠传输方法。它首先由数据包发送端与接收端之间进行连接握手,数据包发送端通信层通知应用层可靠性传输通道建立;在数据包传输过程中,数据包发送端通信层通过心跳机制检测传输通道的通道状态,如果通道状态发生变化则通知应用层。本发明具备很强的适应性,可应用于传输延时相差很大的通信网络。发送端应用层与通信层采用相互通知的方法,两者既相互独立又是统一整体,在实现数据可靠传输的同时,避免了因为传输通道故障时不知情的应用层持续向通信层发送数据而耗尽资源的情况。本发明中,接收端通信层直接根据协议头信息将数据包传送到应用层激活任务调度,比轮询和回调调度策略更有优势。
文档编号H04L29/06GK103036904SQ20121057914
公开日2013年4月10日 申请日期2012年12月27日 优先权日2012年12月27日
发明者宫尚, 周利满, 李明江, 陈池 申请人:东方通信股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1