本文主要是介绍网络协议 TCP 滑动窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网络协议 TCP 滑动窗口
- 1.滑动窗口机制的理解
- 2.滑动窗口的实现原理
- 2.1 为啥用滑窗
TCP是一种可靠的数据发送协议,但他的模式也使得大量的资源出现浪费,为了更好的利用硬件多核资源,同时又保证tcp发送的可靠性基础上,出现了滑窗机制,说白了就是将原本发送一条数据然后就等待对方确认,改为发送多条再等待确认。
1.滑动窗口机制的理解
滑动窗口机制中“窗口”是指发送端和接收端的缓存空间大小,“滑动”的意思就是指缓存空间中存放的未处理帧数是变化,发送端在收到确认帧后会删除原本保存在缓存中的待重发帧,而接收端向网络层提交一个帧后也会删除原本保存在缓存中的帧,至于缓存空间大小,缓存越大成本越高,当然这里的窗口大小分为:物理窗口大小和可用窗口大小,对于主机而言,物理窗口大小是固定的,要视主机所配置的缓存大小而定;而可用窗口的大小是变化的,他是在物理窗口的基础上变化的,一端会根据另一端的“接收窗口”大小调整本端的“发送窗口“大小。
2.滑动窗口的实现原理
滑动窗口大多是用来做流量控制的,比如说我现在有10包数据,编号分别是0 ,101,201,301,401,501,601,701,801,901.每包数据大小都为100,在发送的时候我们不可能一次性把所有数据都发送出去,假设我们的窗口大小为300(事实上窗口比这个要大的多),那么就是0,101,201,发送出去,接收端收到第一包数据就会返回确认数据,并且会返回了接收端窗口大小,如果先接收到0,那么接收端返回的窗口大小就是300,发送端收到编号为0的确认数据后,从窗口缓存中删除0的数据,同时将窗口向右移动,但是此时还有101和201 没有收到确认数据,所以窗口只能向右移动一位,即发送301,此时虽然接收端告诉发送端可以发送300大小数据,但是发送端本身还有两包数据即200缓存,所以只能再发送一包数据。
红色虚线框代表发送端已经发送出去的数据,蓝色虚线框内代表收到编号0确认码101后,向右移动后的窗口,这时发送了数据301这包数据。绿色线框内代表还未发送的数据。
相对应的,在接收端也会有这样的类似。接收端会将收到的连续序号的数据提交到应用层,并且清理当前接收到的数据,将窗口释放出来,不连续的则会缓存。
2.1 为啥用滑窗
为啥设计这个样子,这是由tcp的基本特性决定的,我们都知道tcp是保证有序的接收数据的,但是每次发送一包数据就等待接收端返回确认,这明显效率低下,浪费资源,但是又不能毫无估计的,将所有数据都发送出去,这样就无法保证有序,并且可能会造成网络拥堵,所以才有了滑窗机制,在保证数据效率的同时,也保证了网络效率。
这篇关于网络协议 TCP 滑动窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!