为什么要拆包?
一般情况下,请求消息比较小,就不用拆包。
那什么情况下需要拆包?请求信息比较大。
那什么情况下请求消息会比较大?写文章的时候。
这个时候,就需要拆包,因为一篇文章的大小超过一个网络包的大小。
知识点来了,是否需要拆包,是看请求消息是否超过网络包大小。那网络包大小是什么东西呢?网络包大小是网络协议的规定,比如一个网络包大小是1000个字节。
所以,就拿你的请求数据和网络包大小比较即可,就知道要不要拆包。
拆包之后的包叫子包,或者分片。
接下来,问题来了, 一个请求消息拆分之后,接收端会组装还原为原始消息,那具体怎么还原呢?还原是怎么做到的呢?
拆包之后如何还原?
一个请求消息拆分为多个子包,如果想要还原,那么需要知道两个数据:
1、 一个是唯一id
不同子包属于同一个消息,唯一id就是用来干这个的。
2、 偏移量
知道了不同子包属于同一个消息,还要知道不同子包的顺序,接收子包的时候到达顺序不一定按发送顺序来的,所以还要确定顺序,那怎么确定呢?偏移量,即知道每个子包在总包的位置,就可以还原了。
唯一id
看ip报文
唯一id,其实就是ip报文里的标识字段。
另外,ip报文里也有可以看到偏移量字段
刚才是ip报文,接下来再看下还原子包的流程
就是这么拼接和还原的,其实就是基于两个数据:总包唯一id和子包偏移量。
参考
网络是怎样连接的?
tcp/ip详解:协议(卷一)