11.TCP停止等待、超时重传、滑动窗口、拥塞控制、快重传和快恢复

TCP 超时与重传机制  
 
TCP 协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题 TCP设计的超时与重传机制 。其基本原理: 在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。 
  这里比较重要的是 重传超时时间 ,怎样 设置这个定时器的时间(RTO 从而保证对网络资源最小的浪费。因为若RTO太小,可能有些报文只是遇到拥堵或网络不好延迟较大而已,这样就会造成不必要的重传。太大的话,使发送端需要等待过长的时间才能发现数据丢失,影响网络传输效率。  
  由于 不同的网络情况不一样,不可能设置一样的RTO 实际中 RTO 根据网络中的RTT(传输往返时间)来自适应调整的。 具体关系参考相关算法。  

  通过图来了解重传机制: 

从图可以知道,发送方连续发送3个数据包,其中第二个丢失,没有被接收到,因此不会返回对应的ACK,每发送一个数据包,就启动一个定时器,当第二个包的定时器溢出了还没有收到ack,这时就进行重传。

TCP慢启动

慢启动是TCP的一个拥塞控制机制,慢启动算法的基本思想是当TCP开始在一个网络中传输数据或发现数据丢失并开始重发时首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞。 
  慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为 1个报文段(即另一端通告的报文段大小)。每收到一个ACK,拥塞窗口就增加一个报文段(cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。

拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

发送方开始时发送一个报文段,然后等待 ACK。当收到该ACK时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的 A C K时,拥塞窗口就增加为4。这是一种指数增加的关系。

拥塞避免算法

网络中拥塞的发生会导致数据分组丢失,需要尽量避免。在实际中,拥塞算法与慢启动通常在一起实现,其基本过程: 
   1. 对一个给定的连接,初始化cwnd1个报文段,ssthresh65535个字节。 
2. TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。

拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。 
3. 当拥塞发生时(超时或收到重复确认(丢包)),ssthresh被设置为当前窗口大小的一半cwnd 和接收方通告窗口大小的最小值,最少为2个报文段)。此外,如果是超时引起了拥塞,则 cwnd被设置为1个报文段(这就是慢启动)。 
4.当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于是否正在进行慢启动或拥塞避免。

如果cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。

慢启动一直持续到回到当拥塞发生时所处位置的半数才停止(因为记录了在步骤2 中制造麻烦的窗口大小的一半),然后转为执行拥塞避免。 
 慢启动算法初始设置cwnd1个报文段,此后每收到一个确认就加 1。那样,这会使窗口按指数方式增长:发送 1个报文段,然后是2个,接着是4……

从图可以知道,发送方连续发送3个数据包,其中第二个丢失,没有被接收到,因此不会返回对应的ACK<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值