TCP 拥塞控制
相关名词
- 滑动窗口
tcp通过滑动窗口进行流量控制,所谓的窗口可以理解为接收端所能提供的缓冲区大小。
TCP是一个滑动窗口协议,即一个TCP连接的发送端在某个时刻能发多少数据是由滑动窗口控制的
- RTT(Round trip time)
表示从发送端到接收端的一去一回需要的时间。
TCP在数据传输过程中会对RTT进行采样(即对发送的数据包及其ACK的时间差进行测量,并根据测量值更新RTT值)
- RTO (Retransmission TimeOut)
发送数据包,启动重传定时器,重传定时器到期所花费的时间
TCP根据得到的RTT值更新RTO值,即Retransmission TimeOut,就是重传间隔,发送端对每个发出的数据包进行计时,如果在RTO时间内没有收到所发出的数据包的对应ACK,则任务数据包丢失,将重传数据。一般RTO值都比采样得到的RTT值要大。
TCP拥塞控制算法
- BIC(Binary Increase Congestion)
- BIC方法
- 如果发生丢包,窗口大小为W1,要保持线路满载不丢包,则说明实际窗口Wmax应该在当前窗口值W1以下。
- 如果当前窗口值W2没有丢包,则说明实际实际Wmax值应该在当前窗口值以上。
- 何时调整?
- 每收到一个ACK时,便将窗口设置到Wmax和Wmin值的中点,直到持续接近Wmax值。
- 如何突破?
- 当当前窗口值已经达到Wmax值时,说明带宽已经有空闲资源,此时最大带宽可能已经不止Wmax值!
- 如何去寻找新的Wmax值? 丢包! 按照逼近Wmax值的路径倒回去,采用与之对称的方案。
整个BIC过程可以参考如下图
##### BIC缺陷
- 可以通过上图和下图了解到 如果RTT时间不同,通过BIC算法搜索到的Wmax的时间是不同的,因此带宽就会被RTT短的连接无情的占有。
?
- CUBIC(CU-BIC?)
CUBIC相对于BIC解决的就是在探索Wmax的时间公平问题。
如何让寻找Wmax探索曲线跟RTT无关?
很简单。找一条数学上定义的曲线即可!该曲线的曲线方程自变量里没有RTT就好了。
Wmax曲线公示?
$f(x)=x^3-x^2+1$ 类似于BIC窗口探测曲线的公式
所以我们实际上需要确定该1元3次函数的各项参数($f(x)=ax^3+bx^2+cx+d$)
CUBIC 公式的建立
- 由上图可知 $f(x)=h(x)+Wmax$ (1)
- 其中
- $f(0)=\beta Wmax$ (2)
- $()f(2r)=Wmax + \beta Wmax$ (3)
- $f(r)=Wmax$ (4)
- 将(2),(3),(4)代入(1)中 可得:
- $h(r)=0$ (5)
- $h(0)=(\beta-1)Wmax$ (6)
- 由实际情况我们可以合理推算出 h(x) 的一个合理形式 $h(x)=a(x-r)^3$ (7)
- 将(6)式代入到(7)中,得表达式$ r=\sqrt[3]{\frac{(1-\beta)Wmax}a} $ (8)
- 将 (7)(8)式联合代入 (1)中,并将 $a$ 替换成 c 可得 $f(x)=c(x-\sqrt[3]{\frac{(1-\beta)Wmax}a} )+Wmax$
其中 C 即 CUBIC中的C
?
CUBIC :$f(x)=c(x-\sqrt[3]{\frac{(1-\beta)Wmax}a} )+Wmax$
到这里 我们可以理解到 $\beta$ 控制了曲线的高度,也就是 最开始的Wmin值,r则控制了从起始窗口到Wmax窗口的时间,这个r和C成反比,C越大 时间越小。
c越大,时间越小参考附图1.
因此,我们可以通过控制 C 和$\beta$的值来控制 TCP的高速率传输,而不受 RTT值的影响。
参考博客
附图一
原文地址:https://www.cnblogs.com/shitou6/p/9060423.html
时间: 2024-12-27 17:04:37