tcp的传输过程是可靠的,那为什么许多较大的下载最终还要校验文件完整性?
tcp的传输过程是可靠的,那为什么许多较大的下载最终还要校验文件完整性?
-----
网友解答:
-----
TCP传输过程是可靠的,这里指的一次TCP请求是可靠的,一次请求包含了多个数据包的传输,这个过程是可靠的。但这仅仅保证了这一次TCP请求是可靠的,一次可靠并不能保证整个下载过程是可靠的。
下面从几个角度来分析下:
1. 大文件的传输并不都是一次TCP请求可以完成的,通常大文件会分成多次TCP请求通过Range:xxxx-的方式,分块下载的,比如下载中断后继续,并发下载等。下面尝试从浏览器下载一个4G+的Windows操作系统,我故意将网络中断重连了多次,造成了下载断断续续,同时采用网络抓包工具抓了每次的请求,可以看到下载这个文件时使用了多次TCP请求。
2.很多站点的文件会被镜像到多个地址,但是经过多次镜像不能保证与最初的文件是完全一样的,2016年2月20日,一个十分流行的Linux 分发版本 Linux Mint 被黑后植入了后门,这就造成了很多安装这个镜像的用户为他人打开了入侵的后门。
3.下载过程中断,比如网络突然断了,浏览器突然死了,或者下载程序突然崩溃了,这时候并不一定都会有错误提示的,因此文件是不完整的,这时可以通过比较文件大小发现的。
4.但有时候下载的文件大小没有问题,并不等同于文件是原始的文件,比如下载过程中的数据被篡改了,或者伪造了,或者连接的中间人网站等。上面的情形都可以通过将下载文件的校验值,与源文件官网给出的校验值比对来发现。
-----
网友解答:
-----
传输的确是可靠的
那储存一定是可靠的吗?
硬盘坏道呢?
-----
网友解答:
-----
好像。刚开始一般是点对点连线,安全性相对高一些。现在一般都是多点连接的。下载速度快,但是存在隐患。下载以后重新组包还原,所以要验证文件完整性,以防止错误还安全隐患。
-----
网友解答:
-----
我是搞安全的。简单说tcp确实保证到达,但是真实的网络世界就复杂了,有可能是对面以为到达了,其实没有。或者到达了你没有告诉他,他以为没有。这些是本来的网络情况,还有就是经过网络是有可能被篡改,比如被攻击啥的。还有经过网络节点,不是所有节点都是完美的,如果有bug啥的,啥都可以呢。
-----
网友解答:
-----
tcp只能保证每一个包都到达目的地,后面的就不保证了。一个大文件可能分成好多个小的数据包,tcp只能保证小的数据包成功传输,小的会被拼接成大的文件,这个拼接过程可能会出错,也有可能本地物理存储出错或者从网卡读取数据出错等等,所以为了解决这些问题,就需要文件校验
-----
网友解答:
-----
单个报文完整的,但是,如果一个文件比较大,就需要分成无数个报文,这就会出问题了!我测试过,一万个报文,完全就可能有一两个报文丢失!这样的结果,就可以想得到了!所以,需要检验文件完整性!
-----
网友解答:
-----
因为多线程下载再拼接,下载过程中重连等情况都有可能出错。
------------------
推荐阅读:
上一篇:应该如何管理好一个项目?有哪些好的建议和需要注意的问题?
下一篇: 金陵十二钗正册都有谁?