TCP 滑动窗口详解(非常实用)

简介: TCP 滑动窗口详解(非常实用)

一、滑动窗口简介


  滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的 拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包, 谁也发不了数据,所以就有了滑动窗口机制来解决此问题。滑动窗口协议是用来改善吞吐量的一种 技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包 (称窗口尺寸)。


       TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于 接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报。滑动窗口是 TCP 中实现诸如 ACK 确认、流量控制、拥塞控制的承载结构。


说明:


       1、可以把窗口理解为缓冲区的大小;


       2、滑动窗口的大小会随着发送数据和接收数据而变化;


       3、通信双方都有发送缓冲区和接收缓冲区;


               服务器:


                       发送缓冲区(发送缓冲区窗口)

                       接收缓冲区(接收缓冲发窗己)


               客户端:

                       发送缓冲区(发送缓冲区窗口)

                       接收缓冲区(接收缓冲发窗己)


二、滑动窗口图文解释


123db2b2ddbc422c8682369abb79ddc5.png

1、发送缓冲区


       白色格子:空闲的空间;


       灰色格子:数据己经发送出去了,但是还没有被接收;


       紫色格子:还没有发送出去的数据;


2、接收缓冲区


       白色格子:空闲的空间;


       紫色格子:还没有发送出去的数据;


三、滑动窗口工作流程


e5f384f3833e440cb5137f50d7c02709.png

# mss:Maximum segment size(一条数据的最大的数据量)


# win:滑动窗口


1、客户端向服务器发起连接,客户端的滑动窗口是4096,一次发送的最大数据量是1460(第一次握手);


2、服务器接收连接情况,告诉客户端服务器的窗口大小是6144,一次发送的最大数据量10243(第二次握手);


3、第三次握手;


4、4-9客户端连续给服务器发送了 6k 的数据,每次发送 1k;


5、第10次,服务器告诉客户端:发送的6k数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了 2k,窗口大小是 2k;


6、第11次,服务器告诉客户端:发送的 6k 数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了 4k,窗口大小是 4k;


7、第12次,客户端给服务器发送了 1k 的数据;


8、第13次,客户端主动请求和服务器断开连接,并且给服务器发送了1k的数据


9、第14次,服务器回复ACK 8194,a:同意断开连接的请求 b:告诉客户端已经接受到方才发的2k的数据 c:滑动窗口2k;


10、第15、16次,通知客户端滑动窗口的大小;


11、第17次,第三次挥手服务器端给客户端发送FIN ,请求断开连接;


12、第18次,第四次回收各户端同意了服务器端的断开请求。


说明:1-3是三次握手,4-9是进行通信;第一次和第二次握手时不能带有通信数据,因为还没有建立连接,第三次握手时可以带通信数据;


四、TCP 通信图解


1、三次握手


c1306c1c8bca4ae3a47790a8497e25b3.png


2、四次挥手


191aca4e3022428198d2729f7c3f8701.png

相关文章
|
人工智能 分布式计算 算法框架/工具
揭开阿里巴巴PAI的神秘面纱:引领人工智能计算的新篇章
揭开阿里巴巴PAI的神秘面纱:引领人工智能计算的新篇章 随着人工智能技术的飞速发展,越来越多的企业开始关注并投入到AI的研究和应用中。阿里巴巴作为全球领先的科技公司,也在AI领域做出了卓越的贡献。今天,就让我们一起来揭开阿里巴巴PAI的神秘面纱,了解这个强大的AI平台如何引领人工智能计算的新篇章。 PAI,全称阿里巴巴公共AI平台,是一个集数据准备、模型开发与训练、模型部署于一体的综合性AI平台。PAI的业务架构分为五层,从基础设施层到业务层,涵盖了AI计算的全过程。
1427 2
|
网络协议 算法 网络性能优化
TCP滑动窗口、流量控制及拥塞控制详解
TCP滑动窗口、流量控制及拥塞控制详解
|
5月前
|
缓存 Java
自旋锁
自旋锁是一种轻量级同步机制,适用于多线程环境。其核心思想是线程在获取锁失败时不阻塞,而是通过忙等待(自旋)不断尝试获取锁,从而避免上下文切换的开销。常见实现依赖CAS原子操作,适用于锁持有时间短、并发度高的场景,如计数器更新或缓存操作。但长时间自旋会浪费CPU资源,因此更适合多核环境下使用。Java中可通过`AtomicBoolean`实现简单自旋锁,JVM也对其进行了自适应优化。合理使用可提升性能,但需注意控制自旋时间和竞争粒度。
198 0
|
12月前
|
网络协议 算法 网络性能优化
第十一问:TCP的窗口机制是什么?
TCP的窗口机制是实现流量控制和拥塞控制的重要手段,主要包括滑动窗口、接收窗口(rwnd)和拥塞窗口(cwnd)。滑动窗口定义了发送方允许发送的数据范围,接收窗口控制接收方的缓冲区容量,拥塞窗口防止网络拥塞。这些窗口通过动态调整,确保数据传输的高效性和可靠性。
|
监控 安全 Linux
【专栏】Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip
【4月更文挑战第28天】本文介绍了Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip,以及它们在测试网络连通性、追踪路由、查看网络状态、安全扫描和接口配置等场景的应用。通过学习和运用这些命令,系统管理员和网络爱好者能更有效地诊断和管理网络问题,确保网络稳定运行。
1037 0
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
缓存 网络协议
图文秒懂TCP滑动窗口
小马无意中发现一个比较清晰的TCP滑动窗口视频教程,总结后在此分享,图文结合,一分钟即可秒懂窗口滑动原理,再也不怕面试官吓唬你了。视频源地址点这里,感谢原作者分享。
456 2
图文秒懂TCP滑动窗口
|
Python
Python的编辑工具-Jupyter notebook实战案例
这篇博客介绍了Jupyter Notebook的安装和使用方法,包括如何在本地安装Jupyter、启动和使用Jupyter Notebook进行编程、文档编写和数据分析,以及如何执行和管理代码单元(Cell)的快捷键操作。
751 4
Python的编辑工具-Jupyter notebook实战案例
|
网络协议 安全 Unix
详解 TCP 原理
详解 TCP 原理
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
26459 66
图解一致性哈希算法,看这一篇就够了!