首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么理解分片

2013-06-25 
如何理解分片我大概可以理解分片的原因和道理。但是书上有句话是:只有当所有分片到达目的地的时候才会通知

如何理解分片
我大概可以理解分片的原因和道理。
但是书上有句话是:只有当所有分片到达目的地的时候才会通知应用程序。

那我作如下假设。
我用TCP发了两次数据,分别是3字节和4字节。

那我有没有可能在recv的时候收到7次1个字节的包?按照上面那句话,这是不可能的。
那我有没有可能在recv的时候收到一个7字节的包?这个我理解为是可能的。

所以,接收到的数据是不是肯定是数据完整的呢(就算是有可能多个数据被合并成一个包)?我如果一次性发一个32字节的数据,有没有可能在另外一端的应用层分多次收到呢?


谢谢!
[解决办法]
是有可能分多次收到的,自己要判断没有接收完全。

根据自己定义的协议来,TCP粘包问题就是楼主所说的现象。

但是TCP本身是安全的
[解决办法]
TCP是流,你看到所谓发送3字节 4字节都是在用户态
执行是在内核态,所以你收到从1到7的组包都有可能。
没有什么所谓的粘包说,流哪来的包?


[解决办法]

引用:
谢谢楼上两位的解答
那么我应该如何理解书上这句话呢:
只有当所有分片到达目的地的时候才会通知应用程序。

出自《winsock网络编程经络》


个人认为,这个应该是针对的TCP包在IP层被网关拆包后重新组包,也就是
如果一个包超过了某个网关[路由]的最大MTU,那么会重新拆分并分别发送
只有当所有被拆分的包都成功接收后,才能重新组包成一个原始包

具体可以看 TCP/IP协议卷1-3 

[解决办法]
是否分片是看网络硬件的,如果分片粒度是1个字节,那么,7次收到一字节也是完全有可能的。

热点排行