如果TCP有效负载在传输过程中损坏,则重新计算的校验和将与传输的校验和不匹配。很棒,到目前为止一切都很好。
如果TCP校验和在传输过程中损坏,则重新计算的校验和将与现在已损坏的校验和不匹配。很棒,到目前为止一切都很好。
当有效负载和校验和都被破坏并且重新计算的校验和虽然与应有的校验和不同时,会发生与现在已损坏的校验和相匹配的情况会发生什么?
我可以看到一个良好的校验和算法(以及较低级别的额外校验和),这可能非常非常不可能,但TCP不是100%可靠吗?它如何解决这些误报?
答案 0 :(得分:31)
这里应该注意的事情,以及大多数人完全忽略的事实是,TCP校验和实际上是一个非常差的校验和。
TCP校验和是数据的16位补码和。这个总和 将捕获任何15位或更少的突发错误,以及所有16位突发 错误除了那些用1替换1的补码零的错误 另一个(即16个相邻的1位由16个零位替换,或者 反之亦然)。在均匀分布的数据上,预计会检测到 其他类型的错误,其比率为1 ^ 2 ^ 16。该 校验和也有一个主要的限制:一组16位的总和 无论值的顺序如何,值都是相同的 出现。
来源:ftp://ftp.cis.upenn.edu/pub/mbgreen/papers/ton98.pdf
因此,如果您在数据包的数据部分中的任何位置随机翻转任何数字位,则可能是1到65536,即使您根本没有触及校验和,也不会检测到此错误,作为新数据,即使完全腐败,实际上与旧的校验和相同。如果您只是在数据部分中交换两个16位值,无论哪一个,无论频率如何,都有可能100%没有检测到此错误,因为16位值出现在数据部分中的顺序是数据包与计算的校验和的值完全无关。
我在这里要说的是,您不必过于担心数据和校验和都会被破坏并且未检测到此错误的相当不可能的情况,因为损坏的校验和与损坏的数据匹配,事实上,互联网上每天有数百万个TCP数据包只有数据被破坏,并且未检测到此错误,因为未损坏的校验和仍然与损坏的数据匹配。
如果您需要传输数据并且想要确保数据没有被破坏,那么单独的TCP校验和对于此任务来说肯定是不够的。我甚至敢说CRC校验和不足以完成这项任务,因为CRC32可能无法检测到一行中超过32位受影响的错误(这些错误可以相互“抵消”)。确保完美数据传输所需的最小校验和是数据的MD5值。当然,任何比这更好的东西(SHA-1,SHA-256,SHA-384,SHA-512,Whirlpool等)都会更好,但MD5就足够了。 MD5对于加密安全性可能不够安全(因为它在过去曾多次被破坏),但作为数据校验和,MD5仍然绝对足够。
答案 1 :(得分:14)
不,它不可能100%可靠:this paper提到错误控制系统未捕获的1600万到100亿个数据包中的1个。我会让你计算每天/每周的出现次数:)
答案 2 :(得分:12)
TCP校验和是否会产生误报?
是。校验和比数据包小得多,因此许多不同的数据包可以匹配给定的校验和。
如果是,这是如何处理的?
在TCP中,根本没有。但是,大多数数据损坏将在更高级别上显着,例如你的XML不再格式正确;您的电子邮件不再是英文等。
答案 3 :(得分:7)
以及较低级别的其他校验和
其中一些比校验和更严格,例如以太网使用CRC而不是校验和。
这可能非常非常不可能,但TCP不是100%可靠吗?它如何解决这些误报?
我认为不可以。即使它通过硬拷贝和载体鸽发送了副本,宇宙射线或量子效应也可能理论上也会以完全相同的方式破坏复制品。这非常非常不可能。
您还可以在应用程序层(在TCP之上)实施任意强大的完整性清除,例如:使用加密签名。
答案 4 :(得分:3)
假设
数据包有效负载:1000字节
数据包校验和:2字节
具有双重误差的数据包的概率,校验和中的wchich之一(假设P非常小,小于1/10 ^ 5):
A = 8P*(1000*8P) = 6*10^4 * P^2
完全校验和的概率:
B = 1/2^16 = 6/10^4
误报概率:
A * B = 40 * P^2
概率很低(P = 1/10 ^ 6,那么假阳性的概率A * B = 4/10 ^ 11)但在任何情况下,任何crc算法都不能为零。随机1000字节数据包作为另一个随机1000字节数据包出现的概率为P ^ 8000,就像所有字节都包含错误一样。
如果P为高,例如从1/10 ^ 3到1,则上述计算不适用。在那种情况下,A = 1(所有包都包含双重错误),并且假阳性的概率仅为A * B = 6/10 ^ 4。这不是一个非常相关的案例,因为超过99%的接收数据包将包含crc中的错误。
答案 5 :(得分:-3)
我认为概率是十亿亿亿日元中的一个,因为如果TCP数据被破坏,这是传输层,它也意味着其他层(数据链路和网络)也将被破坏。我相信至少数据链路层具有完整性的校验和,因此您必须使两个校验和都失败。
以至少两个单独的校验和失败的方式腐败,在天文学上不太可能,甚至可能是不可能的。