网络协议系列之七: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指数增大,直到窗口大小到达门限值。窗口大小到达门限值后,就开始执行拥塞避免算法,之后窗口值按照线性规律增大,直到出现超时或者到达最大的窗口大小值。这个时候,会开始执行拥塞拥塞算法,也就是把门限值变为窗口大小的一半,之后继续执行拥塞避免算法,窗口大小按照线性规律增大。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7天前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
29 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
1天前
|
XML JSON 网络协议
【网络原理】——拥塞控制,延时/捎带应答,面向字节流,异常情况
拥塞控制,延时应答,捎带应答,面向字节流(粘包问题),异常情况(心跳包)
|
3天前
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
28天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
57 3
|
2月前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
72 10
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
2月前
|
域名解析 缓存 网络协议
TCP传输层详解(计算机网络复习)
本文详细解释了TCP/IP协议族的分层模型、各层的功能、TCP报文的格式以及TCP连接建立的三次握手和断开的四次挥手过程。
1024 2
TCP传输层详解(计算机网络复习)
|
2月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
72 2
|
2月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
77 1
|
2月前
|
机器学习/深度学习 边缘计算 5G

热门文章

最新文章