为什么面向 TCP 连接是可靠的,网盘传输依旧存在坏包的概率?

2020-01-22 13:44:57 +08:00
 yukinotech
先排除部分网盘会使用 P2P 技术。

个人的看法是:网盘传输文件,为实现断点续传等功能,可以底层使用 http 或者一些 RPC 协议传输,然后自己在其上封装一下函数,并且可能增加一些校验,重传机制。从这个角度来看网盘传输依旧存在坏包的概率是很小的,但是事实是包括百度云盘在内的网盘下载压缩文件时,依旧存在坏包的概率。

求解,那个环节出了问题,或者思考疏漏了。
8742 次点击
所在节点    程序员
43 条回复
rainbowchou
2020-01-22 17:33:54 +08:00
出问题感觉也不是协议和软件上的事情,应该是端到端的硬件设备出错可能性较大,然后你所说的在 http 协议上再封装不是很能看懂,你说的校验 /重传不是 TCP 运输层对 ip 包做的事情吗,为何还要在应用层再搞一次,tcp 可以保证数据完整透传到应用层
mingliang2015
2020-01-22 18:01:34 +08:00
得看 crc 的机制了。
luoqeng
2020-01-22 18:15:09 +08:00
TCP 不能保证应用层处理了,这是问题的关键,一条消息有没有被处理或者处理失败是应用层的 ACK 机制了。
ace12
2020-01-22 18:45:20 +08:00
可以看看 crc,并不是百分之百保证正确,但是 99%是没问题的
imn1
2020-01-22 20:06:33 +08:00
@blu10ph #11
少了不可怕,多了就可怕了
niubee1
2020-01-22 20:23:20 +08:00
传输协议并不能保证最终到达不会出错,因为最终是执行下载的应用程序把文件数据最终写入存储设备的,应用程序写入的时候出错了,确切的说是从接收到 TCP 数据到写入存储的中间过程出错了,那么你得到的也就是一个坏的文件。

打个比方说,你快递寄包裹,走空运的话,传输协议的保证等于是保证飞机不会掉,你包裹放飞机上是安全的,但是没法保证机场装卸工会不会把你箱子搞破一个道理。
msg7086
2020-01-22 20:31:24 +08:00
文件存储出问题或者应用层出问题。TCP 是更底层的东西,救不了上层。
kljsandjb
2020-01-22 20:35:02 +08:00
可靠是可靠在假如不可靠的情况下它的处理方式
wanguorui123
2020-01-22 20:53:13 +08:00
硬盘坏快下载下来也是坏的;网盘的文件存储的业务逻辑有 Bug ; TCP 协议自身没问题。
love
2020-01-22 21:42:30 +08:00
下载 BT 完成的时候会有一次 hash 校验,网盘是没有做的
RLado
2020-01-22 23:27:41 +08:00
@alphatoad
就是百度网 P 的问题,BT 都没问题。 大文件百度要下 N 次才正常。
wangyzj
2020-01-23 00:50:06 +08:00
可以买彩票了吗?
xiadong1994
2020-01-23 01:36:41 +08:00
TCP 的可靠传输就是丢包重传,包校验和错误基本等于这个包丢了。校验和不能完全保证数据正确……
laminux29
2020-01-23 02:38:19 +08:00
1.除了整体对比之外,没有任何摘要或校验算法,能够保证 100%的校验出错误,包括 CRC、MD5、SHA512 等等。

2.越复杂的算法,无法验证出错误的概率就越小。一般来说,中小公司不做大数据的话,其实 MD5 的验证算法已经足够了。大文件传输的话,以 16MB 或 32MB 等进行分块,每块传输 md5 校验码,可以保证文件的正确性。

3.TCP 的目的是保证传输性能,并不是完全是保证数据安全。

4.如果要彻底保障数据安全,那么需要完全异构的多套硬件系统以及软件算法,并且进行操作对比来确保安全性。
vmebeh
2020-01-23 09:08:35 +08:00
还有可能网盘收到的文件就是坏的
roychan
2020-01-23 13:09:19 +08:00
任何一层都需要做容错
Kagari
2020-01-23 13:39:32 +08:00
我用百度云下同一个文件,不点暂停直接下完就没事,点了暂停再继续下载,解压就报错,你觉得是哪的锅?
firefox12
2020-01-23 13:47:19 +08:00
基本都是代码问题,比如服务器有 bug, 导致一些数据上传的时候 校验就有问题。代码 bug,保存数据时 自己覆盖了自己某些部分, 其实服务器端也能验证出来,但是它也直接传给你了。

还有就是 bit flip 这个概率其实很低很低,tcp 层发生了 但是逻辑层还有 md5 这样的 按照块 按照文件校验的。
其实 这种错 客户端 服务器端都知道。只是你们不知道。

想一想一款软件, 主要就是 存储 上传 下载, 运维 开发 怎么可能没有 bug, 对运营方来说 某个版本有错 导致某些数据是错的,是再正常不过的,怎么办?慢慢修复呗 等你再上传一次。

其实云存储 最难的 metadata 的存储。不是纯数据, 纯数据校验容易。
kojirou
2020-01-23 13:51:11 +08:00
直接说百度 LJ 不就完事了?
ps1aniuge
2020-01-23 16:44:09 +08:00
百度网盘太 LJ,百度网盘太 LJ,百度网盘越来越 LJ----------大文件下载完不校验!大文件下载完不校验!大文件下载完不校验!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/639845

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX