数据传输稳定性

一、消息粘包

1、TCP

TCP本质上并不会发生数据层面的粘包

TCP的发送方与接收方一定会确保数据是以一种有序的方式到达客户端

并且会确保数据包完整

TCP数据传输具有:顺序性、完整性

2、UDP

UDP不保证消息完整性,所以UDP往往发生丢包等情况

在常规所说的Socket“粘包”,并非数据传输层面粘包

3、粘包

“粘包”是数据处理的逻辑层面上发生的粘包

这里所说的“粘包”:包含TCP、UDP甚至其他任意的数据流交互方案

Mina、Netty等框架从根本来说也是为了解决粘包而设计的高并发库

二、消息不完整

从数据传输层面来讲TCP也不会发生数据丢失不全等情况

一旦出现一定是TCP停止运行终止之时

“数据不完整”依然针对的是数据的逻辑接收层面

在物理传输层面来讲数据一定是能安全完整地送达到另一端

但另一端可能缓冲区不够或者数据处理上不够完整导致数据只能读取一部分数据

这种情况称为“数据不完整”“数据丢包”等

三、如何有序地混传数据

数据传输加上开始结束标记(比如加上换行符、一行一行读取)

数据传输使用固定头部的方案

混合方案:固定头部、数据加密、数据描述

四、图示

4.1 数据粘包

4.2 数据不完整

4.3 信息出错

4.4 添加信息头

五、

1、数据收发过程

2、

3、构建有序消息

六、添加消息头功能UML类图

发布了174 篇原创文章 · 获赞 115 · 访问量 83万+

猜你喜欢

转载自blog.csdn.net/nicolelili1/article/details/104302565