`
jimmee
  • 浏览: 539967 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

UDT协议-基于UDP的可靠数据传输协议的实现分析(2)-为什么要用udt

阅读更多

0. AIMD算法的简单回顾

 

   (1) 慢开始阶段说明

 

   开始时cwnd为1个最大报文段(MSS), 每当一个MSS收到确认, 则cwn增加1个MSS大小, 过程:

   

   开始           --->     cwnd = 1

 

   经过1个RTT后   --->     cwnd = 2*1 = 2

 

   经过2个RTT后   --->     cwnd = 2*2= 4

 

   经过3个RTT后   --->     cwnd = 4*2 = 8

   可见, 慢开始, 实际上是指数增长的, 并不慢. 如果带宽为W,那么经过RTT*log2W时间就可以占满带宽, 但是,这个其实不是无限制的增长。

 

   (2) 拥塞避免阶段(AIMD)

 

   TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是65536(同样以字节计算)。拥塞避免的主要思想是加法增大(additive increase),也就是cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值.

   当出现拥塞的情况时: 把ssthresh降低为cwnd值的一半(multiplicative decrease), 把cwnd重新设置为1, 重新进入慢启动过程。

 

具体的伪代码如下:

 

nitially:
	cwnd = 1;
	ssthresh = infinite;
New ack received:
	if (cwnd < ssthresh) 
	      /* Slow Start*/
	      cwnd = cwnd + 1;
	else
	      /* Congestion Avoidance */
	      cwnd = cwnd + 1/cwnd;
Timeout:
	/* Multiplicative decrease */
	ssthresh = cwnd/2;
	cwnd = 1;

 

 

1. 在BDP下, 传统tcp的主要问题

   

   (1) 效率问题: 传统tcp的AIMD的算法, 很难充分的利用带宽. 例子, MSS=1500-byte, RTT=100ms, 要达到10Gbps的带宽,拥塞窗口平均需要达到83333个MSS, 丢包率要达到5,000,000,000个MSS才丢一个, 如果从时间上说,要约1.6小时才丢一个,显然,这不现实。

   上面例子的计算:

   packet_size = 1500 byte

   rtt = 100ms

   throughput = 10Gbps

 

   congestion_window=throughput*rtt/packet_size

   发送的packet数目=throughput*rtt/packet_size=10*10^9*0.1/8/1500=83,333

 

   根据拥塞窗口和丢包率p的关系: congestion_window=1.2/sqrt(p)

   p=(1.2/congestion_window)^2=1/发送的总的包的数目

   发送的总的包数=1/p=4,822,492,284 约 5,000,000,000个包才丢一个

 

   发送5,000,000,000的时间5000000000/(83333*10)/3600=1.6h

 

   一些tcp的计算公式:

   R=RTT(s)

   D=packet_size(bytes)

   B=throughput (bps)

   W=congestion window

 

  得到:

  W=BR/(8D)

  W->1.2/sqrt(p)

 

  根据丢包率: 1/p packets才丢一个包, 也就是1/(pW)个rtt才丢一个包(一个rtt可以发送W个)

  RTTs Between Losses = 1/(pW)=1/[(1.2/W)^2*W]=W/1.5

 

  也可以直接计算:

  W=BR/(8D)

  RTTs Between Losses = W/1.5=BR/12D

 

  若R=0.1s, D=1500, 可以计算出一些示例:

      TCP Throughput (Mbps)   RTTs Between Losses     W       P

    ---------------------   -------------------   ----    -----

              1                    5.5             8.3    0.02

             10                   55.5            83.3    0.0002

            100                  555.5           833.3    0.000002

           1000                 5555.5          8333.3    0.00000002

          10000                55555.5         83333.3    0.0000000002

 

   (2) 公平性问题: 由于AIMD算法与RTT是相关的, 因此不可避免的存在不公平性, 即RTT小的链接会抢占更多的带宽.

 

   tcp的性能随着丢包率和RTT的增大, 急剧的下降.

 

2. 已有的改进方法和缺点

   (1) 修改AIMD算法,  使用大一点的增长参数, 小一点的减少参数. 例如: HighSpeed, Scalable, BiC, FAST, H-TCP, L-TCP. 但是这个难以部署, 开源的linux, 也要重新编译才能部署

   (2) Parallel TCP, Rate-based reliable UDP, 主要用于私有网络, 其作用是最大可能的利用带宽, 实际使用时, 参数需要根据实际的网络进行调整, 适用场景较少.

 

3. udt  

   (1) 应用程序级别, 方便使用, 基于udp实现可靠传输,能充分利用带宽

   (2) udt使用新的拥塞控制算法, 更好实现公平性.

 

分享到:
评论

相关推荐

    UDT协议-基于UDP的可靠数据传输协议---UDT实现源码

    UDT协议的源码分析可以帮助我们深入理解其工作原理,如何在不牺牲可靠性的前提下实现高效的UDP数据传输。通过阅读源码,我们可以学习到如何设计和实现一个高性能的传输层协议,这对于网络编程和大数据传输领域的研究...

    UDT协议-基于UDP的可靠数据传输协议.docx

    UDT(User Datagram Transport)协议是一种基于UDP(User Datagram Protocol)的可靠数据传输协议,设计目的是为了解决在高带宽延迟乘积(Bandwidth-Delay Product, BDP)环境中,传统的TCP协议效率低下的问题。...

    UDT协议-基于UDP的可靠数据传输协议.pdf

    UDT(User Datagram Transport)协议是一种基于用户数据报协议(UDP)的可靠数据传输协议,设计用于解决在高带宽时延乘积(BDP)网络环境下的传输效率和公平性问题。传统的TCP协议在BDP较大时表现不佳,因为其拥塞...

    UDT协议-基于UDP的可靠数据传输协议 (2).pdf

    UDT(User Datagram Transport)协议是一种基于UDP(User Datagram Protocol)的可靠数据传输协议,主要设计用于处理高带宽时延乘积(BDP)环境下的高效数据传输。在传统的TCP协议中,由于Additive Increase ...

    UDT协议-基于UDP的可靠数据传输协议 (2).docx

    UDT(User Datagram Transport)协议是一种基于用户数据报协议(UDP)的可靠数据传输协议,设计初衷是为了在高带宽时延乘积(BDP)的网络环境中提供高效、公平和稳定的传输服务,尤其适用于大数据量传输场景,如网格...

    UDT-基于UDP的可靠数据传输协议【中文版】

    UDT被设计为一种用于TCP数据传输协议不能高效运行场合下的替代方案。UDT可有效克服TCP在高带宽延迟(BDP)网络环境中的低效率传输问题,这也是开发UDT的初衷。另一个重要的应用场景是,允许网络研究人员、学生和应用...

    udt UDT网络传输协议开源包,是基于UDP的可靠传输协议

    7. **API设计**:UDT提供了用户友好的API,使得开发者能够方便地集成到自己的应用程序中,进行可靠的UDP数据传输。 总的来说,UDT协议在保持UDP的高效性的同时,提供了类似TCP的可靠性,是那些对传输速度和可靠性都...

    udt-java 可靠UDP传输 源码

    UDT(UDP-based Data Transfer Protocol)是为了解决TCP在大数据传输时的效率问题而设计的一种用户数据报协议(UDP)上的可靠传输协议。UDT的设计目标是在保持UDP的低延迟和高带宽利用率的同时,提供类似TCP的可靠性...

    UDT协议基于UDP的可靠数据传输协议.pdf

    UDT(User Datagram Transport)协议是一种基于用户数据报协议(UDP)的可靠数据传输协议,设计目的是为了在高带宽时延乘积(BDP)的网络环境中提供高效、公平和稳定的传输服务。传统的TCP协议在面对高BDP时表现不佳...

    基于UDP的可靠传输(停等协议)

    通过这种方式,虽然基础是不可靠的UDP协议,但通过应用层的停等协议,我们可以实现可靠的数据传输,保证了数据的正确性和完整性,适用于对实时性要求较高但又需要基本可靠性的场景。在实际应用中,还可以考虑优化,...

    UDT协议UDP可靠数据传输协议.pdf

    UDT,全称为User Datagram Transport,是一种基于UDP(用户数据报协议)的可靠数据传输协议。UDP本身是一种无连接的、不可靠的传输协议,它不保证数据的顺序和完整性,也不进行拥塞控制。然而,UDT针对UDP的这些不足...

    udt 基于udp的可靠连接

    UDT(UDP-based Data Transfer Protocol)是一种用于高速数据传输的协议,它建立在用户数据报协议(UDP)之上,但提供了TCP(传输控制协议)类似的可靠性。UDT的设计目标是解决在大规模网络环境下,尤其是互联网上的...

    基于UDP的高速传输协议--UDT.zip

    UDT结合了UDP的低延迟和TCP的可靠性,通过引入一系列优化技术,实现了在不可靠的UDP基础上实现可靠的数据传输。 1. **UDT的可靠性机制** UDT采用了类似TCP的序列号和确认机制,确保数据包按序到达且无丢失。同时,...

    UDT协议UDP可靠数据传输协议.docx

    UDT,全称为User Datagram Transport,是一种基于UDP(用户数据报协议)的可靠数据传输协议,设计用于在高带宽时延乘积(Bandwidth-Delay Product, BDP)环境中提供高效、公平和稳定的传输服务。传统的TCP协议在面对...

    udt源码 udp可靠性传输

    UDT(UDP-based Data Transport)是一种专为大数据传输设计的开源传输协议,它构建于用户数据报协议(UDP)之上,旨在提供比TCP更高效、更可靠的传输服务。UDT结合了UDP的低延迟和高带宽利用率特性,并通过自定义的...

    基于UDP的高速传输协议UDT4 详解

    UDT(UDP-based Data Transfer Protocol)是一种专为高带宽时延乘积网络设计的传输协议,它在TCP(Transmission Control Protocol)的基础上进行了优化,旨在提高数据传输速度和效率。UDT4是UDT协议的第四个版本,...

    UDT-C,UDT库C语言版本

    UDT(UDP-based Data Transfer Protocol)是一个用于高速数据传输的协议,它基于用户数据报协议(UDP)。UDT旨在提供类似TCP的可靠性和拥塞控制,但同时保持UDP的低延迟和高吞吐量特性,这使得UDT特别适合于大数据...

    udt 4.8 基于udp的可靠通讯

    UDT(UDP-based Data Transfer Protocol)是一种用于网络通信的开源协议,主要设计用来提供类似于TCP的可靠传输服务,但基于用户数据报协议(UDP)。UDT 4.8是其最新版本,它在前几版的基础上进行了优化和增强,旨在...

    基于UDP的快速传输协议

    针对上述问题,研究人员提出了一种基于UDP的数据传输协议——UDT(User Datagram Transport)。该协议旨在解决TCP在高速光纤网络中的不足,并且已经在分布式计算环境中展现了良好的性能。 - **基本原理**:UDT采用...

Global site tag (gtag.js) - Google Analytics