一文了解滑动窗口协议

网络 通信技术
滑动窗口协议可以提高数据传输的效率和可靠性,同时充分利用网络带宽。它被广泛应用于各种网络通信中,如TCP协议就是基于滑动窗口协议实现的。

昨天我们简单说了这个 HTTP 和 HTTPS 为什么说简单呢?因为就是基础的 HTTP 的协议的讲解以及 HTTPS 的安全性等,这就有读者说,为什么不说点进阶的内容呢。

停止等待协议

我们在了解滑动窗口协议之前,我们要先来了解一下什么是停止等待协议,停止等待协议又是怎么工作的呢?

停止等待协议(stop-and-wait)是最简单但也是最基础的数据链路层协议。很多有关协议的基本概念都可以从这个协议中学习到。

停止等待就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

简而言之就是,发送方发送数据包后,如果没有对方确认,那就一直等待,不再发送下一个数据包,而接受到确认之后,再继续发送数据包。

图片图片

这也就导致了停止等待协议的缺点尤为的明显,

  • 一次只能发送一个数据包效率低下。

这效率的低下都难以想象了,比如如果我们的带宽是100M 而这个停止等待协议每次都只发送一个数据包,这平白的浪费了带宽,别说现在有很多都是千兆以上的带宽了。

因为这个效率问题,导致了停止等待协议并不是很适用,所以就有了其他的协议出现,也就是我们接下来所要说的滑动窗口协议。

滑动窗口协议

那么什么是滑动窗口协议呢?

滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输,提高网络吞吐量。

在滑动协议中,发送方要维持一个发送窗口,随着数据的传输,这个窗口就需要不断的向前滑动,这也就与停止等待协议出现了不同,不同在那里呢?

区别就是他允许发送方在停止并且等待确认前,可以发送多个数据包,而不再像停止等待协议一样,每次发送就只是发送一个数据包了。这样的话,发送方也就不需要每发一个数据包就需要停下等待了。这就是他们之间最本质的却区别了。

这个时候就有读者疑问了,这时候到底会发送多少数据包呢?

这个数据包的多少,那就得取决一个参数了,而这个参数则被我们称之为窗口大小。

我们简单模拟一下这个滑动窗口协议下,数据不丢包的情况。

图片图片

上图中,窗口大小为4,我们的发送方有10个数据包要发送,也就是意味着,我们一次可以发送四个数据包,

图片图片

当发送发在发送第一个数据包的时候,这和个时候滑动窗口就已经开始运行了吗?确实是的,在我们发送第一个数据包的时候,滑动窗口就开始运行了,也就是说我们在接受到确认之前,可以发送窗口大小为4的量的数据包。

在3号数据包发送完成之后,0-3号的对应的确认消息也反馈给了发送方。

同时窗口开始陆续的向左边滑动,

图片图片

我们也可以从图中看出,区分了已发送,正在发送和等待发送的部分。

而滑动窗口协议的原理则可以看如下:

滑动窗口协议的主要原理是通过使用序列号来标识每个数据包,并使用确认号来确认接收到的数据包。发送方维护一个发送窗口,其中包含已发送但未收到确认的数据包。接收方维护一个接收窗口,其中包含已接收但未按顺序交付的数据包。

发送方在发送数据包时,将数据包的序列号添加到数据包中,并将其发送给接收方。接收方在接收到数据包后,将确认号添加到确认包中,并将其发送给发送方。发送方在收到确认包后,将发送窗口向前滑动,将已确认的数据包从发送窗口中移除,并继续发送下一个数据包。

如果发送方在一定时间内没有收到确认包,或者接收方在一定时间内没有收到正确的数据包,滑动窗口协议会触发超时重传机制,重新发送未确认或未正确接收的数据包。

滑动窗口协议可以提高数据传输的效率和可靠性,同时充分利用网络带宽。它被广泛应用于各种网络通信中,如TCP协议就是基于滑动窗口协议实现的。

滑动窗口协议需要注意的点

(1)发送方不必发送一个全窗口大小的数据。(2)来自接收方的一个报文段确认数据并把窗口向左边滑动,这是因为窗口的大小是相对于确认序号的。(3)窗口的大小可以减小,但是窗口的左边沿却不能够向右移动。(4)接收方在发送一个ACK前不必等待窗口被填满。

这个向右和向左,取决你理解图时的窗口移动方向,我习惯了从从右往左,你也可以理解为从左往右,理解都是一样的。

所以,你了解滑动窗口协议了么?

责任编辑:武晓燕 来源: Java极客技术
相关推荐

2022-02-25 07:34:36

MQTT协议RabbitMQ

2022-02-24 07:34:10

SSL协议加密

2021-07-12 12:03:32

EPaxos分布式协议流程

2021-07-08 12:32:58

2023-12-06 16:28:56

2022-02-20 09:56:28

TCPIP网络协议

2023-09-02 21:44:24

TCP/IP通信协议

2020-08-27 07:34:50

Zookeeper数据结构

2023-11-19 11:44:45

2023-11-20 08:18:49

Netty服务器

2023-04-26 15:43:24

容器编排容器编排工具

2022-06-08 08:11:56

威胁建模网络安全网络攻击

2022-11-11 19:09:13

架构

2023-11-06 08:16:19

APM系统运维

2024-02-01 11:57:31

this指针代码C++

2023-11-08 08:15:48

服务监控Zipkin

2024-01-19 11:53:29

文件系统操作系统存储

2023-10-27 08:15:45

2019-07-09 08:29:51

TCPIP协议

2022-05-16 10:49:28

网络协议数据
点赞
收藏

51CTO技术栈公众号