提供ISO文件以供下载的网站通常会提供这些文件的md5校验和,我们可以用来确认该文件已正确下载并且未损坏。
为什么这是必要的?当然,TCP的纠错属性就足够了。如果未正确接收到数据包,则将重新发送该数据包。TCP / IP连接的本质不保证数据完整性吗?
提供ISO文件以供下载的网站通常会提供这些文件的md5校验和,我们可以用来确认该文件已正确下载并且未损坏。
为什么这是必要的?当然,TCP的纠错属性就足够了。如果未正确接收到数据包,则将重新发送该数据包。TCP / IP连接的本质不保证数据完整性吗?
Answers:
正如其他人所指出的,在传输层的任何校验和都无济于事的情况下,数据损坏的可能性有很多,例如在发送端计算校验和之前已经发生的损坏,MITM拦截和修改流(以及数据)作为校验和),在接收端验证校验和后会发生损坏等。
如果我们忽略所有其他可能性,而只关注TCP校验和本身的细节以及它在验证数据完整性方面的实际作用,那么事实证明,此校验和的属性在检测错误方面根本不全面。选择此校验和算法的方式更能反映对速度和时间段(1970年代末)的要求。
这是TCP校验和的计算方式:
校验和:16位
校验和字段是标题和文本中所有16位字的一个补码之和的16位一个补码。如果段中包含奇数个要校验和的标题和文本八位位组,则在右边用零填充最后一个八位位组,以形成16位字用于校验和。打击垫不作为片段的一部分发送。在计算校验和时,校验和字段本身将替换为零。
这意味着在以这种方式对数据求和时任何平衡的破坏都将不会被发现。这将允许对数据进行多种损坏,但仅举一个简单的例子:更改16位字的顺序将始终未被发现。
实际上,它会捕获许多典型错误,但完全不能保证完整性。L2层还执行完整性检查(例如,以太网帧的CRC32),尽管它仅用于本地链路上的传输,而且损坏数据的许多情况甚至从未传递到TCP堆栈,这也为它提供了帮助。
就确保数据完整性而言,使用强哈希(最好是加密签名)验证数据在完全不同的级别上。两者几乎无法比较。
为什么应该检查md5sum的原因不胜枚举,但我想到了几个:
而且只需要几秒钟。
TCP / IP确实保证了数据完整性*。但是,它不能保证已下载文件的100%。发生这种情况的原因可能有很多。例如:您可能会在中间某处挂接丢失一个或两个字节的ISO。除非您需要一个或两个损坏的特定文件,否则您不会有任何问题。比较校验和可确保您确实下载了整个文件。
*查看评论
验证通过HTTP下载的文件的校验和有几个原因:
1条评论的来源,因为哈哈rep
丹尼尔(Daniel),取决于您说的ISO下载所使用的工具。如果是Say Firefox,则可能显示文件下载。但是,您可能没有完整的ISO。如果将其刻录,然后尝试使用它,则信息可能会丢失。这有时会在不同的托管文件的Web服务器上发生。
最好至少比较文件大小(总字节或位)以确保它们匹配,这是一个好习惯。Windows将显示与Linux不同的文件字节数。MD5总和检查将显示相同的值,无论使用哪个操作系统。希望这个对你有帮助。干杯...