关于滑动窗口协议的笔记

简介: 滑动窗口协议 还可以看我的另一篇博客,有更详细的介绍:http://www.cnblogs.com/xcywt/p/8401523.html 属于TCP协议中的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。

滑动窗口协议

还可以看我的另一篇博客,有更详细的介绍:http://www.cnblogs.com/xcywt/p/8401523.html

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

TCP利用一个滑动的窗口来告诉发送端对它所发送的数据能够提供多大的缓冲区,由16位定义,最大为65535个字节。

滑动窗口本质上是描述接收方的TCO数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。这个窗口大小为0时,发送方将停止发送数据。启动坚持定时器,等待这个窗口变成非0.

持续定时器,收到对方的零窗口时,就启动该定时器,时间到了就发送一个字节的探测报文,对方此时会回应自身的窗口大小,如果仍然为0,就重置定时器,继续等待。

 

窗口合拢:当窗口左边界向右靠近时,这种现象发生在数据被发送方确认时。
窗口张开:窗口的右边界向右移动的时候。这种现象发生在接收端处理的数据的时候。
窗口收缩:窗口右边界向左移动时,这种现象不常发生。
TCP采用可变大小的滑动窗口大小是为了取得更好的性能。
TCP规定的窗口大小是由接收方通告的,通过采取慢启动和拥塞避免算法等机制来使带宽和性能取得最佳

传递效率问题:
单个发送字节,单个确认,会使网络中增加很多不必要的报文(比如需要20字节的IP头,20字节的TCP头)。所以我们的原则是一次尽可能多发几个字节,或者窗口空余较多的时候通知发送方一次发送多个字节:
Nagle算法:
1)若发送应用程序要把发送的数据逐个字节的送到TCP的发送缓存,则发送方就把第一个字节先发送出去,其余的先缓存起来
2)当第一个字节得到确认时(也得到了网络情况和对方窗口大小),再把缓冲区的剩余字节组成合适大小的报文发送出去。
3)当到达的数据已达到发送窗口大小的一半或达到报文段的最大长度时就立即发送一个报文段(对于达到最大长度的情况:做法是让接受方等待一段时间,或者接收方获得足够的空间容纳一个报文段或接收方缓存有一半缓存时再通知发送方发送数据)

 

关于拥塞控制可以看这个:http://www.cnblogs.com/xcywt/p/8414189.html
拥塞控制
就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
常用的方法就是:
1)慢启动、拥塞控制
2)快重传、快恢复

 


发送方维护一个拥塞窗口(cwd)和慢启动门限(ssthresh)。
cwd开始为1,确认一次之后变成2,成指数增加。直到到达ssthresh,改为拥塞避免算法。
之后若发生拥堵,cwd变为1ssthresh减半,又进入慢启动。
若连续收到3次某个包的ack,则进入快启动,快重传。
ssthresh减半,cwd减为ssthresh减半后是数值,执行拥塞避免算法(高起点,线性增长)

拥塞避免算法(让窗口缓慢增长,每经过一个往返时间RTT就把发送方的cwd1,线性缓慢增长)

目录
相关文章
|
6月前
|
缓存
计算机网络——数据链路层-可靠传输的实现机制:选择重传协议SR(介绍、工作原理、窗口尺寸、题目练习)
计算机网络——数据链路层-可靠传输的实现机制:选择重传协议SR(介绍、工作原理、窗口尺寸、题目练习)
245 1
|
6月前
|
网络协议 Java Go
技术笔记:KCP协议学习
技术笔记:KCP协议学习
131 0
|
算法
第 6 天_滑动窗口【算法入门】
第 6 天_滑动窗口【算法入门】
77 0
|
7月前
|
网络协议 安全 Java
【JavaEE初阶】 TCP滑动窗口与流量控制和拥塞控制
【JavaEE初阶】 TCP滑动窗口与流量控制和拥塞控制
|
7月前
|
网络协议
计网 - TCP三次握手原理全曝光:深度解析与实战演示
计网 - TCP三次握手原理全曝光:深度解析与实战演示
141 0
|
7月前
|
网络协议
计网 - TCP四次挥手原理全曝光:深度解析与实战演示
计网 - TCP四次挥手原理全曝光:深度解析与实战演示
135 0
|
缓存 网络协议
图文秒懂TCP滑动窗口
小马无意中发现一个比较清晰的TCP滑动窗口视频教程,总结后在此分享,图文结合,一分钟即可秒懂窗口滑动原理,再也不怕面试官吓唬你了。视频源地址点这里,感谢原作者分享。
197 2
图文秒懂TCP滑动窗口
|
网络协议
TCP特性的滑动窗口,流量控制
TCP特性的滑动窗口,流量控制
|
消息中间件 网络协议 Java
由浅入深理解TCP三次握手,为什么不是三次而不是二次或者四次呢?
由浅入深理解TCP三次握手,为什么不是三次而不是二次或者四次呢?
101 0
|
消息中间件 缓存 网络协议
计网 - TCP 的稳定性:滑动窗口和流速控制是怎么回事?
计网 - TCP 的稳定性:滑动窗口和流速控制是怎么回事?
151 0