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(User Datagram Transport)协议是一种基于UDP(User Datagram Protocol)的可靠数据传输协议,设计目的是为了解决在高带宽延迟乘积(Bandwidth-Delay Product, BDP)环境中,传统的TCP协议效率低下的问题。...
UDT(User Datagram Transport)协议是一种基于用户数据报协议(UDP)的可靠数据传输协议,设计用于解决在高带宽时延乘积(BDP)网络环境下的传输效率和公平性问题。传统的TCP协议在BDP较大时表现不佳,因为其拥塞...
UDT(User Datagram Transport)协议是一种基于UDP(User Datagram Protocol)的可靠数据传输协议,主要设计用于处理高带宽时延乘积(BDP)环境下的高效数据传输。在传统的TCP协议中,由于Additive Increase ...
UDT(User Datagram Transport)协议是一种基于用户数据报协议(UDP)的可靠数据传输协议,设计初衷是为了在高带宽时延乘积(BDP)的网络环境中提供高效、公平和稳定的传输服务,尤其适用于大数据量传输场景,如网格...
UDT被设计为一种用于TCP数据传输协议不能高效运行场合下的替代方案。UDT可有效克服TCP在高带宽延迟(BDP)网络环境中的低效率传输问题,这也是开发UDT的初衷。另一个重要的应用场景是,允许网络研究人员、学生和应用...
7. **API设计**:UDT提供了用户友好的API,使得开发者能够方便地集成到自己的应用程序中,进行可靠的UDP数据传输。 总的来说,UDT协议在保持UDP的高效性的同时,提供了类似TCP的可靠性,是那些对传输速度和可靠性都...
UDT(UDP-based Data Transfer Protocol)是为了解决TCP在大数据传输时的效率问题而设计的一种用户数据报协议(UDP)上的可靠传输协议。UDT的设计目标是在保持UDP的低延迟和高带宽利用率的同时,提供类似TCP的可靠性...
UDT(User Datagram Transport)协议是一种基于用户数据报协议(UDP)的可靠数据传输协议,设计目的是为了在高带宽时延乘积(BDP)的网络环境中提供高效、公平和稳定的传输服务。传统的TCP协议在面对高BDP时表现不佳...
通过这种方式,虽然基础是不可靠的UDP协议,但通过应用层的停等协议,我们可以实现可靠的数据传输,保证了数据的正确性和完整性,适用于对实时性要求较高但又需要基本可靠性的场景。在实际应用中,还可以考虑优化,...
UDT,全称为User Datagram Transport,是一种基于UDP(用户数据报协议)的可靠数据传输协议。UDP本身是一种无连接的、不可靠的传输协议,它不保证数据的顺序和完整性,也不进行拥塞控制。然而,UDT针对UDP的这些不足...
UDT(UDP-based Data Transfer Protocol)是一种用于高速数据传输的协议,它建立在用户数据报协议(UDP)之上,但提供了TCP(传输控制协议)类似的可靠性。UDT的设计目标是解决在大规模网络环境下,尤其是互联网上的...
UDT结合了UDP的低延迟和TCP的可靠性,通过引入一系列优化技术,实现了在不可靠的UDP基础上实现可靠的数据传输。 1. **UDT的可靠性机制** UDT采用了类似TCP的序列号和确认机制,确保数据包按序到达且无丢失。同时,...
UDT,全称为User Datagram Transport,是一种基于UDP(用户数据报协议)的可靠数据传输协议,设计用于在高带宽时延乘积(Bandwidth-Delay Product, BDP)环境中提供高效、公平和稳定的传输服务。传统的TCP协议在面对...
UDT(UDP-based Data Transport)是一种专为大数据传输设计的开源传输协议,它构建于用户数据报协议(UDP)之上,旨在提供比TCP更高效、更可靠的传输服务。UDT结合了UDP的低延迟和高带宽利用率特性,并通过自定义的...
UDT(UDP-based Data Transfer Protocol)是一种专为高带宽时延乘积网络设计的传输协议,它在TCP(Transmission Control Protocol)的基础上进行了优化,旨在提高数据传输速度和效率。UDT4是UDT协议的第四个版本,...
UDT(UDP-based Data Transfer Protocol)是一个用于高速数据传输的协议,它基于用户数据报协议(UDP)。UDT旨在提供类似TCP的可靠性和拥塞控制,但同时保持UDP的低延迟和高吞吐量特性,这使得UDT特别适合于大数据...
UDT(UDP-based Data Transfer Protocol)是一种用于网络通信的开源协议,主要设计用来提供类似于TCP的可靠传输服务,但基于用户数据报协议(UDP)。UDT 4.8是其最新版本,它在前几版的基础上进行了优化和增强,旨在...