大家好,我是小林。 之前图解过TCP的滑动窗口和流量控制的工作方式:图解TCP重传、滑动窗口、流量控制、拥塞控制 当时花费了好几个星期肝了这篇文章,因为为了方便大家理解他两的工作方式,以及一些异常场景的分析,画了很多变化的图。 还没看过的同学,可以去看看,可以说把每一个阶段的变化都解释的很清楚了。 但是,不管怎么样图解,它始终不会动呀,动起来的话,大家学起来就会更加深刻了。 我最近刚好发现两个网站。 可以以动图的方式来学习TCP的滑动窗口和流量控制工作方式。滑动窗口 滑动窗口动图体验的网站地址: https:www2。tkn。tuberlin。deteachingrnanimationsgbnsr 下图是我从网站录制的一张动图: 每个长方块代表一个数据,上面的是发送方,下面的是接收方,长方块的不同的颜色代表着不同的意义,而且发送发和接收方滑动窗口的也是不同的。 先来说说,发送方的长方块颜色: 黄色:代表已发送并且已被确认的数据;蓝色:代表已发送但未被确认或者还未发送的数据;灰色背景:代表滑动窗口的大小,比如这个动图滑动窗口大小是5。紫色圈圈:代表超时重传时间; 再来说说,接收方的长方块颜色: 深蓝色:代表数据已经被接收;白色:代表还未接收到的数据;绿色:代表对发送方数据的ack确认包; 这个网站,可以自行设置一些参数。 比如,可以设置滑动窗口的大小、超时重传时间、发送速率、确认模式(选择性确认模式or普通确认模式)等等。 我这里设置几个参数,给大家看看效果。 我把超时重传时间时间缩短,并且确认模式是普通确认模式,动图效果如下: 可以看到,这种确认模式在发生超时重传的时候,会把发送窗口内已发送的数据都会重传一遍。 接着,我把确认模式改成选择性确认。其动图效果如下: 可以看到,改用选择性确认的方式,只会重传丢失的那一个数据。流量控制 流量控制动图体验的网站地址: https:www2。tkn。tuberlin。deteachingrnanimationsflow 这个网站的可以设置参数就比较少,理解起来也很容易。 我这里简单介绍下这些参数:filesize,发送的文件总大小;buffersize,发送方和接收方的内核缓冲区的大小;propagationtime,发送方和接收方之间的传播时间。 下图是我从网站录制的一张动图: 可以看到,发送方和接收方共有两个缓冲区,一个是buffer,指的是内核缓冲区,另外一个是application,指的是应用层的缓冲区。 对于发送发来说,当要发送数据的时候,需要从application拷贝数据到buffer,而对于接收方来说,当接收到数据的时候,会先缓存到buffer,然后再由应用程序从buffer读取数据。 当接收方的application来不及从buffer读取数据,而导致buffer堆积满了,这时接收方就会给发送方通报一个接收窗口为0的报文,表示我已经不能再接收数据啦,比如下面这个情况。 大家可以去体验这两个网站,我感觉做的还是挺不错到,对于学习TCP滑动窗口和流量控制会有很大的帮助。 当然,在使用之前,最好自己要学一点理论知识,看我之前的这篇就够了:图解TCP重传、滑动窗口、流量控制、拥塞控制原文链接:https:mp。weixin。qq。comsWG1Is0HMAHYMgRvJQpd3KA 原作者:小林coding