网络协议系列之七:TCP拥塞控制

简介:

拥塞控制是TCP传输中很重要的一环,TCP拥塞控制使用一个拥塞窗口以及拥塞策略来进行拥塞控制。在前面的流量控制中提到发送端的发送窗口取决于接收窗口,实际上,发送方的窗口大小是接收窗口与拥塞窗口中的较小值。拥塞窗口的大小又取决于网络的拥塞状况。而具体确定拥塞窗口大小则需要拥塞策略来决定。

拥塞策略包括慢开始拥塞避免拥塞检测。TCP的一般是从一个比较小的传输速率开始,然后迅速增大到阈值,到达阈值后以一个比较小的速率继续传输,如果传输过程中遇到了网络拥塞就执行拥塞避免或者拥塞检测算法传输数据,直到网络恢复正常。

慢开始算法
TCP从一个MSS(最大报文长度)报文开始,每次收到接收端的一个ACK后,就在原来MSS的基础上增加一个MSS(拥塞窗口cwnd变为2),这样当返回一个ACK的时候变为2个MSS长度的报文了,这两个报文发送出去后如果再收到一个ACK,每个MSS报文又变为2个MSS的报文(拥塞窗口cwnd变为4)。所以经过两次确认后,发送端可发送的报文为4个。以此类推,可以发现,可发送报文的长度是按照指数增长的。

慢开始算法,指数增大

拥塞避免
拥塞避免是一种按照加法增大的算法,如果一直采用慢开始算法,那么很快就会到达阈值,为了在网络发生拥塞之前避免它,可以采用加法增大的算法,即每次cwnd只在原来的基础增加1,直到网络发生拥塞为止。

拥塞避免算法,加法增大

拥塞检测
既然叫检测,那么就是要让发送方知道网络发生了拥塞,那么如何让发送方知道网络发生了拥塞呢?TCP中使用重传机制让发送方知道网络发生了拥塞。而在TCP中发生重传有两种情况:RTO超时或者发送方连续收到三个重复的ACK确认。不管哪种情况,在拥塞检测算法中,当传输速率到达ssthresh阈值的时候,都会把阈值较小为原来的一半,所以也叫乘法减小算法。
对于RTO超时,可以认为有比较大可能网络发生了拥塞,所以早RTO超时的情况下,TCP采用的策略如下:

  1. ssthresh减小为原来的一半
  2. 把cwnd重新设为一个报文段大小
  3. 执行慢开始算法

对于收到三次重复的ACK确认,TCP认为发生拥塞的可能性不是特别大,于是采用如下策略:

  1. ssthresh减小为原来的一半
  2. 把cwnd的值设为ssthresh的值
  3. 执行拥塞避免算法

拥塞控制小结

由于刚开始不清楚网络的拥塞情况,所以会首先采用慢开始算法,开始阶段,窗口大小由1指数增大,直到窗口大小到达门限值。窗口大小到达门限值后,就开始执行拥塞避免算法,之后窗口值按照线性规律增大,直到出现超时或者到达最大的窗口大小值。这个时候,会开始执行拥塞拥塞算法,也就是把门限值变为窗口大小的一半,之后继续执行拥塞避免算法,窗口大小按照线性规律增大。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
移动开发 网络协议 安全
网络面试题:什么是 TCP/IP?
网络面试题:什么是 TCP/IP?
43 0
网络面试题:什么是 TCP/IP?
|
1月前
|
监控 负载均衡 网络协议
TCP重传与超时机制:解锁网络性能之秘
TCP重传与超时机制:解锁网络性能之秘
67 0
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
18天前
|
网络协议 安全 网络性能优化
|
28天前
|
缓存 网络协议 数据库连接
【底层服务/编程功底系列】「网络通信体系」深入探索和分析TCP协议的运输连接管理的核心原理和技术要点
【底层服务/编程功底系列】「网络通信体系」深入探索和分析TCP协议的运输连接管理的核心原理和技术要点
24 0
|
1月前
|
网络协议 算法 Linux
探索TCP状态机之旅:发现网络连接的生命周期与神秘魅力
探索TCP状态机之旅:发现网络连接的生命周期与神秘魅力
69 0
|
1月前
|
网络协议 网络性能优化
网络面试题:TCP和UDP的区别
网络面试题:TCP和UDP的区别
25 0
|
1月前
|
网络协议 Python
Python网络编程实现TCP和UDP连接
Python网络编程实现TCP和UDP连接
30 0
|
1月前
|
缓存 网络协议 安全
计算机网络:传输层(TCP详解)
计算机网络:传输层(TCP详解)
|
1月前
|
网络协议 Java
Java基于TCP的网络编程
Java基于TCP的网络编程