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