美文网首页
TCP粘包/拆包

TCP粘包/拆包

作者: 刘一一同学 | 来源:发表于2019-08-27 14:13 被阅读0次

    TCP是“流”协议,所谓“流”协议,就是没有界限,没有分割的一串数据。TCP会根据缓冲区实际情况进行划分,一个完整的包可能会拆分成多个包进行发送,也有可能把多个小包封装成一个大的数据包发送,这就是TCP粘包/拆包。

    发生原因

    • 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。
    • 应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包。
    • 进行MSS(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>MSS的时候将发生拆包。
    • 接收方法不及时读取套接字缓冲区数据,这将发生粘包。

    解决办法

    1. 设置定长消息,服务端每次读取既定长度的内容作为一条完整消息。
    2. 设置消息边界,服务端从网络流中按消息编辑分离出消息内容。
    3. 使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后去读该长度的内容。

    相关文章

      网友评论

          本文标题:TCP粘包/拆包

          本文链接:https://www.haomeiwen.com/subject/gsarkctx.html