计算机网络原理——传输层TCP协议的十个重要特性之滑动窗口机制、拥塞控制和流量控制

滑动窗口和流量控制

  • 滑动窗口
    • 没有滑动窗口
    • 带滑动窗口
    • 滑动窗口下三种丢包情况
  • 拥塞控制
  • 流量控制
    • 总结

这三种机制是在可靠性的前提下,进一步的提高传输效率

滑动窗口

没有滑动窗口

传输过程,发一个收到一个,是串行过程,每次传输数据都要对应一个等待时间
传输N份数据就要等待N次应答时间
总的传输时间=N份数据传输时间+N份应答传输时间
在这里插入图片描述

带滑动窗口

滑动窗口是发送方的概念.接收方只有一一个接受缓冲区,没有"滑动窗口大小"这样的概念.
发送方的窗口大小太大,是可能导致问题的.但是这个事情不是由连接管理协商出来的而是靠拥塞控制+流量控制确定的

像上述一发一收的方式性能较低,那么我们一次发送多条数据,就可以大大的提高性能 (其实本质是将多个段的等待时间重叠在一起了)
滑动窗口是批量传输数据
总的传输时间=N份数据传输时间重叠成了1份时间,N份应答传输时间,重叠成了一份时间
在这里插入图片描述
每个窗口具体是怎么滑动工作的呢?
窗口只有一个,是一格一格往后滑的,每当数据进入到窗口里面就立刻被发送了
窗口:不等待ACK的情况下,批量发送的最大数据量,就叫“窗口大小"
滑动:窗口范围就是表示当前哪些数据在等待ACK,随着一个ACK到达就立刻发送下一个数据,等待的数据包的范围就在逐渐滑动

在这里插入图片描述

滑动窗口下三种丢包情况

1、数据包抵达,ACK丢了
在这里插入图片描述
比如上图的窗口大小就是6000,如果主机B一直收不到1001的ACK所以窗口就一直不动等待最后一个数据的ACK,直到最后收到了6001的ACK,窗口就会默认之前的数据都已经收到,然后发送方就会立刻传输6001-12001的数据,这就相当于一下子就往后话滑了好几步。
我们上面展示的是1-6000,就算最后6001这个数据的ACK丢了,那6001后面还有其他的数据可以参考,即使到了最后一个数据发完了,还有一个FIN作为接收响应

2、数据包丢了/主机B接收顺序反了
如果一直发送不出去,就会超时连接,重置连接。

如果数据包丢了就会进行重传,此处重传只是重传丢了的数据,其他数据不需要额外重传这种叫做"快速重传" (搭配滑动窗口下的超时重传)
在这里插入图片描述
如果中间两次丢包

滑动窗口是发送方的概念,接受缓冲区就是一一个固定大小的内存空间(空间大小是固定,可以通过内核的参数配置)如果接受缓冲区满了就不会继续传输了(流量控制机制)
在这里插入图片描述
如果是主机接收顺序反了,后发先至
在这里插入图片描述
拥塞控制和流量控制共同决定发送方的窗口大小的.

拥塞控制

拥塞控制是考虑网络传输路径上的拥堵程度,互联网类似一个交通网,可能某个环节就会拥堵。

就算接收方处理能力很强,但是如果传输路径.上拥堵了,此时发送方发的快也没用,接收方的处理能力,是好衡量. (接受缓冲区空余空间大小)但是传输路径太复杂,不好衡量。

拥塞控制由于不好衡量传输路径的拥堵情况只能通过"反复试探"的方式,逐渐试探出应该用多大的窗口大小。

在这里插入图片描述

为啥要动态变化?
网络的拥堵情况也是瞬息万变的.要随时根据网络的实际情况进行动态调整.
为啥曲线设定成这样,都是从数学角度求出的一个最优解

流量控制

窗口大小不能无限大,如果窗口过大,传输的速率快,那样接收方就可能处理不过来,接收方收到数据后是需要一定的时间处理的。

流量控制就是根据接收方的处理能力(通过接收缓冲区的“剩余空间大小”来决定发送方的速率)来反向制衡发送方的发送速率(窗口大小)
在这里插入图片描述
流量控制可以用生产者消费者模型
在这里插入图片描述

在这里插入图片描述
如果中间有缺漏
在这里插入图片描述

总结

流量控制本质上,是根据接收方的处理能力来制约发送方的发送速率,根据接受缓冲区的剩余空间大小,来制约发送方的滑动窗口大小,通过TCP报头中的"窗口大小字段"来反映给发送方的。流量控制会影响到发送方的窗口大小,但是不是决定因素

可以通过生产者消费者模型理解,发送方是生产者,接收方的应用程序是消费者.
滑动窗口大小就和消费者应用程序的消费速度也是有关系的,如果剩余空间大,说明消费速度就挺快的,发送速率就可以高一些,反之就发送速率低一些就行了.
如果窗口大小为0,发送方会暂停发送,但是会定时发送一个探测报文. 如果发送方有空间了,就会立刻继续传输.

你可能感兴趣的:(计算机网络原理,网络,java,MODBUS&TCP)