首页 > 其他分享 >TCP粘包半包问题

TCP粘包半包问题

时间:2024-11-28 16:34:36浏览次数:5  
标签:解码 TCP 粘包 消息 长度 半包

TCP粘包和半包的问题分析

TCP粘包原因:
1、发送方每次写入数据<套接字缓冲区大小;tcp相关算法整合碎片化数据包
2、接收方读取(接收)套接字缓冲区数据不够及时
半包原因:
1、发送方写入数据>套接字缓冲区大小
2、发送的最大报文长度大于MSS,网络包大于协议的MTU(最大传输单元,1500字节)必须拆包

TCP粘包半包根因分析:
TCP协议是面向连接的、可靠的、基于字节流的传输层通信协议,是一种流式协议,消息无边界会有粘包和拆包问题

TCP粘包和半包的解决方案

解决TCP粘包,半包问题的根本:找出消息的边界

方式 用法 寻找边界的方式 优势 弊端 推荐度
封装成帧 固定长度 满足固定长度的数据就是一个完整消息 实现简单 长度不好定义,容易造成空间浪费 不推荐
封装成帧 分隔符 两个分隔符之间的消息就是完整的消息 实现简单,空间不浪费 消息内容本身也有分隔符时需要转义,且需要扫描消息内容性能不高 推荐
封装成帧 固定长度字段存消息长度 先解析固定长度字段获取消息内容的长度,再根据该长度读取具体的消息内容 精确定位消息数据,特殊内容也不需要转义 理论上长度有限制需要提前预知可能的最大长度从而定义消息内容占用的字节数 超级推荐

帧的组成为:Fixed length header + Variable length body

Netty解决粘包和半包问题

1,Netty提供了针对封装成帧这种形式下不同方式的编解码器,解码就是将网络中的一些原始数据解码成上层应用的数据;与解码对应的就是编码,上层应用在发送数据的时候要按照对应的方式将数据进行编码然后交给底层
2,数据进来要解码,数据出去要编码,Netty提供了开箱即用的编解码器

封装成帧的Netty编解码器:

用法 解码 编码
固定长度(不推荐) FixedLengthFrameDecoder 不需要
分隔符(相对推荐) DelimiterBasedFrameDecoder(特殊的换行符:LineBasedFrameDecoder 应用层在每条消息后加上对应的分隔符即可
固定长度字段存消息长度 LengthFieldBasedFrameDecoder LengthFieldPrepender
Pipeline中编解码器的排列:

LengthFieldBasedFrameDecoder详解:
LengthFieldBasedFrameDecoder在构造时有4个重要参数,详解如下:
1,lengthFieldOffset:length域的偏移,正常情况下读取数据从偏移为0处开始读取,如果有需要可以从其他偏移量处开始读取
2,lengthFieldLength:length域占用的字节数
3,lengthAdjustment:在length域和content域中间是否需要填充其他字节数
4,initialBytesToStrip:解码后跳过的字节数

标签:解码,TCP,粘包,消息,长度,半包
From: https://www.cnblogs.com/Eduhg/p/18571964

相关文章

  • tcp是如何保证可靠连接的
    TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过以下几种机制来保证可靠的连接:三次握手(Three-wayHandshake):建立连接时,TCP使用三次握手来同步连接双方的序列号和确认号,确保双方的接收和发送通道都已准备好。序列......
  • 传输控制协议TCP超详细总结
    目录1、TCP报头2.1、什么是TCP:2.2、什么是TCP连接3、TCP三次握手建立连接4、TCP四次挥手拆除连接5、TCP保证可靠性的机制6、提升性能的机制(1)滑动窗口(2)快速重传7、TCP连接建立的本质8、TCP通过序列号、确认应答和超时重传提高可靠性9、TCP应用场景1.Web浏览......
  • Time Stop#NOIP2024/GDUTCPC
    重要声明:本文章从2024.11.2716:12开始落笔,故cnblogs平台显示的上传时间会在NOIP2024比赛之前。本文章作者不存在任何以各类非合法渠道提前获取NOIP2024比赛题目的可能,同时也没有将该想法实现对应的资源或权力。请各位读者作证,并请相关组织明察。Day-3/2024.11.27这......
  • HCIA-03 常用协议 ARP TCP UDP ICMP
    TCP/IP模型与OSI模型对比1.TCP/IP模型分为四层:应用层、传输层、网络层、数据链路层。2.OSI模型(开放系统互联模型)为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。3.TCP/IP模型中的传输层对应OSI模型中的传输层和会话层,网络层对应OSI模型的网络层,数据链路层......
  • HCIA-02 OSI和TCP参考模型
    网络基础知识复习1.交换机用于连接多台主机形成广播域,组成局域网。2.主机间通信使用MAC地址进行,限制广播域大小需使用路由器。3.跨广播域通信应使用IP地址网络参考模型与标准1.网络参考模型定义了网络设备间通信的标准,确保不同厂商设备兼容。2.OSI(开放系统互联)模型和TCP/IP......
  • TCP/IP 协议:网络世界的基石(2/10)
    一、引言在当今数字化时代,互联网已经成为人们生活中不可或缺的一部分。而在互联网的背后,TCP/IP协议扮演着至关重要的角色,堪称互联网的基石。TCP/IP协议是一组用于数据通信的协议集合,它的名字来源于其中最重要的两个协议:传输控制协议(TCP)和网际协议(IP)。自20世纪70年代末......
  • TCP可靠机制详解
    重传机制针对数据包丢失的情况,会用重传机制解决。超时重传在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的ACK确认应答报文,就会重发该数据,也就是我们常说的超时重传。TCP会在以下两种情况发生超时重传:数据包丢失,确认应答丢失缺点:当超时时间RTO较大时,重发......
  • TCP vs UDP:如何选择适合的网络传输协议?
    在网络通信中,TCP(TransmissionControlProtocol)和UDP(UserDatagramProtocol)是两种非常重要的传输层协议。它们各有特点,适用于不同类型的应用场景。本文将详细探讨TCP和UDP协议的结构、优缺点及应用,帮助您理解如何在不同情况下选择适合的协议。一、什么是TCP和UDP?TCP(传输控......
  • 计算机网络socket编程(5)_TCP网络编程实现echo_server
    个人主页:C++忠实粉丝欢迎点赞......
  • Tcp相关的一些机制
    Tcp的相关特性:1.有链接 2.可靠传输 3.面向字节流 4.全双工其中可靠传输是重中之重,是tcp最核心的特性,所谓的可靠传输不是说100%能够将数据传输到对方,而是退而求其次,1.发送方将数据发出去之后,能够知道接收方是否收到数据。2.一旦发现对方没有收到,就可以通过一系列的手段来......