TCP协议中的几个核心特性(下)

简介: TCP协议中的几个核心特性(下)

🍑滑动窗口

滑动窗口存在的意义就是在保证可靠性的前提下,尽量提高传输效率!!!

先来看如果不使用滑动窗口,传输是怎样进行的

4f95888df5934d76873d766c0fdbddfc.png

如上图所示,我们这样发送一次,收到确认后再发送一次,这样重复的操作是很费时间的。我们把大量的时间都花费在了等待ACK响应上。

于是就有了滑动窗口这样一个机制——一次发送一波数据,然后等待接收方的响应ACK(表示当前接收方已经收到了第xxx个字节的数据,你接着发送就好,窗口就进行了滑动)

上面这段话,你可能不同理解,没关系,接着往下看就好——让我们看看什么是窗口?什么是滑动?


611ff7fba0a044149717be82e7d41eb6.png

看到这里,想必你已经对滑动窗口这个概念有了一个初步的认识,但是这里还是有些小问题。滑动窗口是提示了发送效率。但是如果出现了丢包该怎么办?

丢包分为两种情况

第一种:ACK丢了

1146fe3b3fad427fa7dff7c1f14b887a.png第二种:数据包丢了


1501806b6ac04aeea1c4371b60fb7b57.png

总结:

滑动窗口提高发送效率(但可能会影响数据的可靠性)

于是就有了流量控制、拥塞控制来对滑动窗口的发送速率做一个限制(让滑动窗口的大小在一个合理的范围,让他别一次发那么多数据,接收方可以来不及接收,容易造成丢包)


那么具体是怎样来限制呢?


🍑流量控制

对于流量控制——就是根据接收方的处理能力(接收缓冲区剩余空间大小)通过ACK确认报文段来告知发送方当前接收缓冲区中的剩余空间大小是多少,然后发送方就根据这个数据来不断的改变当前滑动窗口的大小。


那么问题来了,这个所谓的接收缓冲区大小是个什么东东?


6b4c1c915ea64a8195d07c77b2478909.png

那么如何让我们的发送方知道当前接收方的接收缓冲区的大小呢?


088b3d5c52164d86bc03f7158cc39f03.png

理论说完了,我我们来看一个例子 

39a938b281ec4defa83ec78e963833ca.png

如上图所示:第一次收到接收方的ACK时候,此时的接收缓冲区的大小还是3000字节,然后随着发送方数据的不断发送,这个值不断的减小。终于当接收发收到了发送方的第4000个字节(下一个要接收的字节是4001的时候,此时接收缓冲区满了,发送方就会暂停发送数据.....就这样通过接收缓冲区来动态的调整发送方滑动窗口的大小。


🍑拥塞控制

流量控制是站在接收方的角度来控制发送速率的(滑动窗口大小)的, 但是对于整体的网络传输而言,不光有发送方和接收方,还有中间各自转发设备。


8c6b795eef2a4b8397a792f353581529.png


既然知道了拥塞控制—— 就是从中间这一系列的转发设备来考虑,进而来限制发送方的发送速率(滑动窗口大小)的,那么他处理的具体流程是什么呢?


中间可是有很多设备的,又多又杂,不好处理呀!


aa58d6afa4f24c6781f9f919faea408f.png

总结:

04fd6d211d7e4199a4f5a005da3eb273.png

总结

TCP三大核心特性:

面向连接

可靠传输(通过确认应答、超时重传、流量控制、拥塞控制、延迟捎带应答等机制实现)

字节流传输


a75958d411b44d53916af69bc85809cc.png

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
SQL 运维 监控
【巡检问题分析与最佳实践】MongoDB 磁盘IO高问题
阿里云数据库MongoDB的IOPS使用率是一个非常重要的监控指标,IOPS使用率达到或接近100%后容易引起业务响应缓慢,甚至导致业务不可用的情形。一般云数据库厂商为了避免宿主机出现IO争抢,会使用Cgroup等技术进行实例间的IO隔离和IOPS限制,即不同规格的实例配置对应不同的IOPS使用上限。
【巡检问题分析与最佳实践】MongoDB 磁盘IO高问题
|
Java API Spring
【Springboot】springboot 多线程@EnableAsync和@Async
【Springboot】springboot 多线程@EnableAsync和@Async
406 0
|
传感器 监控
光学雨量计红外雨量传感器具有快速反应的特点
光学雨量计红外雨量传感器具有快速反应的特点
光学雨量计红外雨量传感器具有快速反应的特点
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
《迈向认知智能新高度:深度融合机器学习与知识图谱技术》
在人工智能发展中,机器学习与知识图谱正成为推动行业变革的关键力量。机器学习使机器能从数据中学习并预测,而知识图谱以结构化方式描绘实体与关系,提供语义框架。两者的深度融合突破了传统AI的局限,提升了推理能力和决策质量,开启了认知智能的新篇章。通过特征工程、嵌入技术和联合推理等方法,二者在智能客服、金融风险评估和智能教育等领域展现出巨大应用潜力,尽管仍面临数据质量、语义理解和模型融合等挑战,但未来前景广阔,有望推动AI向更高水平发展。
261 1
|
存储 NoSQL 调度
|
编解码 供应链 搜索推荐
虚拟现实与教育:沉浸式学习的潜力
【10月更文挑战第2天】虚拟现实(VR)技术正在革新教育领域,通过沉浸式体验提升学习效果和兴趣。本文探讨了VR在教育中的应用潜力,特别是在历史、地理、自然科学和语言教育中的案例。虽然面临设备成本和技术支持等挑战,但随着技术进步和成本降低,VR有望成为教育的重要工具,带来更丰富的学习体验。
|
弹性计算 API 云计算
使用LobeChat轻松打造私人智能聊天助手
阿里云计算巢提供了一键部署LobeChat的功能,无需下载代码或安装复杂依赖,通过简单几步即可搭建私人聊天助手,非常适合非技术人员。LobeChat是一款现代化设计的开源聊天应用,支持语音合成及多模态插件系统。部署前需确保已开通阿里云账号且余额充足。
使用LobeChat轻松打造私人智能聊天助手
|
API
【threejs教程】threejs中的边边角角:几何体详解
【8月更文挑战第6天】threejs中的几何体详解
541 4
【threejs教程】threejs中的边边角角:几何体详解
|
图形学 Android开发 UED
【Unity小技巧】图片使用的一些常见问题
【Unity小技巧】图片使用的一些常见问题
391 0
|
存储 API 持续交付
virsh 的工作原理
`virsh`是基于libvirt API的命令行虚拟机管理工具,适用于自动化部署和管理。它提供交互和非交互模式,用于连接到Hypervisor,执行如创建、管理、配置虚拟机及网络、存储等任务。用户需相应权限,无权限者只能读取信息。virsh通过与libvirtd守护进程通信,实现对虚拟化环境的控制,是系统管理员的强大助手。
389 2