基于UDP拥塞控制-LEDBAT
来源:互联网 发布:长春知远画室在哪 编辑:程序博客网 时间:2024/05/21 06:53
LEDBAT[1]是Bittorrent客户端上使用的一种拥塞控制机制。大公司在开发基于UDP的网络应用时,应该建立拥塞控制机制。因为网络中的数据流应该遵从以下原则:不给当前的网络制造麻烦;保证数据流的带宽公平性,不恶意竞争带宽。
P2P应用不知道安慰了多少宅男寂寞无聊的夜晚,在互联网中的流量中p2p流量中占有很大的份额。以至于当年有些ISP要封锁P2P应用。当年Bittorrent要使用UDP进行数据传输时,在网络中引起了骚动。鉴于Bittorrent在网络中占用的流量,再加上无任何拥塞控制机制的UDP协议,Bittorrent会不会导致再次出现1986年的网络崩溃。于是建立在UDP之上的拥塞控制机制LEDBAT横空出世。以上是引子,宅男寂寞无聊的夜,我不关心。
目标:1在瓶颈链路没有其他流的情况下,能够占满带宽,充分利用网络。2在没有其他数据流的时候,保证较低的排队时延;因TCP流的窗口增加,引入排队时延的情况下,尽量不要增加排队时延。3当TCP竞争带宽的时候,LEDBAT主动出让带宽,降低窗口(The LEDBAT considers itself to be junior to TCP)。
LEDBAT仍是基于窗口的速率控制,但是比TCP更早地感知网络的拥塞情况,以便更好地做出回应。LEDBAT采用单向时延,估计网络中的排队情况。一个数据包在网络的传输经历的时延有三部分组成:processing delay,propagation delay, queue delay。在网络中不存在排队的时候,没有排队时延,数据包经历的时延最小。
LEDBAT采用单向时延来衡量网络的拥塞状况,单向时延相比RTT的优势,就是不用考虑ack返回时经历的回路时延。但是单向时延不是够准确测量,因为收发端时钟不同步。LEDBAT的单向时延是这样计算的,接收端接收到数据,回复ack,ack中携带时间差,ack.delay=localtimestamp(接收端收到数据时的本地时间)-remotetimestamp(f发送端在发送时的时戳)。将数据包传输过程中的最小的ack.delay作为base_delay,排队时延queue_delay=current_delay-base_delay,这个差值,就解决了sender、receiver之间的时钟不同步问题。具体的接收端窗口变化如下[1]:
current_delay = acknowledgement.delaybase_delay = min(base_delay, current_delay)queuing_delay = current_delay - base_delayoff_target = TARGET - queuing_delaycwnd += GAIN * off_target / cwnd解释下,TARGET就是一个设定的参数值,GAIN为1/TARGET,在queue_delay较小时,第四个是窗口变化公式,保证窗口增长,快速逼近瓶颈链路带宽。GAIN的存在保证LEDBAT不比TCP的窗口了增长速度快。在最好的情况下(queue_delay=0),LEDBAT也是每个RTT,cwnd的大小增加1。LEDBA相比基于丢包的的TCP拥塞控制机制,对于网络的拥塞感知要早。在queue_delay=2*TARGET时,每经一个RTT,cwnd减少1。就是说在队列时延增加的情况下,但是还未到达路由器的队列丢包阈值,TCP还处在拥塞避免阶段,tcp每个RTT,窗口增1,LEDBAT窗口减1。LEDBAT向TCP出让带宽。
LEDBAT这种机制,保证网络中有带宽可用的时候,尽快占用,网络中存在TCP流的时候,向TCP带宽。The LEDBAT considers itself to be junior to TCP。LEDBAT不向TCP流竞争,因为它是p2p应用中的,过多地竞争带宽,是要被ISP管制的。[3]给出了LEDBADT作为TCP的拥塞控制机制在linux上的实现代码。
[1]LEDBAT: The New BitTorrent Congestion Control Protocol
[2]RFC 6817 - Low Extra Delay Background Transport (LEDBAT)
[3]LEDBAT implements in Linux on TCP
[4]LEDBAT on ns2
- 基于UDP拥塞控制-LEDBAT
- WebRTC 基于GCC的拥塞控制(上)
- WebRTC 基于GCC的拥塞控制(下)
- DSS 代码分析【Reliable UDP之拥塞控制】
- 基于窗口与基于速率的拥塞控制
- 拥塞控制
- 拥塞控制
- 拥塞控制
- 拥塞控制
- 拥塞控制
- 拥塞控制
- 拥塞控制
- 拥塞控制
- 有关基于TCP的拥塞控制技术探究
- TCP基于窗口的端到端的拥塞控制机制
- 第九章 tcp拥塞控制--基于Linux3.10
- 基于RTT梯度的TCP CDG拥塞控制算法
- TCP基于窗口的端到端的拥塞控制机制
- H5实现简单音乐播放器
- 二分与分治
- 由先序遍历和中序遍历建立二叉树
- LeetCode--Unique Binary Search Trees
- 搭建个人论坛
- 基于UDP拥塞控制-LEDBAT
- jdbc访问数据库无痕操作
- ansible远程命令
- Windows基础
- VMware Ubuntu安装详细过程2
- 欢迎使用CSDN-markdown编辑器
- Java之BitSet
- 习题6.5
- Java中如何让bigdecimal不用科学计数法 显示(51Nod 1873 初中的算术)