TCP

一种面向连接的、可靠的、基于字节流的传输层通信协议

粘包

TCP是流,并没有包的概念.TCP只是个传输层实现,只负责可靠传输字节流
粘包=>区分不同数据流
区分不同的流需要在应用层进行处理

问题就处在TCP是基于字节流的协议,短时间发送多个短数据流,TCP并不会直接发送,而是尝试将几个数据合并在一起,然后再发送.这确实可以使得TCP的传输效率得到提升,但也是产生”粘包”的其中一个原因.
还有就是接收方没有及时把所有数据从缓冲区中取出,也会导致”粘包”

解决方法:

  1. 第一个情况,也就是发送方导致的,可以使用TCP的PUSH,强制发送缓冲区.但是肯定导致TCP效率下降
  2. 第二种情况,接收方需要优化程序和数据接受方法
  3. 最好是:设计发送格式,声明发送数据段长短,然后再发送数据段.这样就可以避免”粘包”了