通俗易懂的TCP拥塞控制详解_xisi克利夫的博客-程序员宅基地

接收端窗口 rwnd( receive window):接收端根据其目前接收缓存大小所许诺的最新的窗口值,反映了接收端的容量。
拥塞窗口 cwnd (congestion window):发送端根据自己估计的网络拥塞程度而设置的窗口值,反映了网络的当前容量。
发送窗口 swnd(send window):略

四个算法:慢启动,拥塞避免,快重传,快恢复

1.慢启动
初始:设置cwnd = 1
在每收到一个对新的报文段的确认后,cwnd加倍,即1,2,4,8…
直到cwnd达到阈值ssthresh(slow start threshhold)

2.拥塞避免
当 cwnd < ssthresh 时,使用慢开始算法
当 cwnd >= 时,使用拥塞避免算法

ssthresh = max( 2 , swnd / 2 ) ;
cwnd = 1 ;

无论在慢启动还是在拥塞避免,只要发送方判断网络出现拥塞(根据是没有按时收到确认),就要把慢启动门限ssthresh设置为出现拥塞时的发送窗口的一半(但不能小于2)。然后把拥塞窗口cwnd设置为1,执行慢启算法。

3.快重传
首先要求接收方每收到一个失序报文段后立即发送重复确认。
发送方只要重复收到三个重复确认就应立即重传对方尚未收到的报文。
如下图,发送方收到连续3个对 M 2 M_2 M2的重复确认立即重传 M 3 M_3 M3.
在这里插入图片描述
快重传并非取消重传计数器,而是在某些情况下可更早地重传丢失的报文段。

4.快恢复
1)当发送端收到连续3个重复确认时,就执行“乘法减小”算法,把慢启动门限ssthresh设置为当前拥塞窗口 cwnd 的一半。但接下来不执行慢启动算法。
2)接下来不执行慢启动算法,即cwnd不设置为1,而是将慢启动门限ssthresh设置为当前拥塞窗口 cwnd 的一半。然后开始执行拥塞避免算法(“加法增大”),使得拥塞窗口缓慢线性的增大。
如以cwnd = ssthresh = 4 为基准,如果一次4个没问题,那就一次5个、6个,线性增长直到接收方的极限。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/li1194094543/article/details/107304684

智能推荐

《Java虚拟机原理图解》 1.1、class文件基本组织结构_励志成为架构师的菜鸟程序员的博客-程序员宅基地

作为Java程序猿,我们知道,我们写好的.java 源代码,最后会被Java编译器编译成后缀为.class的文件,该类型的文件是由字节组成的文件,又叫字节码文件。那么,class字节码文件里面到底是有什么呢?它又是怎样组织的呢?让我们先来大概了解一下他的组成结构吧。NO1. 魔数(magic)      所有的由Java编译器编译而成的class文件的前4个字节都是“0xCAF

1057. 数零壹(20)_-初心不负-的博客-程序员宅基地

给定一串长度不超过105的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0、多少1。例如给定字符串“PAT (Basic)”,其字母序号之和为:16+1+20+2+1+19+9+3=71,而71的二进制是1000111,即有3个0、4个1。输入格式:输入在一行中给出长度不超过105、以回车结束的字符串。输出格

点阵字库在JAVA中的实现_weixin_30333885的博客-程序员宅基地

前言:为什么要使用点阵字库在某些场合,系统自带的字库并不能令人满意,或者,在你需要特别的字体时,你希望能附带上该字库。 那为什么又需要点阵字库呢?因为在使用较小的字体的时候,点阵字库能更清晰,同时,由于点阵字库并不包含路径等信息,因此,字库文件的大小也很小,便于携带。 如何生成点阵字库 在此,我并没有打算在此文中说明如何生成点阵字库,其实有很多现成的点阵字库可以选择,当然,目前...

二叉树DFS和BFS遍历_X_Ming_H的博客-程序员宅基地

https://blog.csdn.net/Gene1994/article/details/85097507public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}BFS广度优先遍历://使用Queue实现BFSpublic voi...

1 安快_fgh431的博客-程序员宅基地

文章目录1.1什么是 Android1.1.1平台特性1.1.2平台架构1. Applications(应用程序)2. Application Framework(应用程序框架)3. Libraries(库)4 . Android Runtime5 Linux Kernel( Linux内核)移动开发领城Android最迅猛,几年就撼动诺基亚5 symbian的霸主通过其在线市场,程序员不仅能向全世界贡献自已程序,且可通过销售获得不菲的收入本章:如何搭建 Android开

青岛旅游_weixin_33860147的博客-程序员宅基地

同学来青岛的一些景点介绍   下了火车,往南走一条街就到海边了 离着栈桥挺近的,先上地图   走过去大概五六百米吧,其实就是头上有个小亭子(以前是不开不让进的,最近好像是能进了,里面无非卖点小纪念品啥的),不过算是历史标志建筑了吧   然后就顺着海边往东边说吧 继续看地图   红色标记是刚才的 栈桥 绿色标记是 海军博物馆 门票收费好像是70来着,不知道现在又...

随便推点

「工具」Aquarelo - 来自意大利的色阶管理工具_weixin_34232617的博客-程序员宅基地

Aquarelo是一款小而美的色阶管理工具,由意大利团队开发,包含三个核心功能,可用于色彩管理、色彩搭配等场景。## 相关参数* 操作系统:macOS* 工具官网:[Aquarelo for Mac](https://www.cusaro.it/aquarelo/)* 免费试用:https://pan.baidu.com/s/1zf9-W5o6UbSRW8xVgnNLYA* 更...

计算机仿真保密,量子密钥分配方案的安全性研究及其计算机仿真_Vigorous Cooler的博客-程序员宅基地

摘要:一直以来,保密通信都享有特殊的重要性.当今社会对于保密信息的安全传输有着广泛的需求,商业贸易,网络通信等都需要防范窃听者的侵入.同时,计算机的飞速发展使破译手段越来越高.现代密码学认为,任何加密体系的加密和解密算法都可以公开,其安全性在于密钥的保密性.由于窃听的存在,通信双方在经典传输信道上建立绝对安全的密钥是不可能的.然而,基于量子物理原理的量子密码学已被证明是保密通信中密钥安全分配的有效...

从零开始如何自己写一个Demo-湿温度【Arduino系列】_智能实验室的博客-程序员宅基地_写一个demo

该库仅支持烧录了通用固件的涂鸦 WiFi+BLE 、WiFi模组,在Arduino UNO板子上验证通过。注意:Arduino 中的 默认Serial 串口已被Tuya mcu sdk 接管,请不要对默认Serial(引脚 0 ,1)做任何操作。一、demo 介绍涂鸦模组和Arduino板连接时会干扰到对Arduino板的烧录,烧录时应断开Arduino板与涂鸦通信板或涂鸦通信板的连接。例程烧录成功后将Arduino板上串口(Serial) 与 涂鸦模组上的 RXD 和TXD连接起来,然...

《笨办法学Python》——习题5_juneLembert的博客-程序员宅基地

文章目录基本习题1. 完成基本习题加分习题1. 修改所有的变量名字,把它们前面的“my_”去掉。确认将每一个地方的都改掉,不只是你使用“=”赋值过的地方2. 试着使用更多的格式化字符。例如 %r 就是是非常有用的一个,它的含义是“不管什么都打印出来”3. 在网上搜索所有的 Python 格式化字符4. 试着使用变量将英寸和磅转换成厘米和千克。不要直接键入答案。使用 Python 的计算功能来完成...

Varnish的配置语言vcl及其内置变量介绍_weixin_34291004的博客-程序员宅基地

一、Varnish的配置语言VCLVarnish的所有配置都是通过VCL(varnish configure language)来配置的。它是一种基于“域”(domain specific)的简单编程语言,它支持有限的算术运算和逻辑运算操作、允许使用正则表达式进行字符串匹配、允许用户使用set自定义变量、支持if判断语句,也有内置的函数和变量等。使用VCL编写的缓存策略通常保...

JBPM中JPDL深入解析_wsh900221的博客-程序员宅基地

流程引擎需要根据流程定义进行业务流程的流转,所以提供一种简单直观、易用方便、便于扩展的流程定义方式就显得直观重要了。JBPM提供了自己的一套流程定义语言JPDL,通过对JPDL的分析解决,我们可以了解其架构设计和运行机制,以便根据业务需求进行灵活的扩展。       JBPM中JPDL架构设计1.      定义相关的xsd文件(比如jpdl-4.0.xsd、jpdl-4.2.xsd、

推荐文章

热门文章

相关标签