TCP粘包、拆包

TCP粘包:应用层的数据被存入TCP的缓冲区,当应用层的数据大小远小于TCP的缓冲区大小时,TCP会将多个应用层的数据包积攒到一次发送。

TCP拆包:应用层的数据包,大于TCP缓冲区大小,被分成两个或者多个TCP报文。

TCP是面向字节流的,所以粘包是正常的,防止粘包可在应用层采取措施。

粘包、拆包解决办法

想办法为数据包增加边界

1、为每个数据包添加首部,首部中指明数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。

2、将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。

3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。

 

UDP为什么不粘包:

 

参考资料:https://www.jianshu.com/p/7b0e292f29d7

 

posted @ 2021-02-04 13:26  zeroPatrick  阅读(112)  评论(0)    收藏  举报