tcp满开始和拥塞避免

本文详细介绍了TCP的拥塞控制算法,包括慢开始、拥塞避免、快重传和快恢复,以及它们如何在遇到网络问题时调整拥塞窗口以优化网络效率。特别强调了快重传和快恢复策略的作用和目的,以减少网络利用率下降的情况。

tcp的拥塞控制有四种算法,后面的快重传和快恢复是后面新增的,
刚开始会初始化慢开始门限值,并将拥塞窗口值为1往网络中发送,若收到确认包则将拥塞窗口翻倍,执行慢开始算法,当拥塞窗口值达到慢开始门限后,则执行拥塞避免算法,对拥塞窗口进行+1的线程操作;若这个过程出现未收到ack确认包后,会进行超时重传机制,慢开始门限值降为当前的拥塞窗口值一半,当前拥塞窗口值则更新为1,再次以慢开始算法执行;

快重传和快恢复用于避免由于网络问题丢失包,而不是网络堵塞问题导致慢开始门限直接降为当前的拥塞窗口值一半,拥塞窗口值更新为1,这会导致网络利用率下降;

使用快重传时,若在拥塞避免阶段收到连续3个重复确认,则执行快重传算法:
慢开始门限值更新为当前拥塞窗口值的一半,当前拥塞窗口值更新为慢开始门限值,然后执行拥塞避免算法;
在这里插入图片描述

### TCP开始拥塞避免机制详解 #### 一、慢开始(Slow Start) 在网络通信初期,为了尽快探测到网络的最大承载能力,TCP 使用慢开始算法。该算法并不是真正意义上的“慢”,而是指发送方初始时以较保守的方式逐步增加发送的数据量。 当连接建立之初或检测到超时时,发送方将拥塞窗口(cwnd)初始化为一个小值,通常是一个最大报文段大小(MSS)。随着每收到一个确认应答(ACK),拥塞窗口按指数增长,即每次加倍。这种策略使得在最初的几轮传输中,数据包的数量迅速上升[^1]。 然而,指数级的增长可能导致短时间内向网络注入大量数据,进而引发潜在的拥塞风险。因此,在达到一定阈值之前,慢开始阶段结束并转入下一个阶段—拥塞避免。 ```python def slow_start(cwnd, threshold): while cwnd < threshold: # 假设接收到一个新的 ACK received_ack = True if received_ack: cwnd *= 2 return min(cwnd, threshold) ``` #### 二、拥塞避免(Congestion Avoidance) 一旦进入拥塞避免状态,拥塞窗口不再呈指数型增长,转而采用线性增长模式。具体来说,每当成功传送一组完整的 MSS 数据后,拥塞窗口仅增加一个单位长度。这种方式可以更谨慎地探索可用带宽而不至于过度占用资源。 如果在此期间发生丢包事件,则认为发生了拥塞现象。此时需立即减半当前的拥塞窗口尺寸作为新的起点,并重新设置门限值等于此次降低后的拥塞窗口大小,随后再次执行慢开始过程直至恢复至之前的水平[^2]。 ```python def congestion_avoidance(cwnd, ssthresh): increase_by_one_unit_per_round_trip = True while not packet_loss_detected(): if increase_by_one_unit_per_round_trip: cwnd += 1 new_ssthresh = int(cwnd / 2) return max(new_ssthresh, minimum_cwnd), new_ssthresh ``` 上述两个阶段共同作用下,TCP 协议能够在保持高效的同时有效防止因突发流量造成的网络阻塞问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值