传输层 TCP 拥塞控制(1):慢启动

由于TCP协议向应用层提供不定长的字节流发送方法,使得TCP协议先天性的就有意愿占满网络中的整个带宽,但是网络中许多TCP连接同时去试图占满整个带宽的时候就有可能发生恶心拥塞事件,而TCP的拥塞控制算法则是非常有必要的,能够有效的降低网络当中的拥塞,提升所有TCP的发送速度。

全局思考:拥塞控制


慢启动
拥塞避免
快速重传
快速恢复

在网络拓扑中可以看到左边的client向右边的server进行链路通信的时候,这条链路的带宽是1000M每秒,理想条件下没有达到1000M的时候是缓慢上升,到了1000M是保持在这样一个水平,但是实际上是达不到的。

比如从R1过来的流量是700M每秒,从R2过来的流量是600M每秒,实际上R3能够传出的流量是1000M每秒,所以一定有300M每秒的数据被R3丢弃了。

当R3发生丢掉过载的数据包的时候,R3的队列也会非常的长使得每一个报文在网络当中呆的时间也会更加长,RTT时延也会过长,当轻度拥塞的时候吞吐量已经下降了,当重度拥塞的时候网络是非常糟糕的。

而拥塞控制实际上是包含了4个部分, 慢启动,拥塞避免,快速重传,快速恢复。

慢启动


慢启动当中定义了一个概念叫做拥塞窗口,

  • 拥塞窗口             cwnd(congestion window)
  • 通告窗口             rwnd(receiver‘s advertised window,也就是对方的接受窗口)
  • 发送窗口             swnd = min(cwnd,rwnd)(等于对方的接受窗口和拥塞窗口的最小值
  • 每收到一个ACK,cwnd扩充一倍(最初只有一个mss,当我收到了ack之后,没有发生丢包,然后扩展为2个cwnd,同理收到之后4个cwnd,以指数级别的快速的去上升)

慢启动在解决什么问题呢,也就是我不清楚当前的网络状态是不是已经非常繁忙了,所以我先悠着点,少发一点,当我确定网络中没有丢包的时候,那么我再去快速的增加我的拥塞窗口,这就是慢启动的意义所在。

慢启动的初始窗口


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值