TCP中的拆包和粘包

  • Post author:
  • Post category:其他




问题解析

拆包和粘包是在网络编程中比较常见的现象。

因为TCP协议底层是面向流的传输。

所以数据在传输的过程中,会被分割成一个个的数据包,接收端在接收数据的时候需要重新组装数据包,但是TCP协议不保证数据包与应用层的数据交互一一对应。

所以就有可能造成数据不完整的问题。因此候选人在回答这个问题之前,必须要了解这个问题的发生背景。

否则回答不到点上,就会错过这次机会。



问题回答

拆包是指把一个完整的数据包

拆分成多个小包进行发送

而接收端可能无法一次性接收所有的小包,导致接收到的数据不完整。

粘包是指把多个数据包

粘合在一起,一次性发送

而接收端可能无法正确地去区分每个数据包,导致接收到的数据出现错位或者混乱。

拆包和粘包现象是TCP协议的数据传输机制导致的,所以要解决这个问题,就需要让服务器端知道如何判断一个数据包的完整性。

因此可以采用以下几种方法:

  1. 在数据包中添加特殊字符或特殊标记来表示一个数据包的开始和结束。
  2. 通过自定义消息协议,并在协议头中保存数据包的长度信息。接收端可以根据这个长度来解析数据包,保证消息的完整性。
  3. 最后基于定长消息,发送端的消息长度是固定的,服务端按照固定长度来解析。


参考资料



【Java面试】3年经验面试被问,什么是拆包和粘包?怎么解决?



版权声明:本文为qq_46130027原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。