TCP核心机制详解(三)

news2025/2/28 21:29:11

目录

前言:

滑动窗口

滑动窗口处理丢包问题

流量控制

拥塞控制

延时应答

捎带应答

面向字节流

异常情况

小结:


前言:

    前两篇文章讲述了,TCP十种核心机制的前三种。这篇文章详细介绍其他的一些核心机制,让我们更深入理解网络原理。

滑动窗口

    由于TCP为了保证可靠性,引入了一些机制。这些机制必然导致TCP的效率降低。比如每发一个数据报就需要等待ACK(比较消耗时间)滑动窗口就是为了提高TCP的效率。

    滑动窗口本质上就是降低了确认应答等待ack的时间(批量发送,批量等待)。对于基本的确认应答情况来说,每次发一个数据,都要等待ack。而滑动窗口的本质就是不等待的批量发送一组数据,然后使用一份时间来等待一组多个ack。这里把不需要等待就直接发送的数据称为“窗口大小”。 

    注意:这里在等待ack的时候,不是说等待所有的ack全部到达后才继续发送,而是只要到达一个ack就继续发送。那么窗口的大小始终都是不变的,同时也体现出 “滑动”的特性。

滑动窗口处理丢包问题

1)ACK丢了

    不需要做任何事情,只要后面的ack到达了,就可以证明前面的数据到达了。ACK返回的确认序号就是证明这个序号以前的数据已经成功到达。

2) 数据包丢了

解释:

    如果2001 - 3000的数据丢了,后面的ack都是2001。直到数据发送到7001 - 8000返回的ack也是2001(索要2001的数据)。这时候主机A发现丢包了,将2001 - 3000的数据包重新传一下,然后返回的ack就是8001(最新的索要序号)。就证明前面的数据发送完成。

    这样的重传方式叫做“快速重传”。如果传输数据密集,采用滑动窗口的方式,使用快速重传处理丢包。如果数据传输不是很密集,不按照滑动窗口的方式,就是一般的超时重传。

流量控制

    滑动窗口越大,传输效率就越高(一份时间等待的ack就越多),但是窗口也不能无限大。需要根据接收方处理数据的能力来控制窗口的大小。

    衡量接收方处理数据的能力,直接查看缓冲区剩余空间的大小。

    每次发送方发送数据,接受方返回的ack就会携带,根据缓冲区剩余空间大小计算的窗口大小。选项中存在“窗口扩展因子”,接收的窗口值再左移窗口扩展因子位。(为了使窗口足够大,效率做到最大的提升)

注意:

    由于接收方缓冲区大小是动态变化的,那么对应的窗口大小也是动态调整的。

    当窗口大小为0的时候,发送方就会等待。在这个时间里,发送方会发送“窗口探测报文”触发ack查询窗口大小。

拥塞控制

    网络传输中中间需要经历很多节点,现在只考虑了接收方处理数据的能力,如果中间哪个节点处理数据的能力较低,那么总体效率也不会高(木桶效应)。

    流量控制和拥塞控制共同决定窗口的大小。流量控制考虑的是接收方处理数据的能力。拥塞控制考虑的是中间节点处理数据的能力。

    拥塞控制,就是在网络中发生拥塞时(路由器处理数据慢),减少向网络中发送数据的速度,防止造成恶性循环;同时在网络空闲时(路由器处理数据快),提高发送数据的速度,最大限度地利用网络资源。

    由于每次网络传输的中间节点都是不固定的。因此没办法衡量中间节点的处理数据的能力。采用 “实验” 的方式。

注意:

    开始是指数增长,当窗口达到一定大小就变为线性增长。当传输过程一旦丢包了(网络拥塞),说明窗口大小已经是极限了。此时就把窗口大小一下缩小为很小的值(重复刚才的指数增长和线性增长)。

    拥塞窗口不是固定的数值,而是一直动态变化的。随着时间推移,逐渐达到一个相对平衡的状态。        

    拥塞窗口和流量控制共同决定了发送发实际的窗口大小(窗口大小取两者的较小值)。

延时应答

    在滑动窗口的基础上,尽可能的扩大窗口的大小。

    所谓延时就是收到数据后,不是立即返回ack而是稍等一会再返回。等待的时间里,接收方程序就能够把缓冲区的数据处理一波,此时剩余空间就大了,那么发送方窗口也就大了。

    实际上延时应答的具体做法,就是在滑动窗口下,ack不在每一条数据都返回了。比如隔一条返回,相对于第一条数据这里的ack就等于等待了。

捎带应答

    本来ack和要返回的业务数据不是同一时机,但是在延时应答的机制上,可能就会在同一时机。然后就会合并为一条报文发送过去。提高效率的方式。

面向字节流

    TCP的特点就是面向字节流。面向字节流,就引出了一个问题:粘包问题。进行read读取的时候,读到哪里才算结束呢?读到哪里才算一个完整的数据包呢?

解决方案:(需要自己代码实现)

    1)约定好分隔符,当读到分隔符就结束。

    2)约定好每个包的长度,只读取这么长的数据。

异常情况

1)进程崩溃

2)主机关机

3)主机掉电

4)网线断开

注意:

1)

    进程没了,对应的pcb也就没了,对应的文件描述符表也就释放了,相当于Socket.close()。此时内核就会完成四次挥手,也就是正常的断开流程。(主机关机,首先关闭进程,和这里原理一样)。

2)

    假设接收方掉电,发送方等不到ack,然后超时重传多次,依然失败。接下来断线重连(RST复位报文段)还是失败,就单方面放弃了。

    假设发送方掉电,接收方发现没有数据了,先等。这个时候会周期性的发送 “心跳包” 确认对方是否工作正常。(心跳包来确认通信双方是否处在正常的工作状态)

小结:

    TCP核心机制到这里就结束啦,TCP是一个很复杂的协议还有很多的机制。需要继续了解可以去查阅官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大气温室气体浓度不断增加,导致气候变暖加剧,随之会引发一系列气象、生态和环境灾害怎样解决?

大气温室气体浓度不断增加,导致气候变暖加剧,随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物(特别是红树林、盐沼和海草&…

企企通持续助力全球管道预制先行者「迈科管道」,二期项目逐步启动

近日,国内管道预制龙头企业「济南迈科管道科技有限公司」签约企企通采购供应链系统二期项目。此次签约,将针对迈科管道的采购业务特点和需求,结合企企通采购与供应链管理系统优势和丰富的实战经验,在一期项目基础上,持…

山东科技大学校历 代码分析 获得以前学期学年的老版校历

校历-山东科技大学网络安全与信息化办公室http://tech.sdust.edu.cn/wlfw/xl.htm JavaScript var studyStart new Date(2021, 8-1, 30);//8-1 -1没有意义,30代表30号,2021年8月30号开始这个学期 var commonWeeks 19;//这个学期有多少周 var s…

Mysql使用规范(纯技术和实战建议)

1、事务隔级别: (强制):Repeatable-Read(重复读),且不能在会话操作时临时开启隔离级别。 注: Repeatable-Read(重复读)隔离级别解决不了幻读。 可用 show variables l…

Linux学习之环境变量

目录环境变量基本概念查看环境变量的方法常见的环境变量PATH:指定命令的搜索路径。PATH测试HOME:指定用户的主工作目录SHELL:当前Shell和环境变量有关的命令环境变量的组织方式通过代码来获得环境变量通过函数来获得环境变量环境变量具有全局…

集成AI智能安防平台EasyCVR时,调取录像接口报跨域错误的解决方法

EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标G…

Datawahle组队学习——妙趣横生大数据 Day1

妙趣横生大数据 Day1[妙趣横生大数据 Juicy Big Data](https://datawhalechina.github.io/juicy-bigdata/#/?id妙趣横生大数据-juicy-big-data)一、大数据概述大数据——第三次信息化浪潮大数据概念大数据应用大数据关键技术二、Hadoop背景介绍特性项目架构实验1. 准备工作2. …

Tomcat 配置IPV6

文章目录一、场景二、tomcat开启ipv6三、ipv6环境配置四、访问总结一、场景 我们在linux下安装一个tomcat,启用ipv6的方式,然后在windows下用浏览器访问这个tomcat 二、tomcat开启ipv6 在server.xml配置文件的里面加上 address”[::]” ,这…

选择排序、快速排序、插入排序等经典八大算法稳定性分析

选择排序、快速排序、插入排序等经典八大算法稳定性分析稳定性定义:各排序算法的稳定性:一、冒泡排序二、选择排序三、插入排序四、快速排序五、归并排序六、希尔排序(shell)七、基数排序 :八、堆排序常用排序算法对比稳定性定义:…

代码的简单设计五原则

欢欢:“你看我的代码用了策略模式和状态模式,假如后面客户会有这样的需求,可以无缝扩展,多么健壮!” 清扬一脸狐疑,心中念叨了数遍 :“哼,过度设计!”,只见她…

APISpace 带你一起走进西湖美景

俗话说:“上有天堂,下有苏杭”。 “欲把西湖比西子,浓妆艳抹总相宜” 今天我就带大家走进杭州的西湖美景。自古以来,文人歌者面对西湖美景留下千古绝句,还以西湖为背景书写了一段段动人的爱情传说。 天生自带浪漫色…

医学生考研考博太卷,一篇文章轻松助力上岸——生物信息学及R语言基础知识之向量的运算(二)

考研考博太卷了,卷不过,想没想过本科发一篇文章呢? 330分考研人淘汰390分考研人这个故事,大家应该都知道吧。 本专栏带你六个月内,搞定一篇文章,本科生发文章也很容易。 在卷考研的同时,再卷一篇SCI,你就是新一任卷王。 本专栏教你不用花钱发一篇生信文章,从三个方…

态库、静态库之间的相互嵌套

本文的目的是测试各种类型库的编译后的使用效果,包括库又链接其他库的编译方法,使用方法,依赖性等。 太长不看版:请跳至文章最后的总结对比表。 一、内容包含: ①静态库libbb.a依赖静态库libaa.a的测试; …

学会分享,学会生活,分享5款简单易用的软件。

分享是一种博爱的心境,学会分享,就学会了生活。 1.在线图片编辑工具——佐糖 佐糖是一款在线免费图片编辑工具,采用AI人工智能技术,自动识别图片,支持一键抠图,更换背景,移除水印等。另外还提…

【向每个应用View中增加子控件 Objective-C语言】

一、把刚才计算九宫格的思路再给大家过一遍 1.现在我们要计算九宫格坐标 1)先把每一个格子,每一个九宫格的大小,先确定了, 在这里先指定宽和高 CGFloat appW = 75; CGFloat appH = 90; 2)再去计算第一个格子的一些间距, 到上面的间距,marginTop = 30; 再计算出…

别再花钱买 Chatgpt 资源了,这里有免费的,2 分钟上手

最近无论是打开社交网站,还是朋友圈,就连中午吃个饭都能听到大家都在聊 ChatGPT,仿佛如果这一刻你不懂这是个啥玩意儿,你就会觉得自己完全搭不上他们的话... 那ChatGPT 是什么? 百度上是这样解释的: ChatG…

最全的免费录屏工具,这 19 款录屏软件绝对值得你收藏

屏幕录制软件可让您捕获屏幕以与他人共享,创建与产品相关的视频、教程、课程、演示、视频等。这些软件是您能够从网络摄像头和屏幕录制视频。以下是精选的顶级屏幕录像机列表。 适用于 PC 的19 款免费录屏屏幕录像机软件 1)奇客免费录屏 奇客免费录屏&am…

2023家用投影仪怎么选?极米H5值得推荐

如今不管是手机还是电视都在不断向大屏幕靠近,消费者也在追求越来越大的屏幕尺寸。同时作为提升生活幸福指数的重要家居用品,投影仪正逐渐取代电视,成为消费者的首选。随着国内智能投影行业的不断发展,市面上智能投影产品也越来越…

Allegro移动器件时附带的孔和线被同步更改的原因和解决办法

Allegro移动器件时附带的孔和线被同步更改的原因和解决办法 用Allegro做PCB设计的时候,移动器件的时候,会出现附带的孔和线也会被同步更改,有时并不是期望的效果,如下图 Allegro其实将这个功能关闭即可,具体操作如下 选择Edit点击Move命令

Vulnhub 渗透练习(二)—— BILLU: B0X

环境下载 下载链接 环境搭建 直接用 vmware 打开,设为 NAT 模式。 信息收集 nmap 扫描 主机扫描: nmap -sP 192.168.200.0/24端口扫描: nmap -sV 192.168.200.129 开了一个 80 端口 apache 服务,和 ssh 服务,后…