一种通信网络及其自动重传机制实现方法
技术领域
本发明涉及通信技术领域,特别是一种通信网络及其自动重传机制实现方法。
背景技术
随着通信行业的技术革新以及不断发展,引起了通信网络中数据量的急剧膨胀,同时,通信网络也由传统的有线信道通信网络逐渐发展为无线信道通信网络。但是,无论是有线信道还是无线信道,在通信网络中都不可避免的存在着各种传输干扰,这些传输干扰直接作用在从发送方向接收方所传送的数据中,直接导致了接收方不能准确无误地接收数据。为了解决传输干扰对通信网络中数据传输的影响,人们希望能在通信网络中引入自动重传机制。自动重传请求ARQ(Automatic Repeat reQuest)是发送端对传输出错或丢失的数据进行自动重传,直到数据成功到达接收端的一种链路层差错控制方法,包括停止等待、回退N步重传、选择重传三种类型,它被认为是一种可以解决传输干扰问题的自动重传机制。IEEE802.16工作组在所发布的标准中提出了一种自动重传请求ARQ方案,但是没有规定数据发送、接收的具体处理流程和信息反馈的实现方法。
发明内容
本发明的目的在于,提供一种通信网络及其自动重传机制实现方法,
为了实现上述目的,本发明提供了一种通信网络,包括发送端和接收端,所述发送端和接收端用于根据在它们之间建立的服务流进行数据的传递和接收:
所述发送端中,包括发送信息模块以及发送模块,所述发送信息模块用于保存与发送数据相关的信息、参数和数据,以配合所述发送端实现对数据的发送、重发以及对发送参数的调整,所述发送模块用于保存和发送需要发送到所述接收端中的数据;
所述接收端中,包括接收信息模块以及接收模块,所述接收信息模块用于保存与接收数据相关的信息、参数和数据,以配合所述接收端实现对数据的接收、反馈以及对接收参数的调整,所述接收模块用于接收由所述发送端的发送模块发送来的数据。
较佳的,在所述通信网络中,所述发送信息模块采取发送队列的形式对所述与发送数据相关的信息、参数和数据进行保存,所述接收信息模块采取接收队列的形式对所述与接收数据相关的信息、参数和数据进行保存。
较佳的,在所述通信网络中,所述发送队列的发送队列头中包含发送端和接收端之间建立服务流中需要发送的数据的总字节数,发送窗口,待发送块编号,待重传数据,最大块编号,等待反馈块数,发送标识,重传间隔时间,同步定时器、重置定时器,丢弃定时器,重置次数以及补充信息。
较佳的,在所述通信网络中,所述发送窗口用以定义可以发送的块编号的范围。
较佳的,在所述通信网络中,所述发送队列的发送队列节点中包含未发送队列、等待反馈队列、重传队列和丢弃队列,数据长度,最后分块长度,最大块编号,最小块编号,数据首地址以及补充信息。
较佳的,在所述通信网络中,所述发送队列的发送队列节点是待发送的一个完整的服务数据单元或服务数据单元的一部分。
较佳的,在所述通信网络中,所述未发送队列和丢弃队列使用块队列结构,所述块队列结构的块队列头包含本队列中的分块状态和全部分块的总长度,所述块队列结构的块队列节点对应于一个分块,包含本分块的块首地址和块编号。
较佳的,在所述通信网络中,所述等待反馈队列和重传队列使用时间队列结构,所述时间队列结构的时间队列头包含本队列中的分块的状态,所述时间队列结构的时间队列节点包含重传定时器,生存期定时器以及使用相同重传定时器和生存期定时器的一组分块。
较佳的,在所述通信网络中,所述接收队列的接收队列头中包含接收窗口,最大块编号,接收标识,同步定时器、重置定时器,重置次数、反馈队列和补充信息。
较佳的,在所述通信网络中,所述接收窗口用以定义可以接收的块编号的范围。
较佳的,在所述通信网络中,所述接收队列的接收队列节点中包含最大块编号,最小块编号,最后分块长度,段状态标识和分段队列。
较佳的,在所述通信网络中,所述接收队列的接收队列节点是从发送端所接收到的一个完整的服务数据单元或服务数据单元的一部分。
较佳的,在所述通信网络中,所述分段队列的分段队列头用于保存分段的总长度,所述分段队列的分段队列节点对应所述服务数据单元的一个分段,包含分段长度、分段首地址和分段的最小块编号。
较佳的,在所述通信网络中,所述反馈队列用以存储接收到的数据信息,所述反馈队列的反馈队列头中包含最近一次反馈的块编号,所述反馈队列的反馈队列节点中包含本节点所包含数据的最大块编号,最小块编号和清除定时器队列。
较佳的,在所述通信网络中,所述清除定时器队列节点中包含清除定时器和开启所述清除定时器的连续块序列的最大块编号。
为了实现上述目的,本发明还公开了一种通信网络的自动重传机制实现方法,包括以下步骤:
步骤100,所述通信网络中的发送端和接收端针对建立在它们间的服务流,在发送端设置发送信息模块,在接收端设置接收信息模块;
步骤200,所述发送端接收到需要发送的信息后,通过所述发送信息模块提取出需要向所述接收端发送的数据,通过发送端中的发送模块向所述接收端传送数据以及重传数据;
步骤300,所述接收端通过所述接收端中的接收模块接收从发送端发来的数据,将所述数据及相关信息保存在所述接收信息模块中,根据所接收到的数据对所述维护反馈消息发送端进行信息反馈,并将所接收到的数据上传至上层;
步骤400,发送端根据所接收到的反馈信息,对所述发送信息模块进行调整。
较佳的,在所述通信网络的自动重传机制实现方法中,所述发送信息模块采取发送队列的形式对所述与发送数据相关的信息、参数和数据进行保存,所述接收信息模块采取接收队列的形式对所述与接收数据相关的信息、参数和数据进行保存;
所述发送队列的发送队列头中包含所述服务流中需要发送的数据的总字节数,发送窗口,待发送块编号,待重传数据,最大块编号,等待反馈块数,发送标识,重传间隔时间,同步定时器、重置定时器,丢弃定时器,重置次数以及补充信息,所述发送队列的发送队列节点中包含未发送队列、等待反馈队列、重传队列和丢弃队列,数据长度,最后分块长度,最大块编号,最小块编号,数据首地址以及补充信息;
所述接收队列的接收队列头中包含接收窗口,最大块编号,接收标识,同步定时器、重置定时器,重置次数、反馈队列和补充信息,所述接收队列的接收队列节点中包含最大块编号,最小块编号,最后分块长度,段状态标识和分段队列。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤200中,所述发送端向所述接收端发送的数据分为不可分段不可打包,不可分段可打包,可分段不可打包以及可分段可打包四种类型。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤200中,当所述发送端向所述接收端发送的数据类型为不可分段不可打包时,提取需要发送的数据的包括以下步骤:
步骤2101,发送端将待发送数据根据服务流参数进行分块,存储到未发送队列,记录所述数据的到达信息;
步骤2102,发送端判断所述服务流是否是第一次发送数据,如果是,进入步骤2103,否则,进入步骤2104;
步骤2103,发送端启动本服务流的发送端同步定时器,设置发送端同步超时处理事件;
步骤2104,发送端判断可发送的字节数是否大于0,如果是,进入步骤2106,否则,进入步骤2105;
步骤2105,操作结束;
步骤2106,发送端检查是否存在需要重传的发送队列节点,如果存在,进入步骤2107,否则,进入步骤2110,其中,已检测过的发送队列节点不再被检测;
步骤2107,发送端检查所述需要重传的发送队列节点中是否有数据,如果有,进入步骤2108,如果没有,进入步骤2106;
步骤2108,发送端检查所述需要重传的发送队列节点是否在发送窗口的范围内,如果在,进入步骤2109;否则,进入步骤2105;
步骤2109,发送端将所述需要重传的发送队列节点中的数据从重传队列转移到等待反馈队列,记录发送信息,重启重传定时器,用所述数据生成协议数据单元等待发送,进入步骤2104;
步骤2110,发送端检查未发送队列中是否有数据,如果有,进入步骤2111,否则,进入步骤2105;
步骤2111,发送端检查所述未发送队列中的单个数据在生成协议数据单元后,是否会超出最大协议数据单元的长度,如果是,进入步骤2112,否则,进入步骤2113;
步骤2112,发送端删除所述未发送队列中的数据,进入步骤2110;
步骤2113,发送端判断所述未发送队列中的数据块编号后是否在发送窗口的范围内,如果在,进入步骤2114,否则,进入步骤2105;
步骤2114,发送端将所述未发送队列中的数据块编号,构建成完整的发送队列节点,添加到发送队列;
步骤2115、发送端将所述添加到发送队列中的所述发送队列节点中的数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,生成协议数据单元等待发送,进入步骤2104。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤200中,当所述发送端向所述接收端发送的数据类型为不可分段可打包时,提取需要发送的数据的包括以下步骤:
步骤2201,发送端将待发送数据根据服务流参数进行分块,存储到未发送队列,记录所述数据的到达信息,初始化一用于存放可以进行打包的数据的生成队列;
步骤2202,发送端判断本服务流是否是第一次发送数据,如果是,进入步骤2203,否则,进入步骤2204;
步骤2203,发送端启动本服务流的发送端同步定时器,设置发送端同步超时处理事件;
步骤2204,发送端判断可发送的字节数是否大于0,如果是,进入步骤2206,否则,进入步骤2205;
步骤2205,操作结束;
步骤2206,发送端检查是否存在需要重传的发送队列节点,如果存在,进入步骤2207,否则,进入步骤2212,其中,已检测过的发送队列节点不再被检测;
步骤2207,发送端检查所述需要重传的发送队列节点中是否有数据,如果有,进入步骤2208,如果没有,进入步骤2206;
步骤2208,发送端检查所述需要重传的发送队列节点是否在发送窗口的范围内,如果在,进入步骤2209,否则,进入步骤2220;
步骤2209,发送端检查本次发送的数据在生成协议数据单元后,是否超出可发送的最大协议数据单元长度,如果是,进入步骤2210,否则,进入步骤2211;
步骤2210,发送端打包生成队列中的数据;
步骤2211,发送端将可用于打包的数据从重传队列转移到等待反馈队列,记录发送信息,重启重传定时器,加入生成队列,进入步骤2204;
步骤2212,发送端检查未发送队列中是否有数据,如果有,进入步骤2213;否则,进入步骤2220;
步骤2213,发送端检查所述未发送队列中的单个数据在生成协议数据单元后,是否会超出最大协议数据单元的长度,如果是,进入步骤2214,否则,进入步骤2215;
步骤2214,发送端删除所述数据,进入步骤2212;
步骤2215,发送端判断所述未发送队列中的数据块编号后是否在发送窗口的范围内,如果是,进入步骤2216,否则,进入步骤2220;
步骤2216,发送端将所述未发送队列中的数据块编号,构建成完整的发送队列节点,添加到发送队列;
步骤2217,发送端检查本次发送的全部数据在生成协议数据单元后,是否超出可发送的最大协议数据单元长度,如果是,进入步骤2218,否则,进入步骤2219;
步骤2218,发送端打包生成队列中的数据,进入步骤2219;
步骤2219,发送端将可用于打包的数据从未发送队列转移到等待反馈队列,记录发送信息,同时启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,加入生成队列,进入步骤2204;
步骤2220,发送端打包生成队列中的数据,用所述数据生成协议数据单元等待发送,操作结束。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤200中,当所述发送端向所述接收端发送的数据类型为可分段不可打包时,提取需要发送的数据的包括以下步骤:
步骤2301,发送端将待发送数据根据服务流参数进行分块,存储到未发送队列,记录所述数据的到达信息,进入步骤2302;
步骤2302,发送端判断本服务流是否是第一次发送数据,如果是,进入步骤2303,否则,进入步骤2304;
步骤2303,发送端启动本服务流的发送端同步定时器,设置发送端同步超时处理事件,进入步骤2304;
步骤2304,发送端判断可发送的字节数是否大于0,如果是,进入步骤2306,否则,进入步骤2305;
步骤2305,操作结束;
步骤2306,发送端检查是否存在需要重传的发送队列节点,如果存在,进入步骤2307,否则,进入步骤2312,其中,已检测过的发送队列节点不再被检测;
步骤2307,发送端检查所述需要重传的发送队列节点中是否有数据,如果有,进入步骤2308,如果没有,进入步骤2306;
步骤2308,发送端检查所述需要重传的发送队列节点的第一时间队列节点是否在发送窗口的范围内,如果在,进入步骤2309,否则,进入步骤2310;
步骤2309,发送端将重传队列中的数据转移到等待反馈队列,记录发送信息,重启重传定时器,生成协议数据单元等待发送,进入步骤2304;
步骤2310,发送端判断带宽是否大于一个分块的长度,如果是,进入步骤2311,否则,进入步骤2305;
步骤2311,发送端生成新的时间队列节点,加入到等待反馈队列,记录发送信息,取出原时间队列节点的生存期剩余时间,为新时间队列节点启动生存期定时器、重传定时器,设置重传超时处理事件、生存期超时处理事件,生成协议数据单元等待发送,进入步骤2305;
步骤2312,发送端检查未发送队列中是否有数据,如果有,进入步骤2313,否则,进入步骤2305;
步骤2313,发送端判断带宽是否大于一个分块的长度,如果是,进入步骤2314,否则,进入步骤2305;
步骤2314发送端将所述未发送队列中的数据块编号,构建成完整的发送队列节点,添加到发送队列,进入步骤2315;
步骤2315,发送端判断所述发送队列节点中的未发送队列中的数据的块编号是否在发送窗口的范围内,如果是,进入步骤2316,否则,进入步骤2317;
步骤2316,发送端将全部数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,生成协议数据单元等待发送,进入步骤2304;
步骤2317,发送端将处于发送窗口范围内部分数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,生成协议数据单元等待发送,进入步骤2305。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤200中,当所述发送端向所述接收端发送的数据类型为可分段可打包时,提取需要发送的数据的包括以下步骤:
步骤2401,发送端将待发送数据根据服务流参数进行分块,存储到未发送队列,记录新数据到达信息,初始化生成队列,,进入步骤2402;
步骤2402,发送端判断本服务流是否是第一次发送数据,如果是,进入步骤2403,否则,进入步骤2404;
步骤2403,发送端启动本服务流的发送端同步定时器,设置发送端同步超时处理事件,进入步骤2404;
步骤2404,发送端判断可发送的字节数是否大于0,如果是,进入步骤2406,否则,进入步骤2405;
步骤2405,操作结束;
步骤2406,发送端检查是否存在需要重传的发送队列节点,如果存在,进入步骤2407,否则,进入步骤2416,其中,已检测过的发送队列节点不再被检测;
步骤2407,发送端检查所述需要重传的发送队列节点中是否有数据,如果有,进入步骤2408,如果没有,进入步骤2406;
步骤2408,发送端检查所述需要重传的发送队列节点的第一时间队列节点是否在发送窗口的范围内,如果在,进入步骤2409,否则,进入步骤2412;
步骤2409,发送端检查本次发送的全部数据在生成协议数据单元后,是否超出可发送的最大协议数据单元长度,如果是,进入步骤2410,否则,进入步骤2411;
步骤2410发送端打包生成队列中的数据,进入步骤2411;
步骤2411,发送端将本时间队列节点从重传队列转移到等待反馈队列,记录发送信息,重启重传定时器,加入生成队列,进入步骤2404;
步骤2412,发送端判断带宽是否大于一个分块的长度,如果是,进入步骤2413,否则,进入步骤2426;
步骤2413,发送端检查本次发送的全部数据在生成协议数据单元后,是否超出可发送的最大协议数据单元长度,如果是,进入步骤2414,否则,进入步骤2415;
步骤2414,发送端打包生成队列中的数据,进入步骤2415;
步骤2415,发送端生成新的时间队列节点,加入到等待反馈队列,记录发送信息,取出原时间队列节点的生存期剩余时间,为新时间队列节点启动生存期定时器、重传定时器,设置重传超时处理事件、生存期超时处理事件,加入生成队列,进入步骤2426;
步骤2416,发送端检查未发送队列中是否有数据,如果有,进入步骤2417,否则,进入步骤2426;
步骤2417,发送端判断带宽是否大于一个分块的长度,如果是,进入步骤2418,否则,进入步骤2426;
步骤2418,发送端将所述未发送队列中的数据块编号,构建成完整的发送队列节点,添加到发送队列,进入步骤2419;
步骤2419,发送端判断所述发送队列节点中的未发送队列中的数据的块编号是否在发送窗口的范围内,如果是,进入步骤2420,否则,进入步骤2423;
步骤2420,发送端检查本次发送的全部数据在生成协议数据单元后,是否超出可发送的最大协议数据单元长度,如果是,进入步骤2421,否则,进入步骤2422;
步骤2421,发送端打包生成队列中现有的数据,进入步骤2422;
步骤2422,发送端将处于发送窗口范围内部分数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,加入生成队列,进入步骤2416;
步骤2423,发送端检查本次发送的全部数据在生成协议数据单元后,是否超出可发送的最大协议数据单元长度,如果是,进入步骤2424,否则,进入步骤2425;
步骤2424,发送端打包生成队列中现有的数据,进入步骤2425;
步骤2425,发送端将全部数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,加入生成队列,进入步骤2426;
步骤2426,发送端打包生成队列中的数据,用所述数据生成协议数据单元等待发送,操作结束。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤300中,所述接收端将接收到的数据及相关信息保存在所述接收信息模块中并上传至上层的过程包括以下步骤:
步骤3101,接收端接收到从所接收到的协议数据单元解析而来的服务数据单元中的分段,检查是否是第一次接收数据,如果是,进入步骤3102,否则,进入步骤3103;
步骤3102,接收端启动接收端同步定时器,设置接收端同步超时处理事件,进入步骤3103;
步骤3103,接收端检验所述分段中的的块编号是否在接收窗口以内,如果不在窗口范围内,进入步骤3104,如果在窗口范围内,进入步骤3105;
步骤3104,接收端删除所述分段,操作结束;
步骤3105,接收端检查所述分段中的最小块编号是否与接收窗口相吻合,即是否等于接收窗口中所定义可以接收的块编号中的最小块编号,如果吻合,进入步骤3106,否则,进入步骤3107;
步骤3106,接收端触发接收窗口跳动事件,跳动接收窗口到本分段的最大块编号加1的位置,重置同步定时器,进入步骤3108;
步骤3107,接收端保持接收窗口不动,根据接收重组算法来处理本分段,并为所述分段启动清除定时器,设置清除超时处理事件,进入步骤3108;
步骤3108,接收端当接收队列节点组合成完整的服务数据单元后,根据在所述通信网络建立服务流时定义的参数判断是否要求有序上传,如果是,进入步骤3109,否则,进入步骤3110;
步骤3109,按照块编号递增的顺序依次上传服务数据单元,操作结束;
步骤3110,立即上传,操作结束。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤3107中,根据接收重组算法来处理分段的过程包括以下步骤:
步骤01,接收端通过段标识对所接收的分段进行判断,若所述分段是初段,进入步骤02,若所述分段是中间分段,进入步骤08,若所述分段是末段,进入步骤16,若所述分段是完整的服务数据单元,进入步骤22;
步骤02,接收端判断所述分段的最大块编号是否与接收队列中的后一节点的最小块编号相邻,若相邻,进入步骤03,否则进入步骤06;
步骤03,更新所述后一节点的最小块编号为所述分段的最小块编号,并在所述后一节点的分段队列中加入所述分段,进入步骤04;
步骤04,接收端判断所述后一节点的段标识是否指示为是否为末段,若是末段,则进入步骤22,否则进入步骤05;
步骤05,接收端将所述后一节点的段标识设置为初段,操作结束;
步骤06,接收端判断所述分段的最大块编号是否大于接收队列中的前一节点的最大块编号且小于接收队列中后一节点的最小块编号减一,如果是,进入步骤07,否则丢弃所述分段,操作结束;
步骤07,接收端新建接收队列节点于所述分段的前一节点和后一节点之间,并将所述新建接收节点的段标识设为初段,操作结束;
步骤08,接收端判断所述分段是否同时满足其最小块编号与接收队列中的前一节点的最大块编号相邻且其最大块编号与接收队列中的后一节点的最小块编号相邻,如果是,进入步骤09,否则进入步骤11;
步骤09,接收端删除所述后一节点,更新所述前一节点的最大块编号为所述后一节点的最大块编号,并将所述分段和所述后一节点中的分段加入所述前一节点中的分段队列,进入步骤10;
步骤10,接收端判断是否同时所述前一节点的段标识指示为初段且所述后一节点的段标识指示为末段,如果是,进入步骤22,否则,操作结束;
步骤11,接收端判断所述分段是否同时满足其最小块编号与接收队列中的前一节点的最大块编号相邻但其最大块编号不与接收队列中的后一节点的最小块编号相邻,如果是,进入步骤12,否则进入步骤13;
步骤12,接收端更新所述前一节点的最大块编号为所述分段的最大块编号,并将所述分段加入所述前一节点的分段队列,操作结束;
步骤13,接收端判断所述分段是否同时满足其最小块编号不与接收队列中的前一节点的最大块编号相邻但其最大块编号与接收队列中的后一节点的最小块编号相邻,如果是,进入步骤14,否则进入步骤15;
步骤14,接收端更新所述后一节点的最小块编号为所述分段的最小块编号,并将所述分段加入所述后一节点的中的分段队列,操作结束;
步骤15,接收端新建接收队列节点于所述分段的前一节点和后一节点之间,并将所述新建接收节点的段标识设为中间段,操作结束;
步骤16,接收端判断所述分段的最小块编号是否与接收队列中的前一节点的最大块编号相邻,若相邻,进入步骤17,否则进入步骤20;
步骤17,接收端更新所述前一节点的最大块编号为所述分段的最大块编号,并在所述前一节点的分段队列中加入所述分段,进入步骤18;
步骤18,接收端判断所述前一节点的段标识是否指示为初段,若是初段,则进入步骤22,否则进入步骤19;
步骤19,接收端将所述前一节点的段标识设置为末段,操作结束;
步骤20,接收端判断所述分段的最小块编号是否大于接收队列中的前一节点的最大块编号加一且小于接收队列中后一节点的最小块编号,如果是,进入步骤21,否则丢弃所述分段,操作结束;
步骤21,接收端新建接收队列节点于所述分段的前一节点和后一节点之间,并将所述新建接收节点的段标识设为末段,操作结束;
步骤22,若从步骤01进入步骤22,则将所述分段队列中的数据重组为完整的服务数据单元传递给上层,若从步骤04、步骤10和步骤18进入步骤22,则将分段队列中的分段重组成服务数据单元传递给上层,并释放分段、分段队列节点和接收队列节点。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤300中,所述接收端维护反馈队列的过程包括以下步骤:
步骤3201,接收端第一次接收数据时,检验所述数据的最小块编号是否与接收窗口吻合,如果吻合,进入步骤3202,否则,进入步骤3203;
步骤3202,接收端建立第一反馈节点,进入步骤3204;
步骤3203,接收端建立一个辅助反馈节点,进入步骤3204;
步骤3204,接收端通过已接收到的数据的块编号判断后续数据是否按序到达,如果是,进入步骤3205,否则,进入步骤3206;
步骤3205,接收端更新第一反馈节点的最大块编号为所述数据中的最大块编号,进入步骤3207;
步骤3206,接收端新建或者更新辅助反馈节点记录接收信息,进入步骤3207;
步骤3207,接收端判断是否有接收窗口跳动处理事件触发,如果有,进入步骤3208,否则,进入步骤3209;
步骤3208,接收端删除接收窗口前的所有辅助反馈节点,进入步骤3209;
步骤3209,接收端判断是否有发送端或者接收端同步超时处理事件触发,如果有,进入步骤3210,否则,进入步骤3204;
步骤3210,接收端清空反馈队列,进入步骤3211;
步骤3211,接收端判断是否有新数据到达,如果有,进入步骤3201,否则,进入步骤3212;
步骤3212,操作结束。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤300中,所述接收端对所述发送端进行反馈采用定时累积反馈的方法。
较佳的,在所述通信网络的自动重传机制实现方法中,所述接收端采取定时累积反馈的方法对所述发送端进行反馈的过程包括以下步骤:
步骤3301,接收端同属于一个终端的所有服务流最初一次接收到数据时设置这个终端的周期反馈处理事件,周期反馈处理事件触发后,进入步骤3302;
步骤3302,接收端读取第一个反馈队列的接收信息,进入步骤3303;
步骤3303,接收端判断第一反馈节点的最大块编号与本服务流最近一次反馈的块编号是否相同,如果相同,进入步骤3304,如果不同,进入步骤3306;
步骤3304,接收端判断是否有剩余的反馈节点,如果有,进入步骤3305,否则,进入步骤3307;
步骤3305,接收端读取下一个反馈节点,进入步骤3303;
步骤3306,接收端为本服务流生成反馈信息单元,进入步骤3304;
步骤3307,接收端判断是否有新反馈信息单元生成,如果有,进入步骤3308,否则,进入步骤3309;
步骤3308,接收端将所有反馈信息单元组合成反馈消息发送给发送端,用来反馈接收端的数据接收情况,进入步骤3309;
步骤3309、等待下一次周期反馈处理事件触发。
较佳的,在所述通信网络的自动重传机制实现方法中,在步骤400中,所述发送端根据所接收到的反馈信息对所述发送信息模块进行调整的过程包括以下步骤:
步骤401,发送端接收反馈消息后,取出所述反馈消息中的第一个未被读取过的反馈信息单元,找到对应的服务流,进入步骤402;
步骤402,发送端检验反馈信息单元中的反馈块编号是否有效,即是否在发送窗口范围内,如果有效,进入步骤403,否则进入步骤404;
步骤403,发送端从未收到反馈的最早发过的数据开始依次删除发送队列节点信息,直到超出反馈范围,进入步骤405;
步骤404,发送端删除所述信息单元,操作结束;
步骤405,发送端根据发送队列节点信息或者反馈块编号更新发送窗口,进入步骤406;
步骤406,发送端判断所述反馈信息单元是否是最后一个反馈信息单元,如果是,进入步骤407,否则进入步骤401;
步骤407,操作结束。
本发明的有益效果是:采取本发明中的通信网络及其自动重传机制实现方法,可以有效的实现在通讯网络中的数据发送、接收以及自动重传。同时,由于本发明中采取了发送队列、接收队列的形式对数据发送、接收以及自动重传,因此还可以使所述通信网络在数据交换的过程中拥有更高的效率。
附图说明
图1为本发明的通信网络及其自动重传机制实现方法中发送队列与接收队列的数据组织结构图;
图2为当数据在不可分段不可打包的情况下进行发送时的流程图;
图3为当数据在不可分段可打包的情况下进行发送时的流程图;
图4为当数据在可分段不可打包的情况下进行发送时的流程图;
图5为当数据在可分段可打包的情况下进行发送时的流程图;
图6为本发明的通信网络的自动重传机制实现方法中,接收端接收数据的流程图;
图7为本发明的通信网络的自动重传机制实现方法中数据的接收重组算法的流程图;
图8为本发明的通信网络的自动重传机制实现方法中接收端维护反馈队列的流程图;
图9为本发明的通信网络的自动重传机制实现方法中定时累积反馈方法的流程图;
图10为本发明的通信网络的自动重传机制实现方法中发送端根据所接收到的反馈信息对所述发送信息模块进行调整的流程图;
图11为本发明的通信网络的框架图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种通信网络及其自动重传机制实现方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的通信网络的自动重传机制实现方法,首先需要针对每条服务流在发送端建立一个发送队列,在接收端建立一个接收队列,分别用来保存本服务流上的数据发送、接收情况,从而使所述通信网络可以通过所述发送队列与所述接收队列实现自动重传。在发送数据时,对所述数据进行分块,进行分块后,当某些分块未成功发送时,只需要重新发送这些分块,而不需要重新发送全部数据,因此可以提高发送数据的成功几率和效率。
请参照图1,此为本发明的通信网络及其自动重传机制实现方法中发送队列与接收队列的数据组织结构图。
所述发送队列的发送队列头包含:所述服务流中需要发送的数据的总字节数(总字节数),发送窗口(用以定义可以发送的块编号的范围,以增大发送成功的几率和发送效率),待发送块编号BSN(Block Sequence Number),待重传数据,最后一个分块的块编号BSN(最大块编号),处于等待反馈状态的分块个数(等待反馈块数),发送标识(标识此时发送队列是否可以进行数据发送,当进行如重置等操作时,在其过程中不能发送数据),重传间隔时间(在所述通信网络建立服务流时定义的参数),同步定时器、重置定时器,丢弃定时器,重置次数以及其他补充信息。所述发送队列的发送队列节点是待发送的一个完整的服务数据单元SDU(Service Data Unit)或服务数据单元的一部分,包含:四个状态队列,即未发送队列(存储已经分块并编号,但未发送的数据)、等待反馈队列、重传队列和丢弃队列(存储超过生存期定时器定时的数据),本服务数据单元SDU的长度(数据长度),最后个分块的长度(最后分块长度),最大块编号BSN,最小块编号BSN,本服务数据单元SDU的首地址(数据首地址)以及补充信息;其中,未发送队列和丢弃队列使用块队列结构:块队列头包含本队列中的分块状态和全部分块的总长度,块队列节点对应于一个分块,包含本分块的块首地址和块编号BSN;等待反馈队列和重传队列使用时间队列结构:时间队列头包含本队列中的分块的状态,时间队列节点包含重传定时器,生存期定时器以及使用相同重传定时器和生存期定时器的一组分块。
所述接收队列的接收队列头包含:接收窗口(用以定义可以接收的块编号的范围,以增大发送成功的几率和发送效率),接收到的最后一个分块的块编号BSN(最大块编号),接收标识(标识此时接收队列是否可以进行数据接收),同步定时器、重置定时器,重置次数、反馈队列(反馈池)和补充信息。所述接收队列的接收队列节点是从发送端接收到的一个完整的服务数据单元SDU或服务数据单元的一部分,包含:本服务数据单元SDU的最大块编号BSN(最大块编号),最小块编号BSN,最后一个分块的长度(最后分块长度),段状态标识(即段标识,用于标识所述分段是初段,中间段或末段等)和分段队列;其中,分段队列头保存分段的总长度,分段队列节点对应所述服务数据单元SDU的一个分段,包含:分段长度,分段首地址和分段的最小块编号BSN;反馈队列(反馈池)用来存储接收到的数据信息,反馈队列头中有最近一次反馈的块编号BSN,反馈队列节点中包含本节点所包含数据的最大块编号BSN,最小块编号BSN和清除定时器队列;清除定时器队列节点中包含清除定时器和开启所述清除定时器的连续块序列的最大块编号BSN。
在发送端和接收端分别建立发送队列和接收队列之后,发送端将待发送数据分块、编号,存储到未发送队列,记录新数据到达信息(服务流的相关参数等信息)。当有带宽可用时,发送端检查是否是服务流第一次发送数据,若是,启动本服务流的发送端同步定时器,设置发送端同步超时处理事件;若不是,直接根据可用带宽计算可以发送的字节数,按照重传数据优先的原则发送数据。发送过程中,如果存在重传数据,将数据从重传队列转移到等待反馈队列,重启重传定时器,记录发送信息;否则查看未发送队列中是否有数据,若有数据且其编号在可发送范围内,则将其转移到发送队列,将数据从未发送队列转移到等待反馈队列,启动重传定时器、生存期定时器,设置重传超时处理事件、生成期超时处理事件,记录发送信息。其中,根据服务流参数和带宽情况的不同,所述数据拥有四种不同的状态,即不可分段不可打包,不可分段可打包,可分段不可打包以及可分段可打包。针对所述数据的四种不同状态,分别采取不同的处理方式。
请参照图2,此为当数据在不可分段不可打包的情况下进行发送时的流程图。当所述数据不可分段不可打包时,发送端发送所述数据的过程包括以下步骤:
步骤S201,发送端将待发送数据根据服务流参数进行分块,存储到未发送队列,记录所述数据的到达信息,进入步骤S202;
步骤S202,发送端判断所述服务流是否是第一次发送数据,如果是,进入步骤S203,否则,进入步骤S204;
步骤S203,发送端启动本服务流的发送端同步定时器,设置发送端同步超时处理事件,进入步骤S204;
步骤S204,发送端判断可发送的字节数是否大于0,如果是,进入步骤S206,否则,进入步骤S205;
步骤S205,操作结束;
步骤S206,发送端检查是否存在需要重传的发送队列节点,如果存在,进入步骤S207,否则,进入步骤S210,其中,已检测过的发送队列节点不再被检测;
步骤S207,发送端检查所述需要重传的发送队列节点中是否有数据,如果有,进入步骤S208,如果没有,进入步骤S206;
步骤S208,发送端检查所述需要重传的发送队列节点是否在发送窗口的范围内,如果在,进入步骤S209;否则,进入步骤S205;
步骤S209,发送端将所述需要重传的发送队列节点中的数据从重传队列转移到等待反馈队列,记录发送信息,重启重传定时器,用所述数据生成协议数据单元PDU等待发送,进入步骤S204,其中,在发送端中,设置有一发送模块,用于将等待发送的协议数据单元PDU保存并发送至接收端;
步骤S210,发送端检查未发送队列中是否有数据,如果有,进入步骤S211,否则,进入步骤S205;
步骤S211,发送端检查所述未发送队列中的单个数据在生成协议数据单元PDU后,是否会超出最大协议数据单元PDU的长度,如果是,进入步骤S212,否则,进入步骤S213;
步骤S212,发送端删除所述未发送队列中的数据,进入步骤S210;
步骤S213,发送端判断所述未发送队列中的数据块编号后是否在发送窗口的范围内,如果在,进入步骤S214,否则,进入步骤S205;
步骤S214,发送端将所述未发送队列中的数据块编号,构建成完整的发送队列节点,添加到发送队列,进入步骤S215;
步骤S215、发送端将所述添加到发送队列中的所述发送队列节点中的数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,生成协议数据单元PDU等待发送,进入步骤S204。
请参照图3,此为当数据在不可分段可打包的情况下进行发送时的流程图。当所述数据不可分段可打包时,发送端发送所述数据的过程包括以下步骤:
步骤S301,发送端将待发送数据根据服务流参数进行分块,存储到未发送队列,记录所述数据的到达信息,初始化生成队列(所述生成队列用于存放可以进行打包的数据),进入步骤S302;
步骤S302,发送端判断本服务流是否是第一次发送数据,如果是,进入步骤S303,否则,进入步骤S304;
步骤S303,发送端启动本服务流的发送端同步定时器,设置发送端同步超时处理事件,进入步骤S304;
步骤S304,发送端判断可发送的字节数是否大于0,如果是,进入步骤S306,否则,进入步骤S305;
步骤S305,操作结束;
步骤S306,发送端检查是否存在需要重传的发送队列节点,如果存在,进入步骤S307,否则,进入步骤S312,其中,已检测过的发送队列节点不再被检测;
步骤S307,发送端检查所述需要重传的发送队列节点中是否有数据,如果有,进入步骤S308,如果没有,进入步骤S306;
步骤S308,发送端检查所述需要重传的发送队列节点是否在发送窗口的范围内,如果在,进入步骤S309,否则,进入步骤S320;
步骤S309,发送端检查本次发送的数据在生成协议数据单元PDU后,是否超出可发送的最大协议数据单元PDU长度,如果是,进入步骤S310,否则,进入步骤S311;
步骤S310,发送端打包生成队列中的数据,进入步骤S311;
步骤S311,发送端将可用于打包的数据从重传队列转移到等待反馈队列,记录发送信息,重启重传定时器,加入生成队列,进入步骤S304;
步骤S312,发送端检查未发送队列中是否有数据,如果有,进入步骤S313;否则,进入步骤S320;
步骤S313,发送端检查所述未发送队列中的单个数据在生成协议数据单元PDU后,是否会超出最大协议数据单元PDU的长度,如果是,进入步骤S314,否则,进入步骤S315;
步骤S314,发送端删除所述数据,进入步骤S312;
步骤S315,发送端判断所述未发送队列中的数据块编号后是否在发送窗口的范围内,如果是,进入步骤S316,否则,进入步骤S320;
步骤S316,发送端将所述未发送队列中的数据块编号,构建成完整的发送队列节点,添加到发送队列,进入步骤S317;
步骤S317,发送端检查本次发送的全部数据在生成协议数据单元PDU后,是否超出可发送的最大协议数据单元PDU长度,如果是,进入步骤S318,否则,进入步骤S319;
步骤S318,发送端打包生成队列中的数据,进入步骤S319;
步骤S319,发送端将可用于打包的数据从未发送队列转移到等待反馈队列,记录发送信息,同时启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,加入生成队列,进入步骤S304;
步骤S320,发送端打包生成队列中的数据,用所述数据生成协议数据单元PDU等待发送,操作结束。
请参照图4,此为当数据在可分段不可打包的情况下进行发送时的流程图。当所述数据可分段不可打包时,发送端发送所述数据的过程包括以下步骤:
步骤S401,发送端将待发送数据根据服务流参数进行分块,存储到未发送队列,记录所述数据的到达信息,进入步骤S402;
步骤S402,发送端判断本服务流是否是第一次发送数据,如果是,进入步骤S403,否则,进入步骤S404;
步骤S403,发送端启动本服务流的发送端同步定时器,设置发送端同步超时处理事件,进入步骤S404;
步骤S404,发送端判断可发送的字节数是否大于0,如果是,进入步骤S406,否则,进入步骤S405;
步骤S405,操作结束;
步骤S406,发送端检查是否存在需要重传的发送队列节点,如果存在,进入步骤S407,否则,进入步骤S412,其中,已检测过的发送队列节点不再被检测;
步骤S407,发送端检查所述需要重传的发送队列节点中是否有数据,如果有,进入步骤S408,如果没有,进入步骤S406;
步骤S408,发送端检查所述需要重传的发送队列节点的第一时间队列节点是否在发送窗口的范围内,如果在,进入步骤S409,否则,进入步骤S410;
步骤S409,发送端将重传队列中的数据转移到等待反馈队列,记录发送信息,重启重传定时器,生成协议数据单元PDU等待发送,进入步骤S404;
步骤S410,发送端判断带宽是否大于一个分块的长度,如果是,进入步骤S411,否则,进入步骤S405,本发明中的分块是指将服务数据单元SDU分成的块,是不能再分的,而本发明中的分段是指若干个服务数据单元SDU分块,分段的长度是可变的,可以只有一个分块,也可以包括多个分块;
步骤S411,发送端生成新的时间队列节点,加入到等待反馈队列,记录发送信息,取出原时间队列节点的生存期剩余时间,为新时间队列节点启动生存期定时器、重传定时器,设置重传超时处理事件、生存期超时处理事件,生成协议数据单元PDU等待发送,进入步骤S405;
步骤S412,发送端检查未发送队列中是否有数据,如果有,进入步骤S413,否则,进入步骤S405;
步骤S413,发送端判断带宽是否大于一个分块的长度,如果是,进入步骤S414,否则,进入步骤S405;
步骤S414发送端将所述未发送队列中的数据块编号,构建成完整的发送队列节点,添加到发送队列,进入步骤S415;
步骤S415,发送端判断所述发送队列节点中的未发送队列中的数据的块编号是否在发送窗口的范围内,如果是,进入步骤S416,否则,进入步骤S417;
步骤S416,发送端将全部数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,生成协议数据单元PDU等待发送,进入步骤S404;
步骤S417,发送端将处于发送窗口范围内部分数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,生成协议数据单元PDU等待发送,进入步骤S405。
请参照图5,此为当数据在可分段可打包的情况下进行发送时的流程图。当所述数据可分段可打包时,发送端发送所述数据的过程包括以下步骤:
步骤S501,发送端将待发送数据根据服务流参数进行分块,存储到未发送队列,记录新数据到达信息,初始化生成队列,进入步骤S502;
步骤S502,发送端判断本服务流是否是第一次发送数据,如果是,进入步骤S503,否则,进入步骤S504;
步骤S503,发送端启动本服务流的发送端同步定时器,设置发送端同步超时处理事件,进入步骤S504;
步骤S504,发送端判断可发送的字节数是否大于0,如果是,进入步骤S506,否则,进入步骤S505;
步骤S505,操作结束;
步骤S506,发送端检查是否存在需要重传的发送队列节点,如果存在,进入步骤S507,否则,进入步骤S516,其中,已检测过的发送队列节点不再被检测;
步骤S507,发送端检查所述需要重传的发送队列节点中是否有数据,如果有,进入步骤S508,如果没有,进入步骤S506;
步骤S508,发送端检查所述需要重传的发送队列节点的第一时间队列节点是否在发送窗口的范围内,如果在,进入步骤S509,否则,进入步骤S512;
步骤S509,发送端检查本次发送的全部数据在生成协议数据单元PDU后,是否超出可发送的最大协议数据单元PDU长度,如果是,进入步骤S510,否则,进入步骤S511;
步骤S510发送端打包生成队列中的数据,进入步骤S511;
步骤S511,发送端将本时间队列节点从重传队列转移到等待反馈队列,记录发送信息,重启重传定时器,加入生成队列,进入步骤S504;
步骤S512,发送端判断带宽是否大于一个分块的长度,如果是,进入步骤S513,否则,进入步骤S526;
步骤S513,发送端检查本次发送的全部数据在生成协议数据单元PDU后,是否超出可发送的最大协议数据单元PDU长度,如果是,进入步骤S514,否则,进入步骤S515;
步骤S514,发送端打包生成队列中的数据,进入步骤S515;
步骤S515,发送端生成新的时间队列节点,加入到等待反馈队列,记录发送信息,取出原时间队列节点的生存期剩余时间,为新时间队列节点启动生存期定时器、重传定时器,设置重传超时处理事件、生存期超时处理事件,加入生成队列,进入步骤S526;
步骤S516,发送端检查未发送队列中是否有数据,如果有,进入步骤S517,否则,进入步骤S526;
步骤S517,发送端判断带宽是否大于一个分块的长度,如果是,进入步骤S518,否则,进入步骤S526;
步骤S518,发送端将所述未发送队列中的数据块编号,构建成完整的发送队列节点,添加到发送队列,进入步骤S519;
步骤S519,发送端判断所述发送队列节点中的未发送队列中的数据的块编号是否在发送窗口的范围内,如果是,进入步骤S520,否则,进入步骤S523;
步骤S520,发送端检查本次发送的全部数据在生成协议数据单元PDU后,是否超出可发送的最大协议数据单元PDU长度,如果是,进入步骤S521,否则,进入步骤S522;
步骤S521,发送端打包生成队列中现有的数据,进入步骤S522;
步骤S522,发送端将处于发送窗口范围内部分数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,加入生成队列,进入步骤S516;
步骤S523,发送端检查本次发送的全部数据在生成协议数据单元PDU后,是否超出可发送的最大协议数据单元PDU长度,如果是,进入步骤S524,否则,进入步骤S525;
步骤S524,发送端打包生成队列中现有的数据,进入步骤S525;
步骤S525,发送端将全部数据从未发送队列转移到等待反馈队列,记录发送信息,启动重传定时器、生存期定时器,设置重传超时处理事件、生存期超时处理事件,加入生成队列,进入步骤S526。
步骤S526,发送端打包生成队列中的数据,用所述数据生成协议数据单元PDU等待发送,操作结束。
在接收端中,设置有一接收模块,用于将接收发送端发送来的协议数据单元PDU,并解析还原成服务数据元SDU。接收端接收到发送端发送来的数据分段(所述分段中包括一个或更多的数据块)后,检查是否是服务流第一次接收数据,若是,启动本服务流接收端同步定时器,设置接收端同步超时处理事件;若不是,直接检验所述分段中的块编号BSN是否在接收窗口范围内,如果不在窗口范围内,删除该分段,结束;如果在窗口范围内,检查本分段的最小块编号BSN是否与接收窗口值相吻合,如果吻合,触发接收窗口跳动处理事件,跳动接收窗口到本分段的最大块编号BSN加1的位置,重置同步定时器;如果不吻合,接收窗口不动,根据接收重组算法来处理本分段,并为分段启动清除定时器,设置清除超时处理事件。当接收队列节点组合成完整的服务数据单元SDU后,判断是否要求有序上传,如果是,按照块编号BSN递增的顺序依次上传;否则,立即上传。
请参照图6,此为本发明的通信网络的自动重传机制实现方法中,接收端接收数据的流程图。本发明的通信网络的自动重传机制实现方法中接收端接收数据的过程包括以下步骤:
步骤S601,接收端接收到从所接收到的协议数据单元PDU解析而来的服务数据单元SDU中的分段,检查是否是第一次接收数据,如果是,进入步骤S602,否则,进入步骤S603;
步骤S602,接收端启动接收端同步定时器,设置接收端同步超时处理事件,进入步骤S603;
步骤S603,接收端检验所述分段中的的块编号BSN是否在接收窗口以内,如果不在窗口范围内,进入步骤S604,如果在窗口范围内,进入步骤S605;
步骤S604,接收端删除所述分段,操作结束;
步骤S605,接收端检查所述分段中的最小块编号BSN是否与接收窗口相吻合,即是否等于接收窗口中所定义可以接收的块编号BSN中的最小块编号BSN,如果吻合,进入步骤S606,否则,进入步骤S607;
步骤S606,接收端触发接收窗口跳动事件,跳动接收窗口到本分段的最大块编号BSN加1的位置,重置同步定时器,进入步骤S608;
步骤S607,接收端保持接收窗口不动,根据接收重组算法来处理本分段,并为所述分段启动清除定时器,设置清除超时处理事件,进入步骤S608;
步骤S608,接收端当接收队列节点组合成完整的服务数据单元SDU后,根据在所述通信网络建立服务流时定义的参数判断是否要求有序上传,如果是,进入步骤S609,否则,进入步骤S610;
步骤S609,按照块编号BSN递增的顺序依次上传服务数据单元SDU,操作结束;
步骤S610,立即上传,操作结束。
请参照图7,此为本发明的通信网络的自动重传机制实现方法中,数据的接收重组算法的流程图。在前述的步骤S607中,接收端根据接收重组算法来处理分段。本发明的通信网络的自动重传机制实现方法中,数据的接收重组算法的过程包括以下步骤:
步骤S701,接收端通过段标识对所接收的分段进行判断,若所述分段是初段,进入步骤S702,若所述分段是中间分段,进入步骤S708,若所述分段是末段,进入步骤S716,若所述分段是完整的服务数据单元SDU(以分块的形式保存,可重组为完整的服务数据单元SDU),进入步骤S722;
步骤S702,接收端判断所述分段的最大块编号是否与接收队列中的后一节点的最小块编号相邻,若相邻,进入步骤S703,否则进入步骤S706;
步骤S703,更新所述后一节点的最小块编号为所述分段的最小块编号,并在所述后一节点的分段队列中加入所述分段,进入步骤S704;
步骤S704,接收端判断所述后一节点的段标识是否指示为是否为末段,若是末段,则进入步骤S722,否则进入步骤S705;
步骤S705,接收端将所述后一节点的段标识设置为初段,操作结束;
步骤S706,接收端判断所述分段的最大块编号BSN是否大于接收队列中的前一节点的最大块编号BSN且小于接收队列中后一节点的最小块编号BSN减一,如果是,进入步骤S707,否则丢弃所述分段,操作结束;
步骤S707,接收端新建接收队列节点于所述分段的前一节点和后一节点之间,并将所述新建接收节点的段标识设为初段,操作结束;
步骤S708,接收端判断所述分段是否同时满足其最小块编号BSN与接收队列中的前一节点的最大块编号BSN相邻且其最大块编号BSN与接收队列中的后一节点的最小块编号BSN相邻,如果是,进入步骤S709,否则进入步骤S711;
步骤S709,接收端删除所述后一节点,更新所述前一节点的最大块编号BSN为所述后一节点的最大块编号BSN,并将所述分段和所述后一节点中的分段加入所述前一节点中的分段队列,进入步骤S710;
步骤S710,接收端判断是否同时所述前一节点的段标识指示为初段且所述后一节点的段标识指示为末段,如果是,进入步骤S722,否则,操作结束;
步骤S711,接收端判断所述分段是否同时满足其最小块编号BSN与接收队列中的前一节点的最大块编号BSN相邻但其最大块编号BSN不与接收队列中的后一节点的最小块编号BSN相邻,如果是,进入步骤S712,否则进入步骤S713;
步骤S712,接收端更新所述前一节点的最大块编号为所述分段的最大块编号,并将所述分段加入所述前一节点的分段队列,操作结束;
步骤S713,接收端判断所述分段是否同时满足其最小块编号BSN不与接收队列中的前一节点的最大块编号BSN相邻但其最大块编号BSN与接收队列中的后一节点的最小块编号BSN相邻,如果是,进入步骤S714,否则进入步骤S715;
步骤S714,接收端更新所述后一节点的最小块编号为所述分段的最小块编号,并将所述分段加入所述后一节点的中的分段队列,操作结束;
步骤S715,接收端新建接收队列节点于所述分段的前一节点和后一节点之间,并将所述新建接收节点的段标识设为中间段,操作结束;
步骤S716,接收端判断所述分段的最小块编号是否与接收队列中的前一节点的最大块编号相邻,若相邻,进入步骤S717,否则进入步骤S720;
步骤S717,接收端更新所述前一节点的最大块编号为所述分段的最大块编号,并在所述前一节点的分段队列中加入所述分段,进入步骤S718;
步骤S718,接收端判断所述前一节点的段标识是否指示为初段,若是初段,则进入步骤S722,否则进入步骤S719;
步骤S719,接收端将所述前一节点的段标识设置为末段,操作结束;
步骤S720,接收端判断所述分段的最小块编号BSN是否大于接收队列中的前一节点的最大块编号BSN加一且小于接收队列中后一节点的最小块编号BSN,如果是,进入步骤S721,否则丢弃所述分段,操作结束;
步骤S721,接收端新建接收队列节点于所述分段的前一节点和后一节点之间,并将所述新建接收节点的段标识设为末段,操作结束;
步骤S722,若从步骤S701进入步骤S722,则将所述分段队列中的数据重组为完整的服务数据单元SDU传递给上层,若从步骤S704、步骤S710和步骤S718进入步骤S722,则将分段队列中的分段重组成服务数据单元SDU传递给上层,并释放分段、分段队列节点和接收队列节点。
在本发明中,接收端对于接收信息的反馈采用定时累积反馈的方法,接收端只在间隔内有顺序新数据到达的情况下发送反馈消息。其中,所述间隔为在所述通信网络建立服务流时定义的参数。
接收端针对每条服务流维护一个反馈池(反馈队列),由反馈节点记录的信息显示是否有顺序新数据到达。接收端第一次接收到数据后开始建立反馈节点,如果所述数据的最小块编号BSN刚好与接收窗口吻合(最小块编号BSN与接收窗口中定义的可以接收的块编号BSN中的最小块编号BSN一致),这个反馈节点称作第一反馈节点,否则称作辅助反馈节点。如果后续数据是按序到达,则更新第一反馈节点的最大块编号BSN,否则新建或者更新辅助反馈节点记录接收信息。接收窗口跳动处理事件触发时,跳动接收窗口并删除窗口前所有辅助反馈节点。发送端或者接收端同步超时处理事件触发时,重置发送端和接收端,清空反馈池,再接收数据时重新建立反馈节点。反馈池维护流程详见附图8。
请参照图8,此为本发明的通信网络的自动重传机制实现方法中,接收端维护反馈队列的流程图。本发明的通信网络的自动重传机制实现方法中接收端维护反馈队列的过程包括以下步骤:
步骤S801,接收端第一次接收数据时,检验所述数据的最小块编号BSN是否与接收窗口吻合,如果吻合,进入步骤S802,否则,进入步骤S803;
步骤S802,接收端建立第一反馈节点,进入步骤S804;
步骤S803,接收端建立一个辅助反馈节点,进入步骤S804;
步骤S804,接收端通过已接收到的数据的块编号BSN判断后续数据是否按序到达,如果是,进入步骤S805,否则,进入步骤S806;
步骤S805,接收端更新第一反馈节点的最大块编号BSN为所述数据中的最大块编号,进入步骤S807;
步骤S806,接收端新建或者更新辅助反馈节点记录接收信息,进入步骤S807;
步骤S807,接收端判断是否有接收窗口跳动处理事件触发,如果有,进入步骤S808,否则,进入步骤S809;
步骤S808,接收端删除接收窗口前(即所有块编号小于接收窗口中定义的可以接收的块编号BSN)的所有辅助反馈节点,进入步骤S809;
步骤S809,接收端判断是否有发送端或者接收端同步超时处理事件触发,如果有,进入步骤S810,否则,进入步骤S804;
步骤S810,接收端清空反馈队列,进入步骤S811;
步骤S811,接收端判断是否有新数据到达,如果有,进入步骤S801,否则,进入步骤S812;
步骤S812,操作结束。
本发明中,定时累积反馈方法具体实施步骤为:接收端同属于一个终端的所有服务流最初一次接收到数据时设置这个终端的周期反馈处理事件,每次事件触发后读取各个反馈池的接收信息,发现第一反馈节点的最大块编号BSN与本服务流最近一次反馈的块编号BSN不同时,为本服务流生成反馈信息单元(所述反馈信息单元在所述接收端中生成,用于记录反馈的信息),轮询完所有的反馈队列后,如果有新生成的反馈信息单元,则将所有新生成的反馈信息单元组合成反馈消息发送给发送端,用来反馈接收端的数据接收情况。定时累积反馈方法流程见附图9。
请参照图9,此为本发明的通信网络的自动重传机制实现方法中定时累积反馈方法的流程图。本发明的通信网络的自动重传机制实现方法中定时累积反馈方法的过程包括以下步骤:
步骤S901,接收端同属于一个终端的所有服务流最初一次接收到数据时设置这个终端的周期反馈处理事件,周期反馈处理事件触发后,进入步骤S902;
步骤S902,接收端读取第一个反馈队列的接收信息,进入步骤S903;
步骤S903,接收端判断第一反馈节点的最大块编号BSN与本服务流最近一次反馈的块编号BSN是否相同,如果相同,进入步骤S904,如果不同,进入步骤S906;
步骤S904,接收端判断是否有剩余的反馈节点,如果有,进入步骤S905,否则,进入步骤S907;
步骤S905,接收端读取下一个反馈节点,进入步骤S903;
步骤S906,接收端为本服务流生成反馈信息单元,进入步骤S904;
步骤S907,接收端判断是否有新反馈信息单元生成,如果有,进入步骤S908,否则,进入步骤S909;
步骤S908,接收端将所有反馈信息单元组合成反馈消息发送给发送端,用来反馈接收端的数据接收情况,进入步骤S909;
步骤S909、等待下一次周期反馈处理事件触发。
发送端接收反馈消息后,从中取出第一个反馈信息单元,找到对应的服务流,检验反馈块编号BSN是否有效,即是否在发送窗口范围内,如果无效,删除本信息单元;否则从未收到反馈的最早发过的数据开始依次删除发送队列节点信息(这是由于收到反馈消息标明之前的数据已经被成功接收,从而可以删除),直到超出反馈范围为止。同时,根据发送队列节点信息或者反馈块编号BSN更新发送窗口(将发送成功的数据的块编号BSN从发送窗口中删除)。若此信息单元不是最后一个,继续取下一个信息单元,重复上面的处理。
请参照图10,此为本发明的通信网络的自动重传机制实现方法中发送端根据所接收到的反馈信息对所述发送信息模块进行调整的流程图,本发明的通信网络的自动重传机制实现方法中发送端根据所接收到的反馈信息对所述发送信息模块进行调整的过程包括以下步骤:
步骤S1001,发送端接收反馈消息后,取出所述反馈消息中的第一个未被读取过的反馈信息单元,找到对应的服务流,进入步骤S1002;
步骤S1002,发送端检验反馈信息单元中的反馈块编号是否有效,即是否在发送窗口范围内,如果有效,进入步骤S1003,否则进入步骤S1004;
步骤S1003,发送端从未收到反馈的最早发过的数据开始依次删除发送队列节点信息,直到超出反馈范围,进入步骤S1005;
步骤S1004,发送端删除所述信息单元,操作结束;
步骤S1005,发送端根据发送队列节点信息或者反馈块编号更新发送窗口,进入步骤S1006;
步骤S1006,发送端判断所述反馈信息单元是否是最后一个反馈信息单元,如果是,进入步骤S1007,否则进入步骤S1001,
步骤S1007,操作结束。
本发明中的重传超时处理事件,生存期超时处理事件,同步超时处理事件,清除超时处理事件描述如下:
重传超时处理事件是在重传定时器超时后触发,将数据从等待反馈队列转移到重传队列;
生存期超时处理事件是在生存期定时器超时后触发,删除对应的重传定时器,移动数据从重传队列或者等待反馈队列到丢弃队列,更新本服务流的丢弃块编号BSN,如果丢弃定时器未启动,则启动丢弃定时器,设置丢弃超时处理事件;
丢弃超时处理事件是在丢弃定时器超时后触发,读取最新的丢弃的块编号BSN来生成丢弃消息并发送出去;
同步超时处理事件在窗口超出一定时间仍不跳动时引起同步定时器超时后触发,向对端发送重置消息以重置发送端和接收端,并启动重置定时器,设置重置超时处理事件;
重置超时处理事件在重置定时器超时后触发,重新发送重置消息,直到发送次数超过最大允许的发送次数为止;
如果出现两端近乎同时发出重置消息的情况,即某一端刚发出重置请求,没有收到重置反馈,而重置超时处理事件没有触发的情况下收到对端重置请求,会根据发送端的重置请求拥有高优先级的原则来处理;
清除超时处理事件在清除定时器超时后触发,触发接收窗口跳动处理事件,跳动接收窗口。
本发明中只描述了累积反馈的情况,但并不作为对本发明的限定,可以根据情况需要采取选择反馈或者累积加选择的反馈方式。
请参照图11,此为本发明中的通信网络的框架图。本发明中的通信网络10中,包括发送端11和接收端12,所述发送端11和接收端12用于根据在它们之间建立的服务流进行数据的传递和接收。
所述发送端11中,包括一发送信息模块111以及一发送模块112。所述发送信息模块111用于保存与发送数据相关的信息、参数和数据,以配合所述发送端11实现对数据的发送、重发以及对发送参数的调整。所述发送模块112,用于保存和发送经过所述发送端11处理的,需要发送到所述接收端12中的数据。
所述接收端12中,包括一接收信息模块121以及一接收模块122。所述接收信息模块121用于保存与接收数据相关的信息、参数和数据,以配合所述接收端12实现对数据的接收、反馈以及对接收参数的调整。所述接收模块122,用于接收由所述发送端11的发送模块112发送而来的,经过所述发送端11处理的数据。
在所述发送信息模块111中,采取发送队列的形式对所述与发送数据相关的信息、参数和数据进行保存。其中,所述发送队列的发送队列头包含:所述服务流中需要发送的数据的总字节数(总字节数),发送窗口(用以定义可以发送的块编号的范围,以增大发送成功的几率和发送效率),待发送块编号BSN(Block Sequence Number),待重传数据,最后一个分块的块编号BSN(最大块编号),处于等待反馈状态的分块个数(等待反馈块数),发送标识(标识此时发送队列是否可以进行数据发送,当进行如重置等操作时,在其过程中不能发送数据),重传间隔时间(在所述通信网络建立服务流时定义的参数),同步定时器、重置定时器,丢弃定时器,重置次数以及其他补充信息。所述发送队列的发送队列节点是待发送的一个完整的服务数据单元SDU(Service Data Unit)或服务数据SDU单元的一部分,包含:四个状态队列,即未发送队列(存储已经分块并编号,但未发送的数据)、等待反馈队列、重传队列和丢弃队列(存储超过生存期定时器定时的数据),本服务数据单元SDU的长度(数据长度),最后一个分块的长度(最后分块长度),最大块编号BSN,最小块编号BSN,本服务数据单元SDU的首地址(数据首地址)以及补充信息;其中,未发送队列和丢弃队列使用块队列结构:块队列头包含本队列中的分块状态和全部分块的总长度,块队列节点对应于一个分块,包含本分块的块首地址和块编号BSN;等待反馈队列和重传队列使用时间队列结构:时间队列头包含本队列中的分块的状态,时间队列节点包含重传定时器,生存期定时器以及使用相同重传定时器和生存期定时器的一组分块。
在所述接收信息模块121中,采取接收队列的形式对所述与接收数据相关的信息、参数和数据进行保存。其中,所述接收队列的接收队列头包含:接收窗口(用以定义可以接收的块编号的范围,以增大发送成功的几率和发送效率),接收到的最后一个分块的块编号BSN(最大块编号),接收标识(标识此时接收队列是否可以进行数据接收),同步定时器、重置定时器,重置次数、反馈队列(反馈池)和补充信息。所述接收队列的接收队列节点是从发送端接收到的一个完整的服务数据单元SDU或服务数据单元SDU的一部分,包含:本服务数据单元SDU的最大块编号BSN(最大块编号),最小块编号BSN,最后一个分块的长度(最后分块长度),段状态标识(即段标识,用于标识所述分段是初段,中间段或末段等)和分段队列;其中,分段队列头保存分段的总长度,分段队列节点对应所述服务数据单元SDU的一个分段,包含:分段长度,分段首地址和分段的最小块编号BSN;反馈队列(反馈池)用来存储接收到的数据信息,反馈队列头中有最近一次反馈的块编号BSN,反馈队列节点中包含本节点所包含数据的最大块编号BSN,最小块编号BSN和清除定时器队列;清除定时器队列节点中包含清除定时器和开启所述清除定时器的连续块序列的最大块编号BSN。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。