码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • TCP的粘包拆包问题+解决方案


     

    为什么TCP有而UDP没有粘包❓

    1️⃣因为udp的数据包有保护边界。

    2️⃣tcp是以字节流的形式,也就是没有边界,所以应用层的数据在传输层的时候就可能会出现粘包和拆包问题。

    出现这种问题的原因图解💨

    1️⃣字节流可以理解为一个双向的通道里流淌的数据,这个数据其实就是我们常说的二进制数据,简单来说就是一大堆 01 串。这些 01 串之间没有任何边界。

    2️⃣应用层传到 TCP 协议的数据,不是以消息报为单位向目的主机发送,而是以字节流的方式发送到下游,这些数据可能被切割和组装成各种数据包,接收端收到这些数据包后没有正确还原原来的消息,因此出现粘包现象。

    粘包情况

    ​​​​​​​🥖要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;

    拆包情况

    🥖要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包;

    拆包&粘包

    解决方案💯

    应用层措施

    1️⃣封装固定包的大小。

    2️⃣在包的结尾加上固定的字符,比如:FTP中的解决方法:末尾加上\r\n

    3️⃣消息头+消息体。消息头中有消息体的长度。

    4️⃣自定义。

  • 相关阅读:
    【openGauss3.0.0之Java API基本操作】
    UVM driver和monitor中阻塞和非阻塞
    【OpenDDS开发指南V3.20】第三章:服务质量
    【极速审稿】物联网传感器类SCI&EI,仅17天录用,计算机领域SCI快刊盘点
    Go 微服务开发框架 DMicro 的设计思路
    通讯网关软件006——利用CommGate X2OPCUA实现OPC UA访问DDE数据源
    springboot昆明学院档案管理系统 毕业设计-附源码311758
    第十二章 类和对象——封装
    SpringBoot
    7、Tomcat & Servlet
  • 原文地址:https://blog.csdn.net/qq_37699336/article/details/126001366
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号