TCP的流控、滑动窗口和拥塞窗口的简单介绍

        嘿嘿,感觉会有人区别不开,所以就开了这一篇博客。当然这几个知识点网上介绍的非常多,我就不重复详细介绍了,可以看看下面两篇推荐的博客。

TCP滑动窗口_我要出家当道士-CSDN博客

滑动窗口与拥塞窗口有什么区别?_我要出家当道士-CSDN博客_滑动窗口和拥塞窗口的区别

TCP拥塞控制简析_我要出家当道士-CSDN博客

         接下来长话短说。

        大家应该都知道TCP是一个可靠的传输协议,它有个ACK确认机制,每个packet都要确认,如果接收端没有收到ACK,会重发。如果发一个包确认一个包,这样效率太低了,就像你吃米饭,一个米粒一个米粒的吃,令人捉急;所以TCP引入了滑动窗口,可以一次性的发送一个滑动窗口的数据包,具体的滑动机制去上面的链接看看吧。

        引入滑动窗口无疑增加了TCP的吞吐量,这时候还需要引入流控,就像吃饭,吃的太多咽不下去,还会撒的到处都是。流控其实很简单,就是根据接收端的实际接收处理能力(接收端缓冲区大小限制)确定发送端窗口的大小。TCP首部中,专门有一个字段(windows,最大为65535字节)用来通知窗口大小。接收主机将自己可以接收的缓冲区大小放入这个字段中通知给发送端。这个字段的值越大,说明网络的吞吐量越高。这个窗口的值是会动态调整的。

        拥塞窗口考虑的是整个网络环境,这个举个不恰当的例子,就像吃席,大家都想多吃些,但饭菜就那么多,一次性吃的太多有人生气掀桌子,大家都吃不了,所以只能不断的试探一点一点的多吃些。传统的拥塞控制算法如下图所示。慢开始是指数型增长,到达ssthresh阈值后,变线性增长。如果发生重传则重新开始(ssthresh = cwnd / 2 ; cwnd = 1;)。TCP的流控、滑动窗口和拥塞窗口的简单介绍_第1张图片

         如果加上快速重传,则是下图这样。区别在于如果网络中个别包丢失,可能并不是网络发生阻塞,这时候直接将cwnd = 1,十分影响效率的。我们知道ACK是发生乱序之前的未接收的下一个数据包序列号,如果发生乱序,会重复发送下一个未正常接收的数据包序列号。快速重传即如果连续三次收到重复确认,则立即重传该包,同时稍微降低cwnd(例如降一半),这样做的好处是,避免触发超时重传机制,提高效率。

TCP的流控、滑动窗口和拥塞窗口的简单介绍_第2张图片

你可能感兴趣的:(计算机网络,tcp/ip,网络协议,tcp流控,拥塞,滑动窗口)