TCP拥塞避免

本文深入探讨了TCP拥塞控制的基本原理,包括RTT、RTO的测量与估计方法,以及CWND和SSStresh的作用机制。通过Reno算法为例,详细解释了慢启动、拥塞避免、快速重传和快速恢复等关键策略。

(保留版权,欢迎转载。请保留出处,注明原始链接!谢谢。)

TCP/IP的精髓在TCP,TCP的精髓在拥塞避免。

发端TCP估计网络层的信道容量,结合收端TCP的提示窗口,动态调整包的发送速率,来主动避免/解除网络层可能/已经出现的拥塞现象。
0。基本概念:RTT | RTO,CWND | SSStresh。
RTT的测量:样本选取(每个连接仅测1次),计数方法(记录节拍分割点)和误差范围(1~2个节拍长度)。
RTO的估计:Jacobson算法( A <- 0.875A + 0125M, D <- 0.75D + 0.25|A - M|, RTO <- A + 4D),和Karn算法(为避免重传二义性,对重传数据的确认不更新RTO,沿用指数避让)。
CWND和SSStresh:在诸多拥塞对策算法中两者配合使用。
1。拥塞指征:(隐式)超时/重复确认,(显示)SACK和ECN。
2。拥塞对策:Taheo/Reno/NewReno/Bic/Cubic/Vegas等算法。
3。Reno算法举例:
a. 慢启动/拥塞避免
1). 初始CWND为1 MSS,SSStresh为64kb;
2). 发端TCP发送数据包不得超过min(CWND, RWND);
3). 当发现拥塞(超时和重复ACK)时,SSStresh <- max(2MSS, 1/2*min (CWND, RWND));并若是超时,则CWND <- 1MSS;(注:重复ACK并未引起CWND减小,因为重复ACK是由超前的数据包到达收端触发的,且认为发端TCP到收端TCP的路径仍然通畅。)
4). 当每有新的ACK到达(新的数据亦被确认)时:若CWND <= SSStresh,进入慢启动状态,CWND <- CWND + 1(CWND呈指数增长);若CWND > SSStresh,进入拥塞避免状态,CWND <- CWND + 1/CWND(CWND在一个RTT内至多增加1MSS)。
b. 快速重传/快速恢复
1). 收端TCP对于收到的超前数据包时(并不丢弃但也无法提交应用层,暂在TCP收端缓存内,会影响RWND吗?),但总会立刻回复ACK(重复ACK)呼吁其期望收到的数据包(可能中途丢失或者掉队乱序);
2). 当第1个重复ACK到达时,进入a的1).,但直到第3个重复ACK到达时:
i]. 立刻重发丢失的数据包(重复ACK期望的)
ii]. SSStresh <- 1/2*min (CWND, RWND),CWND <- SSStresh + 3;
3). 当第3+N个重复ACK到达时,CWND <- CWND + 1,若min(CWND,RWND)允许,则继续发送1个新数据包;(如果第3+3+1, +2, +3 ...个重复ACK到达时呢?此时CWND < SSStresh,是否仍然是“慢启动”呢?)
4). 当新的ACK到达时(对重传的数据包和后续发送的数据包的确认),CWND <- SSStresh,即2).的ii].中保存的值,从此进入拥塞避免状态。
4。Linux源代码分析(略)
5。抓包实验(略)
<think> 嗯,用户想了解TCP拥塞避免和WRED的相同点和不同点,这个网络工程领域的问题挺专业的。从用户引用的资料来看,ta应该有一定网络基础,可能正在学习拥塞控制相关技术。 用户提供的三个引用很有价值。引用[1]详细解释了WRED和WFQ的工作原理,特别强调WRED通过随机早期丢包避免TCP全局同步。引用[2]则区分了passive和active路由器,指出AQM机制能提前探测拥塞。引用[3]提到的ECN技术也值得注意,这和WRED都是主动队列管理方法。 需要明确几个概念:TCP拥塞避免是端系统(主机)的行为,属于传输层协议;而WRED是网络设备(路由器/交换机)的机制,属于网络层策略。虽然目标都是控制拥塞,但实施位置和方式完全不同。 相同点方面,两者都采用预防性措施:TCP通过拥塞窗口动态调整发送速率,WRED则在队列满前主动丢包。它们都避免了更严重的尾部丢弃(tail drop)问题。 不同点主要体现在:TCP是端到端方案,依赖主机实现;WRED是网络中间设备方案。TCP通过速率控制预防拥塞,WRED通过队列管理预防拥塞。此外,TCP的丢包是拥塞结果,而WRED的丢包是拥塞信号。 用户可能还想知道实际部署中的协作关系:当WRED主动丢包时,TCP接收方会通过重复ACK触发快速重传,发送方随即启动拥塞避免算法。这种跨层协作正是互联网拥塞控制的核心智慧。 考虑到用户研究深度,可以补充说明:现代数据中心网络中,WRED常与ECN结合使用,路由器不再丢包而是打标记,TCP主机收到ECN标记后会主动降速,实现更精细的拥塞控制。不过这是进阶内容了。 </think> TCP拥塞避免与WRED的相同点和不同点总结如下(依据文献综合分析): --- ### **相同点** 1. **核心目标一致** 两者均致力于**预防网络拥塞**而非被动响应: - TCP拥塞避免:通过**动态调整发送窗口**(如AIMD算法),探测并维持网络可用带宽的上限[^2]。 - WRED:在路由器队列**满载前随机丢弃数据包**,强制TCP流提前降速,避免缓冲区溢出[^1]。 2. **均避免全局同步现象** - TCP拥塞避免的**线性增长阶段**(Additive Increase)使不同流错开拥塞窗口峰值。 - WRED通过**随机丢包**打破TCP流的同步降速周期,防止集体重传风暴[^1][^2]。 3. **依赖反馈机制** - TCP依赖**丢包或ECN标记**作为拥塞信号[^3]; - WRED直接生成丢包信号(或触发ECN标记),驱动TCP调整速率[^1][^3]。 --- ### **不同点** | **维度** | **TCP拥塞避免** | **WRED** | |-------------------|------------------------------------------|----------------------------------------| | **实施位置** | 端系统(主机TCP协议栈) | 网络设备(路由器/交换机队列管理) | | **作用层级** | 传输层(端到端) | 网络层(逐跳) | | **核心机制** | 窗口调节(如`cwnd = cwnd + 1/cwnd`) | 概率丢包(基于队列长度和优先级权重) | | **控制对象** | 单条TCP流的发送速率 | 所有经过路由器的流量 | | **拥塞判定依据** | 超时重传或重复ACK | 实时监测队列长度阈值 | | **响应延迟** | RTT级延迟(需等待反馈) | 即时响应(队列超阈即动作) | | **资源分配策略** | 无显式公平性保证(依赖流间竞争) | 支持权重分配(如DSCP优先级差异化丢包) | --- ### **协作关系示意图** ```mermaid graph LR A[TCP发送端] -- 数据包 --> B[路由器队列] B -- WRED监测队列 --> C{队列长度≥阈值?} C -- 是 --> D[随机丢弃/ECN标记] C -- 否 --> E[正常转发] D --> F[TCP接收端检测丢包/ECN] F --> G[反馈拥塞信号] G --> A[TCP拥塞避免算法调整窗口] ``` > 📌 **关键协作点**:WRED的主动丢包(或ECN标记)是**触发TCP拥塞避免机制**的关键信号,两者形成跨层协同的拥塞控制闭环[^1][^3]。 --- ### **应用场景差异** - **TCP拥塞避免**: 必需部署于所有支持TCP的设备(如服务器、终端),是互联网流量的**基础控制层**。 - **WRED**: 主要用于**高负载网络节点**(如核心路由器),需硬件支持队列管理功能,常见于数据中心或运营商网络[^1][^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值