当前位置:首页 > 公众号精选 > 小林coding
[导读]大家好,我是小林。之前图解过TCP的滑动窗口和流量控制的工作方式:图解TCP重传、滑动窗口、流量控制、拥塞控制当时花费了好几个星期肝了这篇文章,因为为了方便大家理解他两的工作方式,以及一些异常场景的分析,画了很多变化的图。还没看过的同学,可以去看看,可以说把每一个阶段的变化都解释...

大家好,我是小林。之前图解过 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 重传、滑动窗口、流量控制、拥塞控制

好了,这次就说到这啦,下次见~

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭