TCP的拆包和粘包

39 阅读1分钟
拆包

数据在进行网络传输的时候,链路层限制了每次传送的大小,比如是1460个字节,那网络层的IP层就会对数据进行分片传送,这样接收端接收到的数据就不是完整的包

粘包

数据传输时,有可能每次传送的数据包很小,这样每次都需要接收端确认再传下一个包,于是就有了nagle算法,把这些小的数据包合并成一个包一起传输

解决方式
  • 加个数据包的报文头,记录数据包的大小
  • 消息定长,就是规定每次报文的消息长度固定
  • 特殊的分割符,分割出报文,比如FTP协议就是通过回车换行符来分割

抓包工具Wireshark

  • 安装时需要选择Npcap
  • BPF 语法可以用来创建过滤器

抓包方法:tcpdump

tcpdump -i eth0 tcp port 3306 -w ./mysql.cap