再用客户端发送数据的时候,是按照不缓冲直接发送的方式,一次发送50个字节的数据,一秒发送两个数据,做了一个实验,我计数发送100个数据,发现,有10个左右的数据被分成了两包数据发送,其他的正常发送,这是怎么一回事?

解决方案 »

  1.   

    出现这种情况,有可能是网卡的tso给分片了
      

  2.   

    ethtool -K eth0  tso off
      

  3.   

    这很正常啊,TCP是面向数据流的
      

  4.   

    TCP是面向数据流的,分包、粘包都是正常现象,一般有3种解决方案:(1)发送固定长度的消息(2)把消息的尺寸与消息一块发送(3)使用特殊标记来区分消息间隔
      

  5.   

    楼上已经回答了,面向流的协议,所以我们调用完 发送函数后,下层操作系统 怎么发送出去、TCP怎么分节、IP怎么分包,好像都不是确定的。
    这个帖子里有关于分包、粘包的介绍。https://bbs.csdn.net/topics/392478751https://bbs.csdn.net/topics/380167545
      

  6.   

    还有可以协议包头包尾是固定数据,用类似于内核的环形缓冲区来处理数据。如果需要应答的话性能会降低,不如使用udp+手动应答,效率最高。或者直接使用sctp,达到报文完整性和应答的效果