拥塞避免

TCP Internet Congestion Collapse In the late 80s, the Internet suffered a congestion collapse 流控与阻塞控制 拥塞控制 TCP流量控制 TCP流控 接收方: 明确通知发送方空闲缓存空间 TCP报文段中的接收窗口域 发送方: 保持已发送但未确认的数据少于当前的接收窗口 滑动流量控制: 发送方 拥塞问题 拥塞控制的基本方法 通信量整形法。把主机向网络输出数据的速率调整到一个固定的平均速率,以使路由器能够以现有资源平稳地处理它。通信量整形法的两个代表是漏桶算法(leaky bucket algorithm)和令牌桶算法(token bucket algorithm)。 拥塞预警法。其原理是:路由器建立一种拥塞预警机制,当轻度拥塞发生时,通知源主机减少发送数据的数量,避免拥塞加剧。ICMP(internet control message protocol)协议的源抑制报文就采用拥塞预警原理。 TCP implements host-based, feedback-based, window-based congestion control. 基于路由器的主动队列管理(AQM)。 ICMP Choke Packets 图 基于数据报服务的拥塞控制策略 拥塞: A Close-up View 轻度拥塞 – 该点后 吞吐量增长缓慢 延迟增加加快 完全拥塞 – 该点后 吞吐量快速下降直至零 (拥塞崩溃) 无穷大延迟 对于M/M/1排队模型 延时 = 1/(1 – 利用率) 拥塞控制与拥塞避免 阻塞控制的目标 控制在悬崖( cliff )的左边 阻塞避免的目标 控制在拐点( knee )的左边 悬崖的右边: 由于拥塞导致崩溃 拥塞检测 发生报文丢失时表示发生了拥塞,TCP 发送方通过以下方式检测丢包 传输定时器超时 收到重复的ACK(至少三个) ECN (显式拥塞通知) Controlling Congestion Reduce window ? less packets in the network Increase window ? more packets in the network Idea: Concept of a congestion window – window is smaller when congestion is larger and vice versa TCP 拥塞控制 TCP 拥塞控制 慢启动 拥塞避免 目标: 通过慢慢增加拥塞窗口的大小,保持工作在完全拥塞点(cliff)的左边: 如何实现? (AIMD) Additive increase: 从一个较粗的估计值 (ssthresh)开始, 缓慢增加cwnd以探测额外的可用带宽 Multicative decrease: 一旦发现丢失报文(拥塞发生)立即将拥塞窗口的大小减半. TCP拥塞控制总结:伪码 Initially: cwnd = 1; ssthresh = infinite; New ack received: if (cwnd ssthresh) /* Slow Start*/ cwnd = cwnd + +; else /* Congestion Avoidance */ cwnd = cwnd + 1; Timeout: (loss detection) /* Multiplicative decrease */ ssthresh = win/2; cwnd = 1; 慢开始和拥塞避免算法的实现举例 慢启动始和拥塞避免算法的实现举例 慢启动和拥塞避免算法的实现举例 慢启动和拥塞避免算法的实现举例 慢启动和拥塞避免算法的实现举例 慢启动和拥塞避免算法的实现举例 慢启动和拥塞避免算法的实现举例 慢启动和拥塞避免算法的实现举例 慢启动和拥塞避免算法的实现举例 慢启动和拥塞避免算法的实现举例 拥塞响应 TCP Reno 快重传举例 快速恢复 快速重传后把cwnd 设为 ssthresh/2 i.e., 不把 cwnd 重置1 但当 RTO (重传超时)时还是要把 cwnd 置 1 快速重传与快速恢复 三个重复的ACK后,开始快速重传 避免了代价高昂的超时 不必再次慢启动 在稳定状态, cwnd 在最优窗口大小附近振荡 重新组包(repacketization) New Reno SACK SACK 也关注一个窗口内多个报文的丢失,它使用“选择性重复”(selective repeat)策略。 SACK TCP通过在TCP报文段头部增加S

文档评论(0)

1亿VIP精品文档

相关文档