当前位置: 首页 > news >正文

为什么TCP会粘包

硬核图解|tcp为什么会粘包?背后的原因让人暖心
数据包报文格式(IP包、TCP报头、UDP报头)

TCP,Transmission Control Protocol。传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP粘包是指发送方在发送数据时,由于一些原因(如网络缓冲区大小、数据发送速度等),导致多个数据包被合并成一个大的数据包发送,或者接收方在接收数据时,一次性接收到多个数据包的情况。这种情况可能会影响数据的解析和处理。
在这里插入图片描述
看上图可以知道TCP的报文格式里面没有数据包长度相关字段,那问题来了,如果两个TCP数据包合因为长度不够(因为IP数据包有最小载荷长度)导致合并成一个IP数据报,那接收方如何把这两个TCP数据包给分出来呢,这就有了TCP粘包问题。

粘包出现的根本原因是不确定消息的边界。接收端在面对"无边无际"的二进制流的时候,根本不知道收了多少 01 才算一个消息。
一不小心拿多了就说是粘包。其实粘包根本不是 TCP 的问题,是使用者对于 TCP 的理解有误导致的一个问题。

只要在发送端每次发送消息的时候给消息带上识别消息边界的信息,接收端就可以根据这些信息识别出消息的边界,从而区分出每个消息。

相关文章:

  • 【信息安全原理】——拒绝服务攻击及防御(学习笔记)
  • 相机内参标定理论篇------张正友标定法
  • gem5学习(7):内存系统中创建 SimObjects--Creating SimObjects in the memory system
  • Docker六 | Docker Compose容器编排
  • 【Java中序列化的原理是什么(解析)】
  • [每周一更]-(第40期):GIT更换远程仓库地址
  • 八股文打卡day15——计算机网络(15)
  • Spring AOP—深入动态代理 万字详解(通俗易懂)
  • 组合[中等]
  • 医院绩效考核系统源码,java源码,商业级医院绩效核算系统源码
  • docker-compose部署kafka
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • 嵌入式开发网络配置——windows连热点,开发板和电脑网线直连
  • 从a类到b类理解原型链
  • Python开发GUI常用库PyQt6和PySide6介绍之三:交互和通信方式讲解
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Bootstrap JS插件Alert源码分析
  • ECS应用管理最佳实践
  • Fastjson的基本使用方法大全
  • iOS小技巧之UIImagePickerController实现头像选择
  • React+TypeScript入门
  • Vue 2.3、2.4 知识点小结
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 半理解系列--Promise的进化史
  • 大数据与云计算学习:数据分析(二)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 聚簇索引和非聚簇索引
  • 如何用vue打造一个移动端音乐播放器
  • 深度学习入门:10门免费线上课程推荐
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 用element的upload组件实现多图片上传和压缩
  • 正则表达式小结
  • 正则表达式-基础知识Review
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #162 (Div. 2)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ..回顾17,展望18
  • .apk 成为历史!
  • .bat批处理(一):@echo off
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net连接oracle数据库
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net中我喜欢的两种验证码
  • .pyc文件是什么?
  • .ui文件相关
  • @EnableAsync和@Async开始异步任务支持