传统拥塞控制

RTT(Round-Trip Time): 往返时延

在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

RTT测量方法

1、TCP Timestam选项: RTT = 当前时间 -  数据包中Timestamp选项的回显时间。

2、重传队列中数据包的TCP控制块。TCP重传队列中保存着发送而未被确认的数据包,数据包skb中的TCP控制块包含着一个变量,tcp_skb_cb->when,记录了该数据包的第一次发送时间。RTT = 当前时间– when。

RTO(RetransmissionTimeOut)即重传超时时间。

慢启动

什么时候进行慢启动?

1)新建连接;

2)RTO超时;

3)连接空闲超过一定时间;

慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小;

1、当cwnd<ssthresh时,使用慢开始算法;

2、cwnd初始化为1个MSS长度;

3、每收到一个ACK,cwnd增加1个MSS长度;

(第一次发送一个包,收到一个ack,cwnd变为2,意味着下一次可以同时发两个包,当两个包都收到了ack,则cwnd则加2,变为4了,其实一点都不慢!)

linux 3.0版本内核之后,初始化cwnd为10了。

拥塞避免

1、 当cwnd>ssthresh时,改用拥塞避免算法

2、拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1;

发生RTO

当发生RTO时,TCP认为情况太糟糕,反应也很强烈

处理方法:

1、sshthresh =  cwnd /2

2、cwnd 重置为 1(或者10)

3、进入慢启动过程

上面的改进

收到3个重复ACK,即启动快速重传和快速恢复

处理方法:

1)引入ssthresh, ssthresh = cwnd / 2;

2)cwnd重新设为,cwnd = ssthresh + 3 * MSS;

3)重传丢失的数据段;

4)每收到一个重复ACK,cwnd增加一个分组大小,重传一个数据段;

5)收到新的ACK,设置cwnd为ssthresh,其实就是原来的cwnd减半;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值