TCP/IP协议十八:通俗易懂说网络-滑动窗口机制

  • 1. 背景:
  • 1.1 背景
  • 1.2 数据分片 MSS
  • 2. 定义
  • 2.1 窗口大小
  • 2.2 滑动窗口机制-例子说明
  • 3. 作用
  • 4. 分类
  • 4.1 1比特滑动窗口/停等协议
  • 4.2 后退n协议
  • 4.3 选择重传协议
  • 5. 参考


1. 背景:

1.1 背景

在网络传输过程中,如果发送方发送数据包的速度大于接收方接收的速度,这样会导致网络拥塞。
所以,为了控制发送方的发送速度,提高网络传输效率,产生了滑动窗口机制。

1.2 数据分片 MSS

数据从主机传送到另一个主机往往要经过路由器、网关等设备。这些设备都要对经过的数据进行处理。由于这些设备处理数据有一定的限制,不能处理超过额定字节的数据,所以发送的时候需要确定发送数据包的最大字节数。

这个最大字节数被称为最大消息长度(Maximum Segment Size,MSS)。

当要发送的数据超过该值,就需要将数据分为多个包,依次发送。该操作被称为数据分片。

MSS 是 TCP 数据包每次能够传输的最大数据量。**通常,最大值为 1460 字节。**如果发送的数据包大小大于 MSS 值,数据包将会被分片传输。

2. 定义

滑动窗口机制/协议指的是:
在任意时刻,发送方和接收方都维持了一个允许发送/接收的帧序号,称为滑动窗口。
发送方称为发送窗口,接收方称为接收窗口。
这种机制称为滑动窗口机制/协议。

2.1 窗口大小

窗口大小指的是可以发送数据包的最大数量。

2.2 滑动窗口机制-例子说明

窗口就通过滑动的方式,向后移动,确保下一次发送仍然可以发送窗口大小的数据包。这样的发送方式被称为滑动窗口机制。

例子:设置窗口大小为 3,滑动窗口机制原理如图所示。

SmartRefreshLayout NestedScrollView 滑动冲突 mss和滑动窗口_TCP/IP

上图中,每 1000 个字节表示一个数据包。发送端同时发送了 3 个数据包(2001-5000),接收端响应的确认应答包为“下一个发送4001”,表示接收端成功响应了前两个数据包,没有响应最后一个数据包。此时,最后一个数据包要保留在窗口中。

由于窗口大小为 3,发送端除了最后一个包以外,还可以继续发送下两个数据包(5001-6000 和 6001-7000)。窗口滑动到 7001 处。

例子来源:
http://c.biancheng.net/view/6427.html

3. 作用

TCP通过它来进行流量控制。

4. 分类

滑动窗口协议根据发送方发送窗口的大小分为:1比特滑动窗口/停等协议、后退n协议及选择重传三种协议。

4.1 1比特滑动窗口/停等协议

定义: 发送窗口=1,接收窗口=1。
1比特滑动窗口又称为停等协议(stop-and-wait)。
特点: 该协议规定:发送方每发送一帧就要停下来等待对方接收并确认返回后才能继续发送下一帧。
缺点: 传输效率低。

4.2 后退n协议

定义: 发送窗口>1,接收窗口=1。
特点: 发送在发完一帧后,不停下来等待应答,而是连续发送若干个数据桢,即使在连续发送过程中收到了接收方的应答帧,也可以继续发送。且发送每发送完一个数据桢都要设置一个超时定时器。只要在所设置的超时时间内仍然没有确认帧,就要重新发送。
缺点: 接收方若发现错误就不再接收后续的帧,即使接收到正确的帧,这显然是一种浪费。

4.3 选择重传协议

定义: 发送窗口>1,接收窗口>1。
特点: 在数据传输过程中,若接收方收到了错误帧,此时不会停止接收后续的帧,而是将后续的帧保存在一个缓冲区中,同时要求发送方立即重新发送出错的帧。一旦收到重新传过来的帧,就可以将缓冲区的帧按照正确的顺序进行处理。
优点: 减少浪费。
缺点: 接收的顺序可能不是发送的顺序,因此需要进行重新排序处理。