您的位置:首页 > 运维架构 > Linux

《linux高性能服务器编程》学习笔记(二)之拥塞控制

2016-04-13 22:25 295 查看
上一篇写着写着电脑就崩了,估计嫌我太罗嗦了啦哈哈哈

换个地方继续罗嗦,可可,我就是这么一个罗嗦的人~~~~啦啦啦

今天让我们接着上篇开始唠叨.

拥塞控制:

由于接收方缓存的限制,发送窗口不能大于接收方接收窗口。在报文段首部有一个字段就叫做窗口(rwnd),这便是用于告诉对方自己的接收窗口,可见窗口的大小是可以变化的。

那么窗口的大小是如何变化的呢?TCP 对于拥塞的控制总结为“慢启动、加性增、乘性减”,如图所示:


慢启动 :初始的窗口值很小,但是按指数规律渐渐增长,直到达到慢开始门限(ssthresh)。

CWND +=min(N,SMSS);

慢启动算法的理由是,TCP模块刚开始发送数据时并不知道网络的实际情况,需要用一种试探的方式平滑地增加CWND的大小.

拥塞避免:

使得CWND按照线性方式增加,从而减缓其扩大

两种实现方式:

每个RTT时间内按照上式计算新的CWND,而不论该RTT时间内发送端收到多少个确认.

每收到一个对新数据的确认报文段,就按照下式来更新CWND .CWND +=SMSS*SMSS/CWND.

发送端判断拥塞发生的依据有:

传输超时,或者说TCP重传定时器溢出

接受到重复的确认报文段.

快速重传和快速恢复:

发送端如果连续收到3个重复的确认报文段,就认为是拥塞完成了,然后它启用快速重传和快速恢复算法来处理拥塞.

过程如下:

1. 当 收到三个重复的确认报文段时,按照CWND=ssthresh+3*SMSS;

2. 每次收到一个重复的确认时,设置CWND = CWND+SMSS.此时发送端可以发送新的TCP报文段(如果新的CWND允许的话).

3. 当收到新数据的确认时,设置CWND = ssthresh(ssthresh是新的慢启动门限值).

快速冲传和快速回复完成之后,拥塞控制将恢复到拥塞避免阶段.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: