千家信息网

linux网络编程中tcp粘包及如何解决

发表于:2024-10-27 作者:千家信息网编辑
千家信息网最后更新 2024年10月27日,本篇文章给大家分享的是有关linux网络编程中tcp粘包及如何解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 什么是粘包流式套接
千家信息网最后更新 2024年10月27日linux网络编程中tcp粘包及如何解决

本篇文章给大家分享的是有关linux网络编程中tcp粘包及如何解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1. 什么是粘包


  • 流式套接字 首先说说TCP为什么叫流式套接字,顾名思义,是指TCP的数据传输跟流动的水一样,大家可以想象一下,水是连成一片的,它是没有分界线的,而TCP数据传输也是一样的,是没有界限的;



  • 缓存机制 熟悉TCP协议的人都应该知道,TCP发送数据,并不是应用程序send以后就发出去了,它是先存储在发送缓冲区的,为了性能考虑,可能会等到多个数据包汇总到一起后,操作系统底层再把缓冲区整体发送出去,接收数据也是一样。



  • 最大传输单元 在网络传输中,有个MTU-最大传输单元,是1500个字节,就是说每一次发送最多只能发送1500个字节,如果要发送超过这个长度的数据包,就需要分包发送。


当出现以上三点的情况时,接收端接收到的数据和发送的数据包大小、次数可能都不一致,我们没办法确定发送端发送过来的一个完整包是怎样的,就没办法正确获得我们需要的数据, 这就是粘包现象。 其实就是说,应用进程并不知道一个完整的数据包到底是多大,没法进行解析,客户端和服务端需要有一个约定的规则,来确保不出现粘包。

2. 怎么解决粘包

有以下三种情况可以解决粘包现象:

  • 一是约定数据包长度,即发送端和接收端约定一样的发送和接收的数据包长度,这样可以清晰的获取到我们需要的数据;

  • 二是使用分隔符,比如smtp协议就是在发送时,使用\r\n为分隔符,但如果我们要发送的数据中也有\r\n呢,就容易搞混淆,所以不是特别推荐;

  • 三是在每个数据包的开头利用2个或者4个字节填充整个数据包的长度,这样接收端可以先接收2个或者4个字节,就可以准确的知道真正的数据包是多长,从而正确获取需要的数据;

以上就是linux网络编程中tcp粘包及如何解决,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

数据 就是 传输 字节 长度 网络 约定 网络编程 编程 最大 分隔符 办法 单元 套接字 就是说 情况 数据传输 更多 现象 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 计算机网络技术上什么技校 网络安全钟诚 域名解析有什么服务器完成 pcl2启动器如何玩服务器 vivo崩坏三怎么切换服务器 计算机安全包括网络安全吗 棋牌软件开发哪里比例集中 全民世界大战服务器爆满怎么办 想做教育软件开发者 网络安全有那些防控单位 江苏服务器如何处理办法 数据库原理与技术申时凯 消防队网络安全工作汇报 使用网络安全问题有哪些 网络安全手抄报 易画字少 linux搭建下载服务器 wow服务器贫瘠之地 应用无法打开远程服务器不可用 安徽数据软件开发服务应用 万方中外专利数据库 网络安全意识测评 广东智慧党建软件开发电话 软件开发中最关键的人员是 脑点子是什么软件开发的 大学网络安全宣传周宣讲活动 商用数据库的价格 数据库 强党建 三年级网络安全绘画有字 服务器王牌战争 计算机网络技术基础考试试卷
0