谈粘包问题
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保数据在网络中传输的完整性和顺序性。TCP 通过三次握手连接,并通过滑动窗口机制控制数据流,以避免网络拥塞。
首先明确一点,粘包这个说法本质上是错误的。因为 TCP 本身是面向流的数据协议,根本不存在 UDP 协议中包的概念。粘包问题本身想要表达的是应用层中的在 TCP 层发送的时候可能被重组。导致可能出现发送端两次发送,但是接收端只有一次接收。
基于这个问题背景下,有三种解决方案:
- 在应用层设计固定长度的数据包
- 以指定字符(串)为包的结束标志
- 设计包头+包体格式