TCP延迟应答、捎带应答、粘包问题、异常处理

news2025/2/3 7:07:29

TCP延迟应答、捎带应答、粘包问题、异常处理

  • 一、延迟应答
  • 二、捎带应答
  • 三、面向字节流 -- 粘包问题
  • 四、TCP中的异常处理
  • 五、补充

一、延迟应答

上篇博客我们讲到TCP滑动窗口、流量控制、拥塞控制。

如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小。
在这里插入图片描述

窗口越大,网络吞吐量就越大,传输效率就越高。我们的目标是在保证网络不拥塞的情况下尽量提高传输效率~~

那么所有的包都可以延迟应答么?肯定也不是:(具体的数量和超时时间,依操作系统不同也有差异)

  • 数量限制:每隔N个包就应答一次
  • 时间限制:超过最大延迟时间就应答一次

在这里插入图片描述

二、捎带应答

在延迟应答的基础上我们发现,很多情况下客户端服务器在应用层也是 “一发一收” 的。意味着客户端给服务器说了"How are you",服务器也会给客户端回一个"Fine, thank you",那么这个时候ACK就可以搭顺风车,和服务器回应的"Fine,thank you"一起回给客户端~~
在这里插入图片描述

所以在一些场景下,四次挥手断开连接可能变为"三次"~~

三、面向字节流 – 粘包问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、TCP中的异常处理

  1. 程序崩溃了
    进程异常退出~ 操作系统会回收进程的资源,包括释放文件描述符表。这样的释放操作就相当于调用了对应socket的close,执行close就会触发FIN报文,进一步开始四次挥手。
    这种情况和普通的四次挥手其实没啥区别~~
  2. 正常关机 (通过开始菜单这种方式来关闭主机)
    关机的时候系统会先强制结束所有的用户进程,和上述的那个进程崩溃类似。系统内核会进行文件描述符的释放操作,进一步进行四次挥手~~
  3. 主机掉电
    可能伤硬盘~
    1)掉电的是接收方。发送方不知道对面挂了,继续发数据,此时发的数据没有ACK了。发送方触发超时重传,重传几次之后仍然无应答,尝试重置连接 (复位报文段),也会失败。只能放弃连接了~~
    在这里插入图片描述
    2)掉电的是发送方。此时接收方就等着,但接收方也不是干等,等了一阵之后,就会发送一个"心跳包" !心跳包是周期性触发的:只是一个简单的不携带任何业务数据的包,存在的意义就是确认一下对方是否还在。如果对方不返回心跳包,就说明心跳遗失,说明对方挂了,此时也就会放弃连接了~~
  4. 网线断开
    情况同主机掉电,只不过通信双方的主机都是好着呢,这两端各自按照上述讲的两种情况分别进行~~

五、补充

在这里插入图片描述


在这里插入图片描述

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

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

相关文章

[ vulhub漏洞复现篇 ] Airflow dag中的命令注入漏洞复现 CVE-2020-11978

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

web前端-javascript-function函数的arguments对象(类数组对象,它也可以通过索引来操作数据,也可以获取长度)

arguments 对象 1. 引出 arguments 在调用 function 函数时,浏览器每次都会传递进两个隐含的参数 函数的上下文对象 this封装实参的对象 arguments 2. 说明 arguments 是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度在调用函数时&#…

ACL会议介绍 - Call for Main Conference Papers

The 61st Annual Meeting of the Association for Computational Linguistics Toronto, Canada July 9-14, 2023 网址:The 61st Annual Meeting of the Association for Computational Linguistics - ACL 2023 目录 征集主要会议文件 Submission Topics 主题轨迹…

Stm32标准库函数3——BlueTooth 蓝牙通讯测试 Stm32中继

//在使用本程序前,先将模块与手机端匹配成功,波特率38400 //串口1(A9、A10)接电脑,串口2(A2、A3)接蓝牙模块 //所有的波特率都为38400,蓝牙的供电为3.3-5v //程序功能,转…

Discrete Optimization课程笔记(4)—混合整数规划

目录​​​​​​​ 1.MIP介绍(Mixed Integer Program) Case1: Warehouse Location Case2: Knapsack Problem(Branch and Bound) 2.MIP模型(modeling) Case3: Coloring Problem(Big-M Transformation) 3.割平面法(Cutting planes) 4.多面体切割(Polyhedral Cuts) Cas…

前端工程化VUE-cli

六 前端工程化vue-cli Vue是渐近式框架,你可以用它一个功能,也可以用全家桶。前面的章节中,我们是在html中引入vue.js,只用它核心的数据绑定功能。但基于vue的扩展还有很多,比如vueRouter,axios&#xff0…

Base64编码剖析

文章目录Base64编码概述Base64原理索引表如何转换?Java实操Java代码实现Base64参考文章Base64编码概述 百度百科中对Base64有一个很好的解释:“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来…

【面试题】5年前端 - 历时1个月收获7个offer

大厂面试题分享 面试题库 前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 前言 省流:最终拿到了58、UMU、便利蜂、虾皮、快手、腾讯、字节的offer。 金三银四面试的, 这次整体面试通过率还挺高的, …

深入解读云场景下的网络抖动

一、网络抖动背景 延时高,网络卡,卡住了美好! 应用抖,业务惊,惊扰了谁的心? 当你在观看世界杯梅西主罚点球突然视频中断了几秒钟 当你在游戏中奋力厮杀突然手机在转圈圈无法响应 当你守候多时为了抢一…

数据结构与算法-二叉树

什么树 树是 n(n>0)个有限集。n0是空树,在n>1的非空树中有且仅有一个根节点作为树根,其他结构分散在根节点下形成一个个子树。各个子树互不相交。在实际的编码环节中,我们可以用链表和数组来模拟树结构。 为什么…

【计算机考研408】进程运行的流程

由程序段(进程运行的程序的代码)、相关数据段、和PCB(进程存在的唯一标志)三个部分构成了进程实体,也称作进程映像。 注:(引入线程后)进程只作为cpu外的系统资源的分配单元。 注&a…

DOM算法系列007-判定给定节点是否为空白节点

UID: 20221220141216 aliases: tags: source: cssclass: created: 2022-12-20 空白节点 什么是空白节点? 当一个节点的节点值为空文本值时,这个节点就是空白节点。 节点值: 即节点的 nodeValue 属性值: 实际上,节点值…

程序员必看:一款巨好用的免费简历“神器”(据说有了它,再也不发愁找工作啦!)

先说地址:https://cvmaker.greedyai.com/ 相比于前两年,今年大家的求职热情依然不减,但市场却泼了一盆“冰水”。 无论是从后台收到的留言,还是各种各样的新闻报道,以及今年的各大平台招聘数据来看,总结…

java多线程 下

目录 线程的生命周期 线程的同步 Synchronized的使用方法 同步机制中的锁 同步的范围 单例设计模式之懒汉式(线程安全) 线程的死锁问题 Lock(锁) synchronized 与 Lock 的对比 线程的通信 JDK5.0 新增线程创建方式 新增方式一:实现Callable接口 新增方式二…

利用LSTM识别显式篇章关系实战 可作为毕设

1.显式篇章关系分类概述 案例知识点: 任务描述:篇章关系分析是自然语言中处理篇章级基础语言分析任务,其目的是利用规则或机器学习等计算机处理手段判别篇章各组成成分之间的修辞逻辑关系,从而从整体上理解篇章。其中论元之间有连接词连接的此类关系称为显式篇章关系。本教…

RabbitMQ实战教程

RabbitMQ实战教程1.什么是RabbitMQ1.1 MQ(Message Queue)消息队列1.1.1 异步处理1.1.2 应用解耦1.1.3 流量削峰1.2 背景知识介绍1.2.1 AMQP高级消息队列协议1.2.2 JMS1.2.3 二者的联系1.2.4 Erlang语言1.3 为什么选择RabbitMQ1.4 RabbitMQ各组件功能2.怎…

【springboot 2.5.14 +jsp】打jar包,超详细,亲测可用,带源码

【springboot 2.5.14 jsp】打jar包&#xff0c;案例文档目录截图文件配置文件pom.xmlapplication.xmljspindex.jspjavaSpringbootJspApplication.javaHelloController.java打包方式运行源码地址文档目录截图 文件 配置文件 pom.xml <?xml version"1.0" encodi…

VEML6075的驱动代码

VEML6075的驱动代码VEML6075简介VEML6075相关参数VEML6075IIC读写相关时序VEML6075IIC读写驱动代码VEML6075IIC读写串口打印总结VEML6075简介 VEML6075是一种紫外线&#xff08;UV&#xff09;光传感器&#xff0c;它可以测量紫外线强度。它通常用于各种应用&#xff0c;包括环…

【云原生 | Kubernetes 实战】15、K8s 控制器 Daemonset 入门到企业实战应用

目录 一、DaemonSet 控制器&#xff1a;概念、原理解读 1.1 DaemonSet 概述 1.2 DaemonSet 工作原理&#xff1a;如何管理 Pod &#xff1f; 1.3 Daemonset 典型的应用场景 1.4 DaemonSet 与 Deployment 的区别 二、DaemonSet 资源清单文件编写技巧 三、DaemonSet …

零基础如何自学Python编程?

零基础如何系统地自学Python编程&#xff1f;绝大多数零基础转行者学习编程的目的就是想找一份高薪有发展前景的工作&#xff0c;哪个编程语言就业前景好越值得学习。零基础的同学学Python是一个不错的选择。 对于零基础的初学者最迷茫的是不知道怎样开始学习&#xff0c;建议…