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

网络通信粘包问题

一、粘包 

原因:tcp 流式套接字,数据和数据之间没有边界,可能会导致多次的数据粘到一起

产生粘包的原因

  1. 发送方原因

    • 发送方采用了 Nagle 算法。该算法会将多个小的数据包合并成一个较大的数据包进行发送,以提高网络传输效率。但这可能导致接收方在接收数据时出现粘包现象。
    • 发送方发送数据的速度过快,接收方处理数据的速度跟不上,导致多个数据包在接收方的缓冲区中堆积,最终被一起读取,出现粘包。
  2. 接收方原因

    • 接收方接收数据的缓冲区大小设置不当。如果缓冲区设置过大,可能会导致多个数据包一次性被读入缓冲区,出现粘包;如果缓冲区设置过小,可能需要多次读取才能完整地接收一个数据包,增加了处理的复杂性。
    • 接收方在读取数据时没有明确的边界判断机制。如果接收方不知道每个数据包的边界在哪里,就容易将多个数据包误认为是一个连续的数据包,从而产生粘包问题。

解决方法:

1、规定一些数据与数据之间的间隔符    “\aa”, "\r\n";

2、可以指定要发送的数据长度

3、调整接收方缓冲区大小

4,、自己将数据打包

二、抓包

抓包,即捕获网络数据包。当数据在网络中传输时,抓包工具可以拦截并记录这些数据包,以便后续分析。抓包工具可以捕获各种类型的网络数据包,包括 TCP、UDP、IP 等协议的数据包。

常用抓包工具:wireshark、tcpdump

抓包的步骤

  1. 选择抓包工具
    • 根据自己的需求和操作系统选择合适的抓包工具。
  2. 安装和配置抓包工具
    • 按照抓包工具的安装说明进行安装,并根据需要进行配置。例如,设置抓包的网络接口、过滤条件等。
  3. 开始抓包
    • 启动抓包工具,开始捕获网络数据包。在抓包过程中,可以根据需要暂停、继续或停止抓包。
  4. 分析数据包
    • 抓包完成后,使用抓包工具提供的分析功能对捕获的数据包进行分析。可以根据协议、源地址、目的地址、端口号等条件进行过滤,以便快速找到感兴趣的数据包。
  5. 保存和导出数据包
    • 如果需要,可以将捕获的数据包保存为文件,以便后续分析。抓包工具通常支持多种文件格式的保存和导出,如 PCAP、CSV 等。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 手机游玩植物大战僵尸杂交版V2.3.7最新版教程(文章末尾免费直接下载链接)
  • 【CAN总线测试】——CAN物理层测试
  • 尚品汇-购物车列表、临时用户购物车与登录用户购物车合并实现(三十七)
  • C#实现数据采集系统-数据反写(3)ModbusTcp写入数据模块开发
  • 2024世界机器人大会盛大开幕,卓翼飞思携无人智能领域产品集中亮相 !
  • Otterctf 2018 内存取证 (复现)
  • Redis持久化RDB/AOF
  • linux和docker部署基本的命令掌握
  • 全国产化服务器:飞腾FT2000+/64核密集计算、显控及存储一体式加固服务器
  • 《Web项目跨域请求后端Api设置Cookie失败问题?》
  • 前端如何快速切换node版本:nvm
  • 1.反爬虫机制
  • 一、Java入门知识与基本使用
  • 常见面试问题(Python)
  • Java核心API——Collection集合的工具类Collections
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【RocksDB】TransactionDB源码分析
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Akka系列(七):Actor持久化之Akka persistence
  • Joomla 2.x, 3.x useful code cheatsheet
  • k个最大的数及变种小结
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MQ框架的比较
  • Python学习之路16-使用API
  • sessionStorage和localStorage
  • 从零开始学习部署
  • 对象管理器(defineProperty)学习笔记
  • 复习Javascript专题(四):js中的深浅拷贝
  • 复杂数据处理
  • 马上搞懂 GeoJSON
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • # 达梦数据库知识点
  • #pragma data_seg 共享数据区(转)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (windows2012共享文件夹和防火墙设置
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (四)JPA - JQPL 实现增删改查
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (转)四层和七层负载均衡的区别
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .Mobi域名介绍
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NetCore 如何动态路由
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET企业级应用架构设计系列之应用服务器
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • .Net中ListT 泛型转成DataTable、DataSet
  • // an array of int
  • :如何用SQL脚本保存存储过程返回的结果集