tcp窗口机制

窗口机制原理:
比如主机a给主机b发送数据,为了更高的通话效率,主机a一次给主机b发了三次数据。(主机a给主机b发送了一个大的数据);主机b收到数据以后限制于他的窗口大小只能处理其中的一部分数据那么主机b就会向主机a回复一个确认值三个数据都收到了,但是他的窗口大小只显示处理了2个数据,那么主机a收到以后就会做一个发送处理,将数据调成发送的量为2个进行发送,这样一来就解决了发送多个而处理不完的现象。
tcp中窗口的分类有以下两种

  • 固定窗口
  • 滑动窗口
    下面现将固定窗口:

在这里插入图片描述

我们假设这个固定窗口的大小为1,也就是每次只能发送一个数据,只有接收方对这个数据进行了确认后才能发送第二个数据。在图中我们可以看到,发送方每发送一个数据接收方就要给发送方一个ACK对这个数据进行确认。只有接收了这个确认数据以后发送方才能传输下个数据。

存在的问题:如果窗口过小,当传输比较大的数据的时候需要不停的对数据进行确认,这个时候就会造成很大的延迟。

                如果窗口过大,我们假设发送方一次发送100个数据,但接收方只能处理50个数据,这样每次都只对这50个数据进行确认。发送方下一次还是发送100个数据,但接受方还是只能处理50个数据。这样就避免了不必要的数据来拥塞我们的链路。

因此,我们引入了滑动窗口

二、滑动窗口(以字节为单位)

1.概述
滑动窗口通俗来讲就是一种流量控制技术。
它本质上是描述接收方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据,如果发送方收到接收方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接收方发送窗口大小不为0的数据报的到来
第一次发送数据这个时候的窗口大小是根据链路带宽的大小来决定的。

假设这时候的窗口是3.这个时候接收方收到数据以后会对数据进行确认告诉哦发送方我下次希望收到的数据是多少。

接收方发送的ACK = 3(这是对发送方发送序列2的回答确认,下一次接收方期望接收到的是3序列信号),这个时候发送方收到这个数据以后就知道我第一次发送的3个数据对方只收到了两个,就知道第三个数据对方没有收到,下次返送的时候就从第3个数据开始发。这时候窗口大小就变为了2.

猜你喜欢

转载自blog.csdn.net/qq_43004728/article/details/84560900