TCP拥塞控制

一、拥塞控制出现原因

主机A给主机B传输数据,如果此时也有很多主机同时传输数据,占用了信道资源,然后可能会导致主机A发送的数据包在半路上塞车,迟迟没有到达B主机。
B主机没用收到数据,就不发ACK给A主机,A主机就会误认为是发送了丢包现象,进行重新传输该包。
结果就会导致浪费了信道资源和使得拥塞更严重。

二、怎么进行控制拥塞

为了进行拥塞控制,TCP发送方要维持一个拥塞窗口(cwnd)的状态变量(就是指一次连续发多少个数据包)。
拥塞窗口的大小取决于网络的拥塞程度,且动态变化。
发送方要让自己的发送窗口取为拥塞窗口和接收方的接收窗口中较小的一个。

三、控制方法

TCP的拥塞控制采取了四种算法:1.慢开始、2.拥塞避免、3.快重传、4.快恢复

1.慢开始和拥塞避免

1.1慢开始和拥塞避免

即A在正式发送数据前,先从1开始发包,没有超时事件的话,下次就发2个包,以此类推,1,2,3,4,5,6
每次线性递增1的话太慢了,所以也可以指数递增,1,2,4,8,但是指数递增速率太快,一下子就到瓶颈值。
所以一般慢开始是结合线性递增1和指数递增两个方法,
一开始是指数递增,递增到瓶颈值的时候,这个值叫阈值,用ssthresh表示。
到了阈值后,后面转变为线性增长。

指数阶段叫慢启动,线性增长阶段叫拥塞避免

1.2.瓶颈值

不管是指数增长还是线性增长,后面始终会有超时事件发送,这个时候N值就是瓶颈值(N是指能一次连续发送多少包),用MAX表示。
到达瓶颈值后,阈值ssthresh会变化,变为MAX瓶颈值的一半,即ssthresh=MAX/2

1.3概括

就是主机A发送数据的时候,先发送1个数据包,下次发送是2,4,6,8…个包,呈现指数增长。
到达阈值ssthresh后,发送数据包的数量变为线性增长,例如阈值是8,下次就是9,10,11这样。
指数增长也会有瓶颈值,当发送超时事件后,发送包的数据量N就是瓶颈值MAX,例如是14。
这个时候ssthresh 变为MAX的一半,然后A重新开始发1个数据包
然后下次发送2个,4个,7个,在7后面指数递增发送数据包。
以此来动态变化。

2.快重传和快恢复

数据包是有序号的,1,2,3,4,当 主机B收到了1,2,4数据包后,因为没用收到3这个包,就会重复发送数据包2的ACK信息给A,告诉A说3这个包没收到。
A连续收到三个数据包2的ACK后,且数据包3的定时器还没过期,就知道数据包3可能丢失了,然后快速重传数据包3,
然后A把ssthresh设置为MAX的一半,
但是此时下次发送包的数量不是从1开始,而是从ssthresh开始,再一个一个线性递增。这种情况叫快恢复。
拥有快恢复版本的TCP叫TCP Reno.
另一种版本不论超时还是丢失都把拥塞窗口设定为1,从最初状态开始传数据包,这种叫TCP Tahoe.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值