IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP粘包拆包问题是什么?如何去解决? -> 正文阅读

[网络协议]TCP粘包拆包问题是什么?如何去解决?

TCP粘包问题是什么?你会如何去解决它?

前言:

TCP协议是面向字节流的,TCP没有消息边界保护的功能,所以TCP就会发生粘包拆包的问题。

这一点不像UDP,因为UDP面向报文,所以它不会对报文进行处理,而是直接将报文作为一个整体,添加UDP头部

粘包和拆包是什么?

  1. 粘包:我举一个比较典型的例子:假如发送方发送了2个TCP报文段,但是接收方仅仅接收到了1个TCP报文段,这导致接收端应用程序无法区分两个TCP报文段的边界,也就无法进行数据处理

请添加图片描述

  1. 拆包:还是举一个例子:假如发送方发送了2个TCP报文段,接收方也接收到了2个报文段,但是收到的第一个TCP报文段中粘上了发送方发送的第2个报文段的一部分,这其实就是对第2个TCP报文段的拆包,同样接收方应用程序也无法处理和区分

在这里插入图片描述


发生粘包和拆包的原因是什么?

  1. 应用程序写入的数据大于套接字缓冲区大小,这将发生拆包问题
  2. 应用程序写入的数据小于套接字缓冲区大小,协议栈将多次写入的数据一并发出,这将产生粘包问题
  3. TCP分段,要发送的数据大于MSS,一个TCP报文装不下,所以进行分段,这将导致拆包问题
  4. 发送速率和接收速率不匹配,接收速度太慢,导致接收到的数据在缓冲区堆积,这将导致粘包问题

注意1:应用层的数据先传递到发送方的发送缓冲区,等到发送缓冲区满了之后,再将数据封装成TCP包发送

  • 如果缓冲区数据长度大于TCP双方商定的MSS,就会发生TCP分包

注意2:粘包、拆包对象是数据本身,也即要发送的数据本身连在一块或者被分开了


粘包和拆包问题的解决方法

  1. 消息定长,通过固定每次发送的数据长度,然后接收方同样就以这个长度作为分界来区分前后两个不同的包
  2. 加包头,为每一个要数据添加一个2字节或4字节长度标识,接收方程序每次先读取该长度,然后再读取相应数目的数据
  3. 尾部添加标记序列,比如'\n' '\t'
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:59:55  更:2022-02-28 16:00:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:33:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码