目录
问题分析
问题解答
问题分析
拆包和粘包是在网络编程中比较常见的现象。
因为TCP协议底层是面向流的传输,所以数据在传输的过程中会被分割成一个个的数据包(如图)
接收端在接收数据时需要重新组装数据包,但是TCP协议不保证数据包与应用层的数据交互一一对应,所以就可能会造成数据不完整的问题。
所以,候选人在回答这个问题之前,必须要了解这个问题的发生背景,否则回答不到点上就错过了这次机会。
问题解答
拆包指的是把一个完整的数据包拆分成多个小包进行发送,而接收端可能无法一次性接收到所有小包,导致接收到的数据不完整。
粘包指的是把多个数据包粘合在一起一次性发送,而接收端可能无法正确区分每个数据包,导致接收到的数据出现错位或混乱。
拆包和粘包现象是TCP协议的数据传输机制导致的,所以要解决这个问题,就是需要让服务端知道如何判断一个数据包的完整性,因此可以采用以下几种方法:
- 在数据包中添加特殊字符或特殊标记 ,表示一个数据包的开始和结尾;
- 通过自定义消息协议,并在协议头中保存数据包的长度信息,接收方可以根据这个长度来解析数据包来保证消息的完整性;
基于定长消息,也就是发送端的消息长度是固定的 ,服务端按照固定长度来解析。