什么是 TCP 粘包/拆包

TCP 是以流的方式来处理数据,一个完整的包可能会被 TCP 拆分成多个包进行发送,也可能把小的封装成一个大的数据包发送。

1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

TCP 粘包/拆包的解决办法

1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。

TCP粘包/拆包概述相关推荐

  1. Netty详解(五):Netty TCP粘包 拆包

    1. 概述 无论是服务端还是客户端,我们读取或者发送消息的时候,都需要考虑TCP底层的粘包和拆包机制.下面我们来通过Netty来详解TCP底层的粘包和拆包机制. 2. TCP底层的粘包和拆包机制 TC ...

  2. tcp协议缓冲区溢出_关于TCP 粘包拆包,你了解吗?

    一.什么是粘包拆包? 粘包拆包是TCP协议传输中一种现象概念.TCP是传输层协议,他传输的是"流"式数据,TCP并不知道传输是哪种业务数据,或者说,并不关心.它只是根据缓冲区状况将 ...

  3. 《精通并发与Netty》学习笔记(13 - 解决TCP粘包拆包(一)概念及实例演示)

    一.粘包/拆包概念 TCP是一个"流"协议,所谓流,就是没有界限的一长串二进制数据.TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的 ...

  4. Netty(二)——TCP粘包/拆包

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7814644.html 前面讲到:Netty(一)--Netty入门程序 主要内容: TCP粘包/拆包的基础知 ...

  5. java tcp怎么拆包_Java网络编程基础之TCP粘包拆包

    TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想象河里的流水,他们是连成一片的,其间并没有分界线.TCP底层并不了解上层业务数据的具体含义,他会根据TCP缓冲区的实 ...

  6. Netty学习总结(5)——Netty之TCP粘包/拆包问题的解决之道

    无论是服务端还是客户端,读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制. TCP粘包/拆包 TCP是个"流"协议. 流:没有界限的一串数据.如同河里的流水,它们是连成 ...

  7. Netty4实战 - TCP粘包拆包解决方案

    Netty4实战 - TCP粘包&拆包解决方案 参考文章: (1)Netty4实战 - TCP粘包&拆包解决方案 (2)https://www.cnblogs.com/hunrry/p ...

  8. TCP——粘包/拆包

    TCP粘包/拆包 TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,它们是连成一片的,其间并没有分界线.TCP底层并不了解上层业务数据的具体含义,它会根 ...

  9. TCP粘包/拆包问题

    目录 TCP粘包/拆包 TCP粘包/拆包问题说明 TCP粘包/拆包发生的原因 粘包问题的解决策略 未考虑TCP粘包导致功能异常案例  TimeServer的改造 TimeClient的改造 利用Lin ...

  10. TCP粘包|拆包和解决方案

    1 产生原因 TCP是面向连接的,面向流的,提供高可靠性服务.收发两端(客户端和服务端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化算法(Nagle ...

最新文章

  1. c语言规定预处理命令必须以什么开头,C语言规定预处理命令必须以___________开头...
  2. 【数论总结】-----励志写好一篇数论总结↖(^ω^)↗//正在施工...未完工
  3. 为什么远程桌面不能复制?解决方法
  4. @Transactional 使用
  5. springboot项目如何使用HikariCP(国际主流)做为数据源,gradle构建工具
  6. 关于解决运行sql文件时,找不到MySQL默认编码utf8mb4的问题
  7. 为什么象网络蚂蚁这样的多线程程序可以加快下载速度?
  8. 用VS2015编译pjsip的工程pjproject-vs14
  9. 基于深度学习的音乐推荐系统简述
  10. 用友U8案例教程委外管理前台操作
  11. java servlet 视频_Servlet开发的理论提升视频教程 - JavaWeb - Java - 私塾在线 - 只做精品视频课程服务...
  12. 如何在Word中快速制作组织结构图?没想到可以如此简单
  13. 重力加速度传感器角度输出
  14. 【Android】多语言适配:语言、名称、与资源对应关系
  15. Java中怎么将Long类型转换成Integer或int类型
  16. 鸿蒙IPC摄像机,【HiSpark IPC DIY Camera试用连载 】第二篇 视频的人脸检测
  17. java解析xml 前言中不允许有内容_关于xml加载提示: Error on line 1 of document : 前言中不允许有内容...
  18. 记录Android开发过程中遇到的疑难问题
  19. android无焦点跑马灯滚动,Android跑马灯无焦点滚动
  20. Emerald Theme Manager 不能更换主题

热门文章

  1. TranslateAnimation类:位置变化动画类 (类似tab切换效果)
  2. 腾讯云搭建Socks5多IP代理服务器实现游戏单窗口单IP完美搭建教程附带工具
  3. PDF转CAD到底哪个软件比较好?
  4. 指纹识别传感器技术演变历程
  5. 必应Bing可能会退出中国市场
  6. Python计算机视觉之特征提取与图像匹配
  7. PHP使用MQ消息队列
  8. 前端基础之HTML5音视频标签(video/audio)讲解
  9. 三菱FX5U,机床X轴Y轴工作台定位控制程序!使用三菱J4-A系列伺服驱动器绝对位置系统,程序大小27000多步
  10. 【渝粤教育】电大中专电商运营实操 作业 题库