面试题之TCP粘包现象及其解决方法

  • 计算机网络每层的基本单位:
  • 物理层(第一层):
  • 比特流;
  • 数据链路层(第二层):
  • 数据帧;
  • 网络层(第三层):
  • 数据包;
  • 传输层(第四层):
  • 数据段(TCP)、用户数据报(UDP);
  • 应用层(第五层):
  • 消息或报文;
  • TCP粘包现象:
  • 简要概述:
  • 发送端向接收端发送一些数据包,产生粘成一个数据包的现象;
  • 准确概述:
  • 传输控制协议(TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议;
  • 在TCP通信中,以字节流的方式发送,这些数据可能会被切割并组装成各种数据包,接收端在收到这些数据包后没有正确还原消息;
  • 解决方法:
  • 一、定长消息:
  • 发送数据前,发送端将数据按固定长度分割成多个数据包发送,接收端每次接收一个固定长度的数据包;
  • 缺点:
  • 1、固定缓冲区大小的方式增加不必要的数据传输;
  • 2、当发送的数据比较小时,会使用空字符来填充,增加网络传输的负担;
  • 二、特定字符分割:
  • 发送数据时,发送端在每个数据包的末尾添加特定的字符或标记,接收端在接收数据时,根据特定字符或标记切分数据包;
  • 缺点:
  • 报文中不能有相同的字符或标记;
  • 三、消息长度(最佳方案):
  • 发送数据时,发送端在每个数据包的开头添加表示消息长度的字段,接收端先读取消息长度,然后根据消息长度读取数据包;
  • 结构组成:
  • 1、报文长度;
  • 2、报文内容;
相关推荐
裕晟资质规划1 小时前
三类涉密资质延续时限差异分析:军工60日与集成印制3个月的边界
java·服务器·前端·网络·安全
刘胡子大叔1 小时前
备份包只有 1.5K?
linux·服务器·网络
erzong2311 小时前
Linux操作系统:线程概念与控制
linux·算法
星恒随风2 小时前
Linux线程概念详解:从分页存储、页表、MMU与TLB,深入理解线程和进程的区别与联系
linux·运维·笔记·学习·状态模式
qq_284274052 小时前
数控机床编程基础与坐标系:编程六步流程、程序号/程序段/程序字格式,与右手定则下车床铣床XYZ轴判定(含考点)
笔记·学习·自动化·制造
德林恩宝2 小时前
On-Policy Distillation(OPD)学习文档
人工智能·学习·机器学习·大模型·llm·大模型微调
wuminyu2 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
Nil2082 小时前
leetcode 5最长回文子串
算法·leetcode·职场和发展
xxwl5852 小时前
区域赛分类题解
c++·笔记·学习·算法
幻智星科技2 小时前
一个开源的纯FPGA网口采集卡
网络协议·fpga开发·udp