TCP 的滑动窗口机制 TCP 这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议。既然是一个可靠的传输协议就需要对数据进行确认。TCP 协议里窗口机制有2 种一种是固定的窗口大小。一种是滑动的窗口。这个窗口大小就是我们一次传输几个数据。 我们可以看下面一张图来分析一下固定窗口大小有什么问题。 这里我们可以看到假设窗口的大小是1,也是就每次只能发送一个数据只有接受方对这个数据进行确认了以后才能发送第 2 个数据。我们可以看到发送方每发送一个数据接受方就要给发送方一个ACK 对这个数据进行确认。只有接受到了这个确认数据以后发送方才能传输下个数据。 这样我们考虑一下如果说窗口过小,那么当传输比较大的数据的时候需要不停的对数据进行确认,这个时候就会造成很大的延迟。如果说窗口的大小定义的过大。我们假设发送方一次发送 100 个数据。但是接收方只能处理 50 个数据。这样每次都会只对这50 个数据进行确认。发送方下一次还是发送 100 个数据,但是接受方还是只能处理 50 个数据。这样就避免了不必要的数据来拥塞我们的链路。所以我们就引入了滑动窗口机制,窗口的大小并不是固定的而是根据我们之间的链路的带宽的大小,这个时候链路是否拥护塞。接受方是否能处理这么多数据了。 我们看看滑动窗口是如何工作的。我们看下面几张图。 首先是第一次发送数据这个时候的窗口大小是根据链路带宽的大小来决定的。我们假设这个时候窗口的大小是3。这个时候接受方收到数据以后会对数据进行确认告诉发送方我下次希望手到的是数据是多少。这里我们看到接收方发送的ACK=3。这个时候发送方收到这个数据以后就知道我第一次发送的3 个数据对方只收到了 2 个。就知道第3 个数据对方没有收到。下次在发送的时候就从第3个数据开始发。这个时候窗口大小就变成了 2 。 这个时候发送方发送2 个数据。 看到接收方发送的ACK 是5 就表示他下一次希望收到的数据是5,发送方就知道我刚才发送的2 个数据对方收了这个时候开始发送第5 个数据。 这就是滑动窗口的工作机制,当链路变好了或者变差了这个窗口还会发生变话,并不是第一次协商好了以后就永远不变了。 滑动窗口协议 滑动窗口协议,是TCP 使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。 只有在接收窗口向前滑动时(与此同时...