一种基于TCP的FTP下载方法与流程

文档序号:11960402阅读:194来源:国知局
一种基于TCP的FTP下载方法与流程

本发明属于数据传输的技术领域,特别涉及基于TCP的FTP下载方法。



背景技术:

FTP是TCP/IP协议组中协议之一。FTP协议包括两个部分,其一为FTP服务器,其二为FTP客户端。如图1所示,其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。

但是目前的FTP技术也有其缺点,即在网络不拥塞的情况,实际下载速率远远达不到标称速率。特别是为客户安装完网络硬件设备之后,在网络上启用基于FTP协议的网络应用,结果发现FTP的下载速率与标称的规格有很大差距。传统方法在遇到这样的问题是通过增大缓存,可是增大缓存的方法一方面增加设备的成本,另一方面也未能很明显的提升带宽。

如专利申请201410764780.7公开了一种用于FTP协议的上传数据的方法及其下载数据的方法,该方法包括:S101,普通节点向关键节点发送上传数据请求;S102,所述关键节点接收上传数据请求,并向所述普通节点发送确认发送信息;S103,所述普通节点接收确认发送信息后,向所述关键节点上传数据;以及S104,所述关键节点接收所述数据,并将所述数据上传至服务器。该用于FTP协议的上传数据的方法及其下载数据的方法通过FTP进行大量小文件传输,保证了文件的快速传输。该方法是通过对文件大小的判断来控制数据的传输,仍然解决不了上述问题。



技术实现要素:

为解决上述问题,本发明的目的在于提供一种基于TCP的FTP下载方法,该方法能够在不增加缓存和硬件成本的基础上大大提升了FTP的实际下载速率。

为实现上述目的,本发明的技术方案如下。

一种基于TCP的FTP下载方法,其特征在于所示方法在FTP开始运行后,基于两种算法来增加拥塞窗口,在稳定状态时,使用拥塞避免算法线性增加拥塞窗口;在传输开始时,或者超时重传或者空闲很长时间,这时使用慢启动算法来增加拥塞窗口。

慢启动算法为:

cwndn+1=cwndn+MTU

拥塞避免算法:

<mrow> <msub> <mi>cwnd</mi> <mrow> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> </msub> <mo>=</mo> <msub> <mi>cwnd</mi> <mi>n</mi> </msub> <mo>+</mo> <mfrac> <mrow> <msup> <mi>MTU</mi> <mn>2</mn> </msup> </mrow> <mrow> <msub> <mi>cwnd</mi> <mi>n</mi> </msub> </mrow> </mfrac> </mrow>

其中,cwndn是当前窗口大小。

具体步骤如下:

101、启动FTP服务器,指定下载的数据;

102、用户端与FTP服务器建立TCP会话;

103、启动下载;下载中,启动拥塞避免算法线性增加拥塞窗口;在传输开始时,或者超时重传或者空闲很长时间,使用慢启动算法来增加拥塞窗口;

104、下载结束。

所述103步骤中,FTP服务器和用户端程序不断监控实时带宽和链路往返延时。

进一步,所述103步骤中,包括有:

1031、判断当前网络是否拥塞,是则进入下一步启动慢启动算法,否则进入启动拥塞避免算法步骤;

1032、启动慢启动算法,保持A值不变,或者减少A,减慢开窗速度,减小下载带宽;

1033、启动拥塞避免算法,增大A值,加快开窗速度,增大下载带宽。

更进一步,在判断完网络是否拥塞后,还包括有:判断当前链路往返延时(RTT)是否过大?如若正常则保持A值不变,保持正常开窗和下载速度;如若过大,则增大A值,加快开窗速度,增大下载带宽。

本发明通过该方法,能够在不增加缓存和其它硬件成本的基础上,实现对下载网络的实时监控,通过增加拥塞窗口来提高下载速度,在不增加缓存的情况下,能够大大提高FTP的实际下载速率。

附图说明

图1是现有技术所实施的下载硬件结构图。

图2是本发明所实施的软件控制流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明所实施的方法,在FTP开始运行后,基于两种算法来增加拥塞窗口。在稳定状态时,使用拥塞避免算法线性增加拥塞窗口;在传输开始时,或者超时重传或者空闲很长时间,这时使用慢启动算法来增加拥塞窗口。这两个过程所使用的公式分别如下:

慢启动算法为:

cwndn+1=cwndn+MTU (1)

拥塞避免算法:

<mrow> <msub> <mi>cwnd</mi> <mrow> <mi>n</mi> <mo>+</mo> <mn>1</mn> </mrow> </msub> <mo>=</mo> <msub> <mi>cwnd</mi> <mi>n</mi> </msub> <mo>+</mo> <mfrac> <mrow> <msup> <mi>MTU</mi> <mn>2</mn> </msup> </mrow> <mrow> <msub> <mi>cwnd</mi> <mi>n</mi> </msub> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

其中,cwndn是当前窗口大小。

因为FTP一旦开始经过慢启动后,将一直处于拥塞避免阶段,因此影响速率的主要在拥塞避免阶段,所以只关注公式(2)。从公式(2)看出这是一个增函数,但是增量会越来越小,它应该有个极限值。

为便于计算,将公式(2)改成算式(3)的一般形似。

<mrow> <msub> <mi>x</mi> <mrow> <mi>t</mi> <mo>+</mo> <mi>&Delta;</mi> <mi>t</mi> </mrow> </msub> <mo>=</mo> <msub> <mi>x</mi> <mi>t</mi> </msub> <mo>+</mo> <mfrac> <mi>A</mi> <msub> <mi>x</mi> <mi>t</mi> </msub> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow>

其中A=MTU2,然后进一步简化,得

<mrow> <mi>x</mi> <mo>+</mo> <mi>&Delta;</mi> <mi>x</mi> <mo>=</mo> <mi>x</mi> <mo>+</mo> <mfrac> <mi>A</mi> <mi>x</mi> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow>

左右两边同乘以x,得

x2+x*Δx=x2+A (5)

进一步化简,得

x*Δx=A (6)

假设从最初的最大窗口的一半调整到最大窗口所需要时间为T。由于拥塞避免时窗口的大小在每个RTT(网络延时)调整一次,那么T时间内,窗口调整的次数:M=T/RTT。于是,将算式(6)在每个时刻的值求和,得

<mrow> <msub> <mi>x</mi> <msub> <mi>t</mi> <mn>0</mn> </msub> </msub> <mo>*</mo> <msub> <mi>&Delta;x</mi> <msub> <mi>t</mi> <mn>0</mn> </msub> </msub> <mo>+</mo> <msub> <mi>x</mi> <msub> <mi>t</mi> <mn>1</mn> </msub> </msub> <mo>*</mo> <msub> <mi>&Delta;x</mi> <msub> <mi>t</mi> <mn>1</mn> </msub> </msub> <mo>+</mo> <msub> <mi>x</mi> <msub> <mi>t</mi> <mn>2</mn> </msub> </msub> <mo>*</mo> <msub> <mi>&Delta;x</mi> <msub> <mi>t</mi> <mn>2</mn> </msub> </msub> <mo>+</mo> <mn>............</mn> <mo>+</mo> <msub> <mi>x</mi> <msub> <mi>t</mi> <mrow> <mi>M</mi> <mo>-</mo> <mn>1</mn> </mrow> </msub> </msub> <mo>*</mo> <msub> <mi>&Delta;x</mi> <msub> <mi>t</mi> <mrow> <mi>M</mi> <mo>-</mo> <mn>1</mn> </mrow> </msub> </msub> <mo>=</mo> <mi>A</mi> <mo>*</mo> <mi>M</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>7</mn> <mo>)</mo> </mrow> </mrow>

算式(7)左边表达式中,是一个微小量,因此左边表达式的求和运算等价于下面的积分运算:

<mrow> <msub> <mi>x</mi> <msub> <mi>t</mi> <mn>0</mn> </msub> </msub> <mo>*</mo> <msub> <mi>&Delta;x</mi> <msub> <mi>t</mi> <mn>0</mn> </msub> </msub> <mo>+</mo> <msub> <mi>x</mi> <msub> <mi>t</mi> <mn>1</mn> </msub> </msub> <mo>*</mo> <msub> <mi>&Delta;x</mi> <msub> <mi>t</mi> <mn>1</mn> </msub> </msub> <mo>+</mo> <msub> <mi>x</mi> <msub> <mi>t</mi> <mn>2</mn> </msub> </msub> <mo>*</mo> <msub> <mi>&Delta;x</mi> <msub> <mi>t</mi> <mn>2</mn> </msub> </msub> <mo>+</mo> <mn>............</mn> <mo>+</mo> <msub> <mi>x</mi> <msub> <mi>t</mi> <mrow> <mi>M</mi> <mo>-</mo> <mn>1</mn> </mrow> </msub> </msub> <mo>*</mo> <msub> <mi>&Delta;x</mi> <msub> <mi>t</mi> <mrow> <mi>M</mi> <mo>-</mo> <mn>1</mn> </mrow> </msub> </msub> <munderover> <mo>&Integral;</mo> <mrow> <msub> <mi>X</mi> <mi>max</mi> </msub> <mo>/</mo> <mn>2</mn> </mrow> <msub> <mi>X</mi> <mi>max</mi> </msub> </munderover> <mi>x</mi> <mi>d</mi> <mi>x</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>8</mn> <mo>)</mo> </mrow> </mrow>

其中Xmax为最大窗口,结合算式(7)和(8)得:

<mrow> <munderover> <mo>&Integral;</mo> <mrow> <msub> <mi>X</mi> <mi>max</mi> </msub> <mo>/</mo> <mn>2</mn> </mrow> <msub> <mi>X</mi> <mi>max</mi> </msub> </munderover> <mi>x</mi> <mi>d</mi> <mi>x</mi> <mo>=</mo> <mi>A</mi> <mo>*</mo> <mi>M</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>9</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <mfrac> <msup> <mi>x</mi> <mn>2</mn> </msup> <mn>2</mn> </mfrac> <msubsup> <mo>|</mo> <mrow> <msub> <mi>X</mi> <mi>max</mi> </msub> <mo>/</mo> <mn>2</mn> </mrow> <msub> <mi>X</mi> <mi>max</mi> </msub> </msubsup> <mo>=</mo> <mi>A</mi> <mo>*</mo> <mi>M</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>10</mn> <mo>)</mo> </mrow> </mrow>

<mrow> <mfrac> <mrow> <mn>3</mn> <mo>*</mo> <msup> <msub> <mi>X</mi> <mi>max</mi> </msub> <mn>2</mn> </msup> </mrow> <mn>8</mn> </mfrac> <mo>=</mo> <mi>A</mi> <mo>*</mo> <mi>M</mi> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>11</mn> <mo>)</mo> </mrow> </mrow>

再引入一个公式:

<mrow> <mfrac> <msub> <mi>X</mi> <mi>max</mi> </msub> <mrow> <mi>R</mi> <mi>T</mi> <mi>T</mi> </mrow> </mfrac> <mo>=</mo> <msub> <mi>r</mi> <mi>max</mi> </msub> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>12</mn> <mo>)</mo> </mrow> </mrow>

其中rmax为FTP的最大带宽,将(12)和M=T/RTT带入(11),得

<mrow> <mi>T</mi> <mo>=</mo> <mfrac> <mrow> <mn>3</mn> <mo>*</mo> <msup> <msub> <mi>r</mi> <mi>max</mi> </msub> <mn>2</mn> </msup> <mo>*</mo> <msup> <mi>RTT</mi> <mn>3</mn> </msup> </mrow> <mrow> <mn>8</mn> <mo>*</mo> <mi>A</mi> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>13</mn> <mo>)</mo> </mrow> </mrow>

从算式(13)可以看出:

1.算式左侧的T表示从最初的最大窗口的一半调整到最大窗口所需时间。它越大,表明调整到最大窗口的时间越长,也表明平均带宽越小。

2.由于窗口大小和实际带宽是正相关的关系。rmax越大,T成3次方增大,这样窗口调整时间T就越长,于是平均带宽与期望带宽的偏差就越大。而rmax比较小时,平均带宽与期望带宽的偏差并不明显。

3.式中RTT参数是链路往返延时,这个延时很大的话同样会增加T,从而影响FTP吞吐量。因此要尽量减少网络延时(如减少数据流传输路径,使用低延时的传输媒介),添加适当的缓存,防止网络过早丢包,可以减少RTT,但是如果缓存太大则会增加RTT。

因此通过使用较大的A值,或者在协议中使用自适应的A值,即在小带宽应用中使用较小的A值,在大带宽应用中使用较大的A值。这样在高速率(rmax)和高延时RTT(有些地方的网络它的延时就很大,而且难以改变),可以通过A来抵消高速率(rmax)和高延时RTT的影响,从而获得较小的T,从而FTP的带宽可以获得显著提升。

基于此,本发明所实现的方法包括具体步骤如下:

S101、启动ftp server,指定下载的数据。

S102、用户端,打开ftp下载软件,输入ftp server IP地址,与ftp server建立TCP会话。

S103、会话建立后,启动下载。

S104、ftp server和用户端程序不断监控实时带宽和链路往返延时。

S105、判断当前网络是否拥塞?是则进入S106,否则进入S107步骤。

S106、启动慢启动算法,保持A值不变,或者减少A,减慢开窗速度,减小下载带宽。

S107、启动拥塞避免算法,增大A值,加快开窗速度,增大下载带宽。

S108、判断当前链路往返延时(RTT)是否过大?如若正常则进入步骤S110,如果过大,则进入步骤S109。

S109、增大A值,加快开窗速度,增大下载带宽。

S110、保持A值不变,保持正常开窗和下载速度。

S111、下载结束。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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