TCP拥塞控制方法、装置及服务端与流程

文档序号:13075490阅读:260来源:国知局
TCP拥塞控制方法、装置及服务端与流程

本发明涉及网络传输技术领域,具体而言,涉及一种tcp拥塞控制方法、装置及服务端。



背景技术:

在利用tcp(transmissioncontrolprotocol,传输控制协议)进行网络数据传输的过程中,单链接情况下很难将宽带跑满,特别是在移动网络环境下,tcp的带宽利用率相对较低。就服务端而言,当客户端tcp连接请求数据时,能不能快速的传输有效数据是用户体验流畅性的根本。针对这一问题,现有的tcp拥塞控制方法主要采取快速恢复时期保守的包守恒机制,具体地,tcp每接收一个重复ack(acknowledgement,应答),则发送一新数据包,使网络上属于该流的数据包保持不变,实现网络包守恒。即当发生丢包事件时,传统tcp首先将传输速率减小,然后保持此传输速率发送数据包,严重降低了tcp传输带宽利用率。



技术实现要素:

本发明实施例的目的在于提供一种tcp拥塞控制方法、装置及服务端,用以改善上述问题。

为了实现上述目的,本发明实施例采用的技术方案如下:

第一方面,本发明实施例提供了一种tcp拥塞控制方法,应用于与客户端通信连接的服务端,所述方法包括:接收客户端的请求,并向所述客户端发送数据包;当发生丢包时,获取连续丢包个数;如果所述连续丢包个数大于或等于第一预设阈值,则触发tcp拥塞控制策略,如果所述连续丢包个数小于第一预设阈值时,则触发数据重传策略。

第二方面,本发明实施例还提供了一种tcp拥塞控制装置,应用于与客户端通信连接的服务端,所述装置包括数据包发送模块、丢包个数获取模块及执行模块。其中,数据包发送模块用于接收客户端的请求,并向所述客户端发送数据包;丢包个数获取模块用于当发生丢包时,获取连续丢包个数;执行模块用于如果所述连续丢包个数大于或等于第一预设阈值,则触发tcp拥塞控制策略,如果所述连续丢包个数小于第一预设阈值时,则触发数据重传策略。

第三方面,本发明实施例还提供了一种服务端,所述服务端与客户端通信连接,所述服务端包括存储器、处理器、以及tcp拥塞控制装置,所述tcp拥塞控制装置安装于所述存储器中并包括一个或多个由所述处理器执行的软件功能模组,所述tcp拥塞控制装置包括数据包发送模块、丢包个数获取模块及执行模块。其中,数据包发送模块用于接收客户端的请求,并向所述客户端发送数据包;丢包个数获取模块用于当发生丢包时,获取连续丢包个数;执行模块用于如果所述连续丢包个数大于或等于第一预设阈值,则触发tcp拥塞控制策略,如果所述连续丢包个数小于第一预设阈值时,则触发数据重传策略。

相对现有技术,本发明实施例提供的一种tcp拥塞控制方法、装置及服务端,通过对tcp数据包进行监控,当发生丢包时,获取连续丢包个数,并根据该连续丢包个数判断当前丢包是拥塞造成的丢包,还是链路本身造成的随机丢包;如果连续丢包个数大于或等于第一预设阈值,则为真正的拥塞丢包,触发tcp拥塞控制策略进行减速,如果连续丢包个数小于第一预设阈值,则为链路本身造成的随机丢包,触发数据重传策略对丢失的包进行快速重传。与现有的tcp拥塞控制方法相比,本发明实施例提供的tcp拥塞控制方法,对需要降速的拥塞丢包进行降速操作,对不需要降速的随机丢包快速重传,有效提升了tcp传输带宽利用率。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例提供的服务端与客户端进行交互的示意图。

图2示出了本发明实施例提供的服务端的方框示意图。

图3示出了本发明实施例提供的tcp拥塞控制方法流程图。

图4为图3示出的步骤s101的子步骤流程图。

图5为图3示出的步骤s102的子步骤流程图。

图6示出了本发明实施例提供的tcp拥塞控制装置的方框示意图。

图标:100-服务端;200-客户端;300-网络;110-tcp拥塞控制装置;111-数据包发送模块;112-丢包个数获取模块;113-执行模块;114-应答报文接收模块;115-数据包清理模块;120-存储器;130-处理器;140-通信单元。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

在利用tcp进行网络数据传输的过程中,单链接情况下基本很难将带宽跑满,特别是在移动网络环境,tcp的带宽利用率相对较低。丢包是影响tcp带宽利用率的关键因素,因为对于tcp拥塞控制来讲,一旦丢包,tcp拥塞控制都会认为是发送太快导致拥塞丢包,所以协议栈本身会降低发送速度。

有鉴于此,发明人经过长期观察和研究发现,因为发送太快导致拥塞丢包其实并不正确,丢包不一定是由于发送速度太快导致的拥塞丢包,也有可能是链路本身质量不好导致的丢包,特别是在无线网络环境,链路本身波动较大,链路本身就存在一定的丢包率,这种情况下是不应该降低数据的发送速度的,而是需要采取快速重传的方式。同时,发明人在研究过程中还发现:当发生丢包时,如果是成片的连续性丢包,则很有可能是发送太快导致的拥塞丢包;如果数据包是随机性的丢失,则很有可能是由于链路本身导致的丢包。因此,发明人基于以上研究发现,提出了本发明实施例所记载的方案。

下面通过具体的实施例并结合附图对本发明做进一步的详细描述。

请参照图1,图1示出了本发明实施例提供的服务端100与至少一个客户端200进行交互的示意图。服务端100可通过网络300与客户端200进行通信,以实现服务端100与客户端200之间的数据通信或交互。

在本发明实施例中,服务端100为web(网站)服务器。客户端200可以是,但不限于,智能手机、个人电脑(personalcomputer,pc)、平板电脑、个人数字助理(personaldigitalassistant,pda)、移动上网设备(mobileinternetdevice,mid)等。客户端200可以从服务端100下载视频、音频、图片等数据。

请参照图2,图2是图1所示的服务端100的方框示意图。服务端100包括tcp拥塞控制装置110、存储器120、处理器130和通信单元140。

存储器120、处理器130和通信单元140各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。tcp拥塞控制装置110包括至少一个可以软件或固件(firmware)的形式存储于存储器120中或固化在所述服务端100的操作系统中的软件功能模块,本发明实施例中服务端100的操作系统为linux操作系统。处理器130用于执行存储器120中存储的可执行模块,例如tcp拥塞控制装置110所包括的软件功能模块及计算机程序等。

其中,所述存储器120可以是,但不限于,随机存取存储器(randomaccessmemory,ram),只读存储器(readonlymemory,rom),可编程只读存储器(programmableread-onlymemory,prom),可擦除只读存储器(erasableprogrammableread-onlymemory,eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,eeprom)等。其中,存储器120用于存储程序,处理器130在接收到执行指令后,执行所述程序。通信单元140用于通过网络300建立服务端100与客户端200之间的通信连接,并用于通过网络300收发数据。

第一实施例

请参照图3,图3示出了本发明实施例提供的tcp拥塞控制方法流程图。tcp拥塞控制方法包括以下步骤:

步骤s101,接收客户端的请求,并向客户端发送数据包。

在本发明实施例中,服务端100在接收客户端200的请求之前,需要执行初始化相关准备工作,该初始化相关准备工作可以包括:

首先,初始化tcp内核中的各项队列及对象池,例如,数据包等待队列、数据包重传队列等。

然后,在tcp内核中添加重传队列及无应答队列,其中,重传队列可以表示为resend队列,无应答队列可以表示为no-ack队列;需要说明的是,这里的重传队列及无应答队列与tcp内核原有的数据包重传队列等的逻辑不同,是新添加的队列,也就是说,该重传队列及无应答队列与tcp内核原有的数据包重传队列等是相互独立的。

第三,在sk_buffer结构中添加一个序号字段,该序号字段可以为uint64_t字段,用于标记向客户端200发送的数据包的序号,需要说明的是,这里数据包的序号是添加的对每个数据包的编号,从0开始,溢出后继续从0开始,另外,所有关于序号的计算都需要除264

最后,在tcp内核中添加拥塞判断标记,该拥塞判断标记表示由于发送太快导致了拥塞。

在本发明实施例中,当初始化相关准备工作完成之后,开始等待客户端200的请求。当接收到客户端200的请求时,首先将缓冲数据分割成多个数据段并在sk_buffer结构中形成数据报文头部,再将每个具有数据报文头部的数据段封装成数据包。之后对每个sk_buffer结构中的序号字段进行累加编号,然后将具有累加编号的多个数据包放在数据包等待队列。最后,根据tcp慢启动过程对数据包等待队列中的数据包进行发送。

需要说明的是,在整个过程中首先将初始窗口设置为36000字节,之后设置定时器,开启sack,并等待响应ack,每一个发送过的数据包,复用到no-ack队列,只是添加到no-ack队列中,并不做数据拷贝。

请参照图4,步骤s1011可以包括以下子步骤:

子步骤s1011,当接收到客户端的请求时,将缓冲数据分割成多个数据包。

在本发明实施例中,当客户端200有请求到来时,tcp三次握手结束后,服务端100上层有大量数据到达缓冲区形成缓冲数据,将缓冲数据分割成多个数据段并添加数据报文头部,再将每个具有数据报文头部的数据段封装成数据包。

子步骤s1012,对每个数据包添加序号,并向客户端发送带有序号的数据包,其中,数据包的序号是依次累加的。

在本发明实施例中,数据包封装完成之后,对每个数据包添加依次累加的序号,再将带有序号的数据包发送至客户端200。

步骤s102,当发生丢包时,获取连续丢包个数。

在本发明实施例中,客户端200接收到服务端100发送的数据包之后,向服务端100发送ack报文,服务端100接收到ack报文时,从no-ack队列中移走该ack报文对应的数据包、以及resend队列中的对应序号的数据包;当ack报文到达之后继续进行新的数据包发送,tcp拥塞控制与流量控制都是通过滑动窗口进行控制,其他现有的速度控制逻辑在此不再赘述。

在本发明实施例中,在等待ack报文的过程中需要监控是否发生了丢包,tcp可以通过以下两种方式判断丢包:第一、判断定时器是否超时;第二,是否存在连续三次dack或者dsack指示序号对应的数据包,具体判断过程属于现有技术,在此不再赘述。当有数据包满足条件时,也就是发生丢包时,首先,从no-ack队列中获取还没有接收到ack报文需要重传的待重传数据包,并将该待重传数据包放到resend队列;然后,检查resend队列中的待重传数据包的序号是否有连续数据包,若有,获取该连续数据包的个数,该个数即为连续丢包个数。

请参照图5,步骤s102可以包括以下子步骤:

子步骤s1021,当发生丢包时,获取待重传数据包。

在本发明实施例中,当发生丢包时,从no-ack队列中获取还没有接收到ack报文需要重传的待重传数据包。

子步骤s1022,将待重传数据包发送至预先添加的重传队列中。

在本发明实施例中,将从no-ack队列中获取的待重传数据包放到预先添加的resend队列。

子步骤s1023,获取预先添加的重传队列中每个待重传数据包的序号。

在本发明实施例中,检查resend队列中的待重传数据包的序号是否有连续数据包,若有,获取该连续数据包的个数。

子步骤s1024,根据每个待重传数据包的序号,得到连续丢包的个数。

在本发明实施例中,resend队列中的待重传数据包中连续数据包的个数即为连续丢包个数。

步骤s103,如果连续丢包个数大于或等于第一预设阈值,则触发tcp拥塞控制策略,如果连续丢包个数小于第一预设阈值时,则触发数据重传策略。

在本发明实施例中,得到连续丢包个数之后,判断该连续数据包个数是否大于或等于第一预设阈值(例如,5个),如果连续丢包个数大于或等于第一预设阈值,则判定为发送太快导致的拥塞,设置拥塞标记并触发tcp拥塞控制策略,tcp拥塞控制策略包括降低数据包发送速度并将预先添加的resend队列中的待重传数据包进行重传,等待客户端200响应该待重传数据发送的应答报文。

如果连续丢包个数小于第一预设阈值,则判定为链路本身质量不好导致的拥塞,清除拥塞标记并触发数据重传策略,数据重传策略将预先添加的resend队列中的待重传数据包进行重传,此时不进行降速,等待客户端200响应该待重传数据发送的应答报文。

在本发明实施例中,根据连续丢包个数触发tcp拥塞控制策略或者数据重传策略之后,本发明实施例提供的tcp拥塞控制方法还可以包括:

步骤s104,接收客户端响应待重传数据包发送的应答报文。

在本发明实施例中,触发tcp拥塞控制策略后以降低的速度将预先添加的resend队列中的待重传数据包进行重传,触发数据重传策略后不进行降速将预先添加的resend队列中的待重传数据包进行重传,客户端200接收到该待重传数据包之后,基于该重传数据包像服务端100发送应答报文。

在本发明实施例中,接收客户端200响应待重传数据包发送的应答报文之后,本发明实施例提供的tcp拥塞控制方法还可以包括:

步骤s105,根据应答报文,对重传队列中对应的待重传数据包进行清理。

在本发明实施例中,服务端100接收到客户端200响应待重传数据包发送的应答报文之后,在resend队列中找到该应答报文对应的待重传数据包并进行清理,清理之后,再次检查resend队列中的待重传数据包中连续数据包的个数,当该连续数据包的个数小于第二预设阈值(例如,3个)时,也就是当resend队列中的连续丢包的个数小于3个时,则取消tcp拥塞控制策略,将降低的数据包发送速度进行恢复,同时触发述数据重传策略。

在本发明实施例中,利用经验数据(例如,连续五个数据包丢失),判断是真正的拥塞丢包还是普通随机丢包,以此来降低拥塞发生的错误判断率,从而减小了服务端100的操作系统默认拥塞的次数,减少了操作系统降速的次数,本发明实施例提供的tcp拥塞控制方法,可以有效提升tcp传输带宽利用率,尤其是移动环境的带宽利用率。

第二实施例

请参照图6,图6示出了本发明实施例提供的tcp拥塞控制装置110的方框示意图。tcp拥塞控制装置110包括数据包发送模块111、丢包个数获取模块112、执行模块113、应答报文接收模块114及数据包清理模块115。

数据包发送模块111,用于接收客户端的请求,并向客户端发送数据包。

在本发明实施例中,数据包发送模块111可以用于执行步骤s101。

在本发明实施例中,数据包发送模块111,还用于:

当接收到客户端的请求时,将缓冲数据分割成多个数据包;

对每个数据包添加序号,并向客户端发送带有序号的数据包,其中,数据包的序号是依次累加的。

在本发明实施例中,数据包发送模块111还可以用于执行子步骤s1011~s1012。

丢包个数获取模块112,用于当发生丢包时,获取连续丢包个数。

在本发明实施例中,丢包个数获取模块112可以用于执行步骤s102。

在本发明实施例中,丢包个数获取模块112,还用于:

当发生丢包时,获取待重传数据包;

将待重传数据包发送至预先添加的重传队列中;

获取预先添加的重传队列中每个待重传数据包的序号;

根据每个待重传数据包的序号,得到连续丢包的个数。

在本发明实施例中,丢包个数获取模块112还可以用于执行子步骤s1021~s1024。

执行模块113,用于如果连续丢包个数大于或等于第一预设阈值,则触发tcp拥塞控制策略,如果连续丢包个数小于第一预设阈值时,则触发数据重传策略。

在本发明实施例中,执行模块113可以用于执行步骤s103。

应答报文接收模块114,用于接收客户端响应待重传数据包发送的应答报文。

在本发明实施例中,应答报文接收模块114可以用于执行步骤s104。

数据包清理模块115,用于根据应答报文,对重传队列中对应的待重传数据包进行清理。

在本发明实施例中,数据包清理模块115可以用于执行步骤s105。

综上所述,本发明提供的一种tcp拥塞控制方法、装置及服务端,所述方法包括:接收客户端的请求,并向客户端发送数据包;当发生丢包时,获取连续丢包个数;如果连续丢包个数大于或等于第一预设阈值,则触发tcp拥塞控制策略,如果连续丢包个数小于第一预设阈值时,则触发数据重传策略。本发明利用经验数据(例如,连续五个数据包丢失),判断是真正的拥塞丢包还是普通随机丢包,以此来降低拥塞发生的错误判断率,从而减小了服务端的操作系统默认拥塞的次数,减少了操作系统降速的次数,本发明实施例提供的tcp拥塞控制方法,可以有效提升tcp传输带宽利用率,尤其是移动环境的带宽利用率。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1