滑动窗口协议、拥塞窗口与拥塞避免算法

TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。

一 滑动窗口协议

    ”窗口“对应的是一段可以被发送者发送的字节序列,因为是连续范围内的一段消息,所以被称之为“窗口”;因为窗口会随着发送过程的不断进行,可发送的段也在不断地移动(向右移动),所以称之为“滑动窗口“。滑动窗口协议可描述为下图:

   (1)只有当A成功发送了数据,即发送的数据得到了B的确认之后,才会移动滑动窗口离开已发送的数据;同时B则确认连续的数据分组,对于乱序的分组则先接收下来,避免网络重复传递。

    (2)在TCP建立连接的时候会告诉发送方窗口的大小,其后会在每个发送报文的ACK报文重新设置窗口的大小,每次发送方不必发送一个全窗口大小的数据。


二 慢启动与拥塞窗口

    一般局域网的传输效率是很客观的,但是如果在发送方和接收方之间存在多个路由器和速度较慢的链路时,则必须有相应的策略来应付可能出现的拥塞问题,这种策略。

    慢启动算法通过观察到新分组进入网络的速率应该与另外一端返回确认的速率相同而进行工作。

    慢启动为发送方的TCP增加了另外一个窗口:拥塞窗口(cwnd)。建立连接时,拥塞窗口的大小初始化为1个报文段(即另外一端通告的报文段的大小)。每收到一个报文ACK,拥塞窗口就会增加一个报文段。发送方取拥塞窗口和通告窗口中的最小值作为发送上限。滑动窗口是接收方使用的流量控制,拥塞窗口是发送方使用的流量控制。

    在某些点上可能达到了互联网的容量,于是中间的路由开始丢弃分组。下一小节讨论的TCP超时和重传机制就会对拥塞窗口起作用,使其改变大小,最终适应当前的互联网速率。


三 TCP超时与重传

    3.1拥塞避免算法

        在实际中,拥塞避免算法要和上节讨论的慢启动算法一起作用。拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动启动门限ssthresh。算法的工作过程如下:

        (1)初始化cwnd为1个报文段,ssthresh为65535个字节。

        (2)当拥塞发生时(超时或者收到重复确认),ssthresh被设置为当前窗口大小的一半(拥塞窗口和通告窗口中的最小值,但最少为2个报文段),此外,如果是超时引起的拥塞,则cwnd被设置为1个报文段(这就是慢启动);

        (3)当新数据被对方确认时,就增加cwnd,增加的方法依赖于当前是否进行慢启动算法还是拥塞避免算法。慢启动算法(指数方式增长cnwd)在开始就启动一直持续到我们回到拥塞情况发生时所处位置一半的时候才停止,然后启动拥塞避免算法(线性增加cnwd)。

    3.2快速重传与快速恢复算法

        其实TCP还有一种情况会进行重传:那就是收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有:

1.把ssthresh设置为cwnd的一半

2.把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)

3.重新进入拥塞避免阶段。


     后来的“快速恢复”算法是在上述的“快速重传”算法后添加的,当收到3个重复ACK时,TCP最后进入的不是拥塞避免阶段,而是快速恢复阶段。快速重传和快速恢复算法一般同时使用。快速恢复的思想是“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那么根据TCP的ACK机制就表明有一个数据包离开了网络,于是cwnd加1。如果能够严格按照该原则那么网络中很少会发生拥塞,事实上拥塞控制的目的也就在修正违反该原则的地方。

具体来说快速恢复的主要步骤是:

1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。 

2.再收到重复的ACK时,拥塞窗口增加1。

3.当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值