如何理解分片
我大概可以理解分片的原因和道理。
但是书上有句话是:只有当所有分片到达目的地的时候才会通知应用程序。
那我作如下假设。
我用TCP发了两次数据,分别是3字节和4字节。
那我有没有可能在recv的时候收到7次1个字节的包?按照上面那句话,这是不可能的。
那我有没有可能在recv的时候收到一个7字节的包?这个我理解为是可能的。
所以,接收到的数据是不是肯定是数据完整的呢(就算是有可能多个数据被合并成一个包)?我如果一次性发一个32字节的数据,有没有可能在另外一端的应用层分多次收到呢?
谢谢!
[解决办法]
是有可能分多次收到的,自己要判断没有接收完全。
根据自己定义的协议来,TCP粘包问题就是楼主所说的现象。
但是TCP本身是安全的
[解决办法]
TCP是流,你看到所谓发送3字节 4字节都是在用户态
执行是在内核态,所以你收到从1到7的组包都有可能。
没有什么所谓的粘包说,流哪来的包?
[解决办法]
个人认为,这个应该是针对的TCP包在IP层被网关拆包后重新组包,也就是
如果一个包超过了某个网关[路由]的最大MTU,那么会重新拆分并分别发送
只有当所有被拆分的包都成功接收后,才能重新组包成一个原始包
具体可以看 TCP/IP协议卷1-3
[解决办法]
是否分片是看网络硬件的,如果分片粒度是1个字节,那么,7次收到一字节也是完全有可能的。