TCP粘包拆包问题解决之道

文章目录

    • 1. TCP粘包/拆包问题
    • 2. TCP粘包/拆包发生的原因
    • 3. TCP粘包解决策略

1. TCP粘包/拆包问题

在这里插入图片描述
假设客户端分别发送了两个数据包D1和D2,由于服务端一次读取到的字节数是不确定的,故存在以下四种情况。

  • 服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有发生粘包和拆包。
  • 服务端一次接收到了两个数据包,D1和D2粘在一起,被称为TCP粘包。
  • 服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP拆包
  • 服务端分两次读取到了两个数据包,第一次读取到了D1包的内容D1_1,第二次读取到了D1包的包的剩余内容D1_2和D2的整包。

如果此时服务端的TCP的接受滑窗非常小,而数据包D1和D2比较大,很有可能会发生第五种可能,即服务端分多次才能将D1和D2包的接收完全,期间发生多次拆包。

2. TCP粘包/拆包发生的原因

主要有三种原因:

  • 应用程序write写入的字节大小大于套接字接口的发生缓冲区大小
  • 进行MSS大小的TCP分段
  • 以太网帧的payload大于MTU进行了IP分片

在这里插入图片描述

3. TCP粘包解决策略

由于地层的TCP无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,根据业界主流的协议的解决方案可以归纳如下:

  • 消息定长,例如每个报文固定长度200字节,如果不够,空位补空格
  • 在包尾添加回车换行符进行分割,例如FTP协议
  • 将消息分为消息头和消息体,消息头中包含表示消息总长度的字段
  • 更复杂的应用层协议

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch安装IK分词器

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解…

云原生Kubernetes: K8S 1.29版本 部署Sonarqube

一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注masterK8S master节点1.29.0192.168.204.8 node1K8S node节点1.29.0192.168.204.9node2K8S node节点1.29.0192.168.204.10已部署Kuboard (2)master节点查看集群 1&…

go-mysql-transfer 同步数据到es

同步数据需要注意的事项 前提条件 1 要同步的mysql 表必须包含主键 2 mysql binlog 必须是row 模式 3 不支持程序运行过程中修改表结构 4 要赋予连接mysql 账号的权限 reload, replication super 权限 如果是root 权限则不需要 安装 go-mysql-transfer ​ git clone…

webstorm带跨域参数打开谷歌浏览器

谷歌浏览器设置跨域 在目录下创建一个空白的目录 webstorm带参数跨域打开谷歌浏览器 编辑打开参数: window: –disable-web-security --user-data-dir目录路径 mac: –disable-web-security --user-data-dir目录路径

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(一)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! Phpsploit-Framework(简称 PSF)框架软件,是一款什么样的软件呢? Phpspl…

【备战软考(嵌入式系统设计师)】07 - 计算机网络模型

七层模型 计算机网络中比较常见的有OSI七层模型和TCP/IP四层模型。 软考中主要考七层模型,但是实际中使用的还是四层模型比较多,我们主要是为了考试,那就主要讲讲七层模型。不过实际上四层模型就是将七层模型压缩了三层,本质上是…

gitee关联picgo设置自己的typora_图床

一:去gitee官网创建仓库:typora_图床 1.百度搜索关键字:gitee,进入官网 2.进入gitee登录或者注册自己的账号 3.进入主页后,点击右上方 4.点击新建仓库 5.设置仓库名:typora_图床 6.点击5的创建&#xff0…

文字转语音软件下载教程

文字转语音软件下载教程 一,Whisper下载二,ggml-medium语言模型下载三,导入模型下载四,使用方法 一,Whisper下载 网址:https://bittly.cc/uL9xs 下拉选择: 进入下载页面,下载Whis…

【LeetCode算法】1768. 交替合并字符串

提示:此文章仅作为本人记录日常学习使用,若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案 一、题目 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另…

Verilog中求两个数的差值

根据输入信号a,b的大小关系,求解两个数的差值:输入信号a,b为8bit位宽的无符号数。如果a>b,则输出a-b,如果a≤b,则输出b-a。 接口信号图如下: 代码如下: (CSDN代码块不支持Veril…

韧性增长与库存挑战并存,白酒行业上演“冰与火之歌”?

随着近日五粮液成绩单的公布,白酒板块主要上市公司的业绩均已出炉。 整体来看,虽然2023年白酒行业仍处于深度结构性调整,但相关上市公司业绩似乎并未受过多影响,均表现出喜人的增长态势,这也带动了白酒股的上行。据悉…

【Linux】编译器-gcc/g++

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html 目录 编译器-gcc/g 3种常见c后缀 g安装 翻译过程 预处理(进行宏替换) ​编辑​编辑…

27 JavaScript学习:异步编程

异步的概念 在JavaScript中,异步编程是一项重要的概念,特别在处理用户交互、网络请求和文件读写等场景下非常常见。JavaScript是一门单线程语言,因此需要通过异步编程来避免阻塞主线程,保证程序的流畅性和响应性。 在JavaScrip…

如何使用SSH密钥克隆仓库

1.创建SSH Key 在用户目录下查看有没有.ssh目录。如果有且该.ssh目录下有id_rsa(私钥),和id_rse_pub(公钥)这俩文件,那么这一步就可以跳过。否则使用以下指令创建SSH Key ssh-keygen -t rsa -C "xxxqq.com" "xx…

时钟基础知识

本文旨在深入浅出地介绍时钟的基础知识,从时间的起源、计量单位到时钟的发展历史,再到现代时钟的种类与功能,全面展现时间如何被人类精确计量与展现。我们将探讨时钟的基本原理,包括机械时钟、石英时钟以及现代电子时钟的运作机制…

图像分割入门-Unet++理论与实践

探索 U-net:改进的图像分割神经网络 引言 图像分割是计算机视觉领域中的重要任务,旨在将图像中的每个像素分配到特定的类别或区域。在许多应用中,如医学影像分析、自动驾驶和地块识别等领域,图像分割都扮演着关键角色。 U-net …

LLMs:《Better Faster Large Language Models via Multi-token Prediction》翻译与解读

LLMs:《Better & Faster Large Language Models via Multi-token Prediction》翻译与解读 目录 《Better & Faster Large Language Models via Multi-token Prediction》翻译与解读 Abstract 2、Method方法 Memory-efficient implementation 高效内存实…

【Mac】 DSync for mac(文件比较同步工具) v2.7安装教程

软件介绍 DSync是一款文件比较同步工具,通过简便的三步即可完成繁琐的比较、同步操作,您甚至可以通过跳过、删除或反转您选择的文件的复制方向来微调您的同步。这是在Mac上同步文件的最简单方法。 安装教程 1.打开安装包,将「DSync」拖到右…

机器学习入门之模型性能评估与度量

文章目录 性能评估误差欠拟合和过拟合模型选择与数据拟合 性能度量二分类的混淆矩阵查全率查准率F1分数 P-R曲线ROC曲线AUC 性能评估 机器学习的模型有很多,我们在选择的时候就需要对各个模型进行对比,这时候就需要一个靠谱的标准,能够评估模…

我们说的数据分析,到底要分析些什么?

作者 Gam 本文为CDA志愿者投稿作品 “我们说数据分析,到底要分析些什么?” 数据分析这个话题自从进入人们的视线以来,这个话题就成为人们茶余饭后的谈资,但是一千个人眼中就有一千个哈姆雷特,就意味着每个人对数据分…