传输层拥塞控制

一、拥塞控制原理

拥塞控制方法

  • 端到端拥塞控制

    • 没有来自网络的显示反馈
    • 端系统系统延迟和丢失时间推断是否有拥塞
    • TCP采用这种方法
  • 网络辅助的拥塞控制

    • 路由器提供给端系统以反馈信息
      • 单个bit位置,显示有拥塞(SNA,DECbit TCP/IP ECN,ATM)
      • 显示提供发送端可以采用的速率

二、TCP拥塞控制

发送方的TCP拥塞机制跟踪一个额外的变量,即拥塞窗口(congestion window),表示为cwnd,它对TCP发送方能够向网络中发送流量的速率进行控制。

TCP拥塞窗口的长度与流量控制接收窗口长度相结合(滑动窗口):

在一个发送方中,未被确认的数据量不能超过cwnd和rwnd(recive window)的最小值

LastByteSend - LastByteAck <= min{cwnd,rwnd}

拥塞判断

TCP采用端到端的拥塞控制,通过发送方的“丢包事件”来定义:确认超时或收到来自接收方的3个冗余ACK。

TCP发送方通过如下原则确定发送速率使得网络既不会阻塞,又能充分利用可用带宽:

  • 一个丢失的报文段意味着拥塞,因此当丢失报文段时应当降低TCP发送方的速率

    丢失可能是由于网络节点的缓存队列满了导致的丢失,也可能是由于请求头bit错位,服务端没法解析导致的丢失。

    对于后者,概率本来就很小,加之TCP网络减速后还有相应的策略探测进行加速

  • 一个确认报文段段指示网络正在向接收方交付发送方的报文,因此,当对先前发送的未确认报文段确认到达时,能够增加发送方的速率。

    确认的到达是一切顺利的隐含指示,表示该网络不拥塞,可以适当增加拥塞窗口长度

  • 带宽探测。给定ACK指示源到目标路径无拥塞,丢包或者冗余ACK指示路径拥塞,TCP调节其传输速率的策略是增加其速率以响应到达的ACK,除非出现拥塞事件才减小传输速率。

TCP拥塞控制算法

该算法主要包含3部分:慢启动、拥塞避免、快速恢复。其中慢启动和拥塞避免是TCP的强制部分,两者的区别在于收到ACK时,增加cwnd长度的方式

  • 慢启动

    当TCP连接建立后,第一次发送数据时,cwnd的值通常设置为一个MSS的较小值,收到一个ACK确认后,拥塞窗口长度就增加一个MSS,发送两个MSS长度的报文段,这两个报文段再收到两个ACK后,每个确认报文都会使发送方拥塞窗口再增加一个MSS,变成4个MSS,并这样依次下去。慢启动过程,拥塞窗口长度的增长是指数形式。

    当出现拥塞时(超时/冗余ACK),TCP策略:

    • 超时

      慢启动出现了超时的情况后,cwnd将被置1,重复慢启动的过程,但在这次慢启动的过程中有一个慢启动阈值ssthresh=原cwnd/2,该值表示如果发送速率达到该值后,发送速率不能再以指数形式增长了,而要采用保守的策略,结束慢启动并且TCP转移到拥塞避免模式

    • 冗余ACK

      如果慢启动出现了3次冗余ACK,则说明当前通道即将阻塞,则将cwnd置为原来的1/2,然后结束慢启动,TCP执行快速重传,进入快速恢复状态

  • 拥塞避免

    一旦进入拥塞避免模式,cwnd的值大约为上次拥塞时cwnd值的一半,即距离拥塞用不遥远了!。这时不能再采用每过一个RTT就将cwnd翻倍的策略,而是要采用一种保守的策略,每过一个RTT,就将cwnd的长度值增加一个MSS。

    具体实现(通用方式):假设MSS是1460字节,cwnd是14600字节,则在要给RTT内发送10个报文段,每个到达的ACK增加1/10MSS的拥塞窗口长度,对所有的10个报文确认后,则增加一个MSS长度的拥塞窗口

    当拥塞避免出现超时,则重新计算拥塞阈值,然后进入慢启动过程

    当拥塞避免出现了丢包(收到三个冗余ACK)的情况,cwnd的值会加上三个MSS,然后将ssthresh的值记录为cwnd的一半,然后进入快速恢复模式

  • 快速恢复

    对于引起TCP进入快速恢复状态的冗余ACK,对于收到的每个冗余的ACK,cwnd的值都增加一个MSS。当收到三个冗余的ACK后,进入快速恢复状态,将ssthresh设置为cwnd的一半,重复类似拥塞避免的操作。如果在快速恢复出现了超时,则执行如同在慢启动和拥塞避免中相同的动作后,迁移到慢启动状态:cwnd的值被设置成1,并将ssthresh设置为cwnd的一半。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值