面试题:粘包和拆包

什么是消息保护边界?

UDP协议发送数据,每一个包都是被分开的,每一个包都有它自己的边界,不会在接收方与其他的包混杂成为一个包

所以粘包和拆包是针对于TCP包

什么是粘包和拆包?

客户端给服务端发送2个TCP数据包有以下几种情况:

(1)  正常,两个包分开发送

(2)  两个包一同发送

(3)  接收到不完整的或多出一部分的数据包。

有3个原因:

  1. 应用程序一次发送的数据大于套接字缓冲区,导致发生拆包,
  2. 应用程序一次发送数据小于套接字缓冲区大小,网卡将多次发送的数据一次发送到服务端
  3. 应用程序不及时读取套接字缓存区的数据
  4. tcp报文长度大于分段长度(MMS)。

面试题:粘包和拆包_第1张图片

注:上图第二种情况是粘包,第三种情况和第四种情况是粘包和拆包

如何解决拆包和粘包?

  • > 发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度(数据长度和内容一起发送)

  • > 发送端将每个数据包封装为固定长度(不够的可以通过补0填充)

  • > 可以在数据包之间设置边界,如添加特殊符号

具体实现

to do ......................

你可能感兴趣的:(计算机网络,计算机网络,TCP)