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

server/2024/10/18 9:18:29/

文章目录

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

粘包问题

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

用分隔符

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

用数字代表长度

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

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

进程终止

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

电脑关机

正常情况下关机

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

非正常情况关机(停电)

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

电脑断网

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


http://www.ppmy.cn/server/13485.html

相关文章

深入理解Java NIO:原理、应用与实战详解

深入理解Java NIO:原理、应用与实战详解 引言 在现代软件开发中,高效的数据处理能力往往是决定系统性能的关键因素之一。Java NIO(New Input/Output)作为Java平台对非阻塞I/O模型的重要支持,为开发者提供了强大的网络…

ChatGPT研究论文提示词集合2-【形成假设、设计研究方法】

点击下方▼▼▼▼链接直达AIPaperPass ! AIPaperPass - AI论文写作指导平台 目录 1.形成假设 2.设计研究方法 3.书籍介绍 AIPaperPass智能论文写作平台 近期小编按照学术论文的流程,精心准备一套学术研究各个流程的提示词集合。总共14个步骤&#…

7.MMD 法线贴图的设置与调教

前期准备 人物 导入温迪模型导入ray.x和ray_controler.pmx导入天空盒time of day调成模型绘制顺序,将天空盒调到最上方给温迪模型添加main.fx材质在自发光一栏,给天空盒添加time of lighting材质 打开材质里的衣服,发现只有一个衣服文件 …

什么是 GitHub Wiki 以及如何使用它?

GitHub Wiki 是你项目文档的一个很好的地方。你可以使用 wiki 来创建、管理和托管你的存储库的文档,以便其他人可以使用并为你的项目做出贡献。 GitHub Wiki 很容易开始使用,无需安装任何其他软件。最好的部分是 wiki 与你的 GitHub 存储库集成在一起。…

Mac 安装comfigUI (M1)

注:系统要升到最新的 (Xcode 13.3.1 or later) Requirements Mac computers with Apple silicon or AMD GPUsmacOS 12.3 or laterPython 3.7 or laterXcode command-line tools: xcode-select --install 安装 pytorch 查看这个内容安装 h…

上网行为管理软件有哪些?三款常用上网行为管理软件评测

互联网的普及,企业和个人对于网络安全和信息保护的需求越来越高。为了确保网络环境的安全和稳定,上网行为管理软件应运而生。本文将对三款常用的上网行为管理软件进行评测,分别是域智盾、Splunk Enterprise Security和安企神。 1、域智盾 域…

python之面向对象

目录 1. 面向对象和面向过程思想 2. 类和对象 3. 类的组成 3.1. 成员属性 3.2 成员属性 3.2 成员方法 4. 特殊方法和参数 4.1 成员方法的self参数 4.2 __init__方法 4.3 __str__方法 5. 私有化 5.1 属性私有化 5.2 方法私有化 1. 面向对象和面向过程思想 面向对象…

华硕电脑怎么恢复删除的文件?有5种可以选择的方案

在日常使用华硕电脑的过程中,我们难免会遇到误删重要文件的情况。无论是因为不小心按错了键,还是由于某种软件故障,失去这些文件都可能会给我们带来不小的麻烦。那么,面对这样的情况,我们该如何有效地恢复这些被删除的…